|
Axis 2 example source code file (DocLitWrappedPortImpl.java)
The Axis 2 DocLitWrappedPortImpl.java source code/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.jaxws.sample.parallelasync.server; import java.util.concurrent.Future; import java.util.Hashtable; import javax.jws.WebService; import javax.xml.ws.AsyncHandler; import javax.xml.ws.Holder; import javax.xml.ws.Response; import org.apache.axis2.jaxws.sample.parallelasync.common.Constants; import org.apache.axis2.jaxws.TestLogger; import org.test.parallelasync.AnotherResponse; import org.test.parallelasync.CustomAsyncResponse; import org.test.parallelasync.InvokeAsyncResponse; import org.test.parallelasync.PingResponse; import org.test.parallelasync.SleepResponse; /** * Async endpoint used for Async client side tests. Clients will invokeAsync * sleep method to force the server to block until wakeUp is called. The client * can call isAsleep to verify that sleep has been called by the async thread. */ /* @WebService( serviceName="AsyncService", portName="AsyncPort", targetNamespace = "http://org/test/parallelasync", endpointInterface = "org.test.parallelasync.AsyncPort", wsdlLocation="WEB-INF/wsdl/async_doclitwr.wsdl") */ @WebService(endpointInterface="org.apache.axis2.jaxws.sample.parallelasync.server.AsyncPort") public class DocLitWrappedPortImpl implements AsyncPort { private static final boolean DEBUG = false; // in order to allow multiple sleeping requests to be held at the same time // use a table where // the key is the request string // the value is the object used to block on // private static Hashtable sleepers = new Hashtable(); // intended to flag the need to cancel current requests being held (ie, sleeping) // does not stop new requests // not settable yet // need to determine when to reset it when dealing with multiple operations // currently reset when the sleepers table doesn't have any more requests private static boolean doCancell = false; // strings used for logging private String myClassName = "DocLitWrappedPortImpl."; /** * This operation takes the request and holds it in the web service until * <UL> * <LI>the client asks for it via wakeUp() * <LI>the operation times out * <LI>the operation is interrupted * </UL> * * @param request The request identifier */ public void sleep(Holder<String> request) { boolean cancelRequested = false; String key = new String(request.value); String msg = request.value; String title = myClassName+"sleep("+msg+"): "; String tid = " threadID ["+ Thread.currentThread().getId() + "] "; //if (DEBUG) //{ // System.out.println(title + tid + "Enter"); //} if (sleepers.get(key) != null) { // already holding this request id return; } Thread myThread = Thread.currentThread(); long threadID = myThread.getId(); // add this request to our list sleepers.put(key,myThread); // set the timeout value long sec = Constants.SERVER_SLEEP_SEC; try { //if (DEBUG) // System.out.println(title + "Starting to sleep on " // + " threadID ["+ threadID + "]" ); // hold this request until // - the wait time expires // - the client explicits asks for this request via wakeUp() // - the wait is interrupted // - a cancel occurs while (sec > 0 && !doCancell) { if (DEBUG) TestLogger.logger.debug(title + "Sleeping on " + " threadID [" + threadID + "]" + " timeLeft=" + sec); sec--; //msg.wait(500); myThread.sleep(500); } } catch (InterruptedException e) { TestLogger.logger.debug(title + "Sleep interrupted on " + " threadID [" + threadID + "]" + " timeLeft=[" + sec + "]"); } finally { if (DEBUG) TestLogger.logger.debug(title + "final processing for " + " threadID [" + threadID + "]"); // remove this request from the list sleepers.remove(key); // for now, reset the cancellation flag when the list of // waiting requests go to zero if (sleepers.isEmpty()) { doCancell = false; } } } /** * Checks the specified request to determine whether * it is still being held by the web service. * * @param request The request identifier to check * @return The String being used as a wait object if the * request is still being held by the server * or NULL if the request is not held by the server */ public String isAsleep(String request) { String title = myClassName+"isAsleep("+request+"): "; String tid = " threadID ["+ Thread.currentThread().getId() + "] "; if (sleepers.isEmpty()) { if (DEBUG) TestLogger.logger.debug(title + tid + " Not sleeping"); return null; } Thread value = (Thread) sleepers.get(request); if (value == null) { if (DEBUG) TestLogger.logger.debug(title + tid + " Not sleeping"); return null; } if (DEBUG) TestLogger.logger.debug(title + tid + " sleeping on [" + request + "]"); return request; } public String wakeUp(String request) { String title = myClassName+"wakeUp(): "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (sleepers.isEmpty()) { if (DEBUG) TestLogger.logger.debug(title + tid + " No one to wake up"); return null; } Thread value = (Thread) sleepers.get(request); if (value == null) { if (DEBUG) TestLogger.logger.debug(title + tid + " Thread not available. No one to wake up."); return null; } if (DEBUG) TestLogger.logger.debug(title + tid + " Interrupting " + " threadID [" + value.getId() + "]"); // interrupt the sleeper try { value.interrupt(); } catch (Exception e) { if (DEBUG) TestLogger.logger.debug(title + tid + " Interrupting " + " threadID [" + value.getId() + "] got Exception [" + e.getClass().getName() + "] [" + e.getMessage() + "]"); } return request; } /** * client side tests for remapping operation names, on the server side all * we need to do is roundtrip the message */ public String invokeAsync(String request) { String title = myClassName+"invokeAsync("+request+") : "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (DEBUG) TestLogger.logger.debug(title + "Enter" + tid); return request; } public String customAsync(String request) { String title = myClassName+"customeAsync("+request+") : "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (DEBUG) TestLogger.logger.debug(title + "Enter" + tid); return request + "from customAsync method"; } public String another(String request) { String title = myClassName+"another("+request+") : "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (DEBUG) TestLogger.logger.debug(title + "Enter" + tid); return request; } public String ping(String request) { String title = myClassName+"ping("+request+") : "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (DEBUG) TestLogger.logger.debug(title + "Enter" + tid); return request; } public String remapped(String request) { // TODO Auto-generated method stub String title = myClassName+"remapped("+request+") : "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (DEBUG) TestLogger.logger.debug(title + "Enter" + tid); return request; } // NOT USED: public String anotherAsync(String request) { // TODO Auto-generated method stub String title = myClassName+"anotherAsync("+request+") : "; String tid = " threadID ["+ Thread.currentThread().getId() + "]"; if (DEBUG) TestLogger.logger.debug(title + "Enter" + tid); return null; } public Future<?> anotherAsyncAsync(String request, AsyncHandler Other Axis 2 examples (source code examples)Here is a short list of links related to this Axis 2 DocLitWrappedPortImpl.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.