Author: veithen
Date: Sun May 23 18:05:46 2010
New Revision: 947453
URL: http://svn.apache.org/viewvc?rev=947453&view=rev
Log:
Applied Hiranya's patch for AXIS2-4722 (AXIS2-4722-update2.patch) without
changes.
Modified:
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
Modified:
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java?rev=947453&r1=947452&r2=947453&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java
(original)
+++
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java
Sun May 23 18:05:46 2010
@@ -173,7 +173,7 @@ public abstract class AbstractTransportL
state = BaseConstants.STARTED;
// register to receive updates on services for lifetime management
// cfgCtx.getAxisConfiguration().addObservers(axisObserver);
- log.info(getTransportName().toUpperCase() + " Listener started");
+ log.info(getTransportName().toUpperCase() + " listener started");
// iterate through deployed services and start
serviceTracker.start();
}
Modified:
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java?rev=947453&r1=947452&r2=947453&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
(original)
+++
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
Sun May 23 18:05:46 2010
@@ -45,6 +45,8 @@ public abstract class AbstractTransportL
/** A Map of service name to the protocol endpoints */
private List<E> endpoints = new ArrayList<E>();
+ protected boolean useGlobalListener = false;
+
@Override
public void init(ConfigurationContext cfgCtx,
TransportInDescription transportIn) throws AxisFault {
@@ -112,6 +114,8 @@ public abstract class AbstractTransportL
if (endpoint.loadConfiguration(service)) {
startEndpoint(endpoint);
endpoints.add(endpoint);
+ } else if (useGlobalListener) {
+ return;
} else {
throw new AxisFault("Service doesn't have configuration
information for transport " +
getTransportName());
Modified:
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java?rev=947453&r1=947452&r2=947453&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
(original)
+++
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
Sun May 23 18:05:46 2010
@@ -38,6 +38,14 @@ public abstract class AbstractDatagramTr
throws AxisFault {
super.init(cfgCtx, transportIn);
+ initDispatcher();
+ }
+
+ private void initDispatcher() throws AxisFault {
+ if (dispatcher != null) {
+ return;
+ }
+
DatagramDispatcherCallback callback = new DatagramDispatcherCallback()
{
public void receive(SocketAddress address,
@@ -47,11 +55,13 @@ public abstract class AbstractDatagramTr
workerPool.execute(new ProcessPacketTask(address, endpoint,
data, length));
}
};
+
try {
dispatcher = createDispatcher(callback);
} catch (IOException ex) {
throw new AxisFault("Unable to create selector", ex);
}
+
try {
defaultIp =
org.apache.axis2.util.Utils.getIpAddress(cfgCtx.getAxisConfiguration());
} catch (SocketException ex) {
@@ -70,6 +80,8 @@ public abstract class AbstractDatagramTr
@Override
protected void startEndpoint(E endpoint) throws AxisFault {
+ initDispatcher();
+
try {
dispatcher.addEndpoint(endpoint);
} catch (IOException ex) {
@@ -77,9 +89,10 @@ public abstract class AbstractDatagramTr
+ endpoint.getEndpointReferences(defaultIp)[0], ex);
}
if (log.isDebugEnabled()) {
- log.debug("Started listening on endpoint " +
endpoint.getEndpointReferences(defaultIp)[0]
- + " [contentType=" + endpoint.getContentType()
- + "; service=" + endpoint.getServiceName() + "]");
+ log.debug("Started listening on endpoint " +
+ endpoint.getEndpointReferences(defaultIp)[0] +
+ " [contentType=" + endpoint.getContentType() +
+ "; service=" + endpoint.getServiceName() + "]");
}
}
@@ -88,7 +101,8 @@ public abstract class AbstractDatagramTr
try {
dispatcher.removeEndpoint(endpoint);
} catch (IOException ex) {
- log.error("I/O exception while stopping listener for service " +
endpoint.getServiceName(), ex);
+ log.error("I/O exception while stopping listener for service " +
+ endpoint.getServiceName(), ex);
}
}
Modified:
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java?rev=947453&r1=947452&r2=947453&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
(original)
+++
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/IODispatcher.java
Sun May 23 18:05:46 2010
@@ -50,7 +50,7 @@ import org.apache.commons.logging.LogFac
* packet received, a {...@link ProcessPacketTask} instance is created
* and dispatched to a worker thread from the configured pool.
* <p>
- * The methods {...@link #addEndpoint(Endpoint)}, {...@link
#removeEndpoint(String)}
+ * The methods {...@link #addEndpoint(Endpoint)}, {...@link
#removeEndpoint(Endpoint)}
* and {...@link #stop()} are thread safe and may be called from any thread.
* However, to avoid concurrency issues, the operation on the underlying
* {...@link Selector} will always be executed by the thread executing the
@@ -88,7 +88,8 @@ public class IODispatcher implements Dat
private final DatagramDispatcherCallback callback;
private final Selector selector;
- private final Queue<SelectorOperation> selectorOperationQueue = new
ConcurrentLinkedQueue<SelectorOperation>();
+ private final Queue<SelectorOperation> selectorOperationQueue =
+ new ConcurrentLinkedQueue<SelectorOperation>();
/**
* Constructor.
@@ -120,6 +121,7 @@ public class IODispatcher implements Dat
channel.register(selector, SelectionKey.OP_READ, endpoint);
}
});
+ log.info("UDP endpoint started on port : " + endpoint.getPort());
}
/**
Modified:
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java?rev=947453&r1=947452&r2=947453&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java
(original)
+++
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java
Sun May 23 18:05:46 2010
@@ -39,11 +39,18 @@ import org.apache.axis2.transport.base.d
* than the specified length will be truncated.</dd>
* </dl>
*
- * @see org.apache.synapse.transport.udp
+ * @see org.apache.axis2.transport.udp
*/
-public class UDPListener extends AbstractDatagramTransportListener<Endpoint>
implements ManagementSupport {
+public class UDPListener extends AbstractDatagramTransportListener<Endpoint>
+ implements ManagementSupport {
+
+ public UDPListener() {
+ this.useGlobalListener = true;
+ }
+
@Override
- protected IODispatcher createDispatcher(DatagramDispatcherCallback
callback) throws IOException {
+ protected IODispatcher createDispatcher(DatagramDispatcherCallback
callback)
+ throws IOException {
IODispatcher dispatcher = new IODispatcher(callback);
new Thread(dispatcher, getTransportName() + "-dispatcher").start();
// Start a new thread for the I/O dispatcher
Modified:
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java?rev=947453&r1=947452&r2=947453&view=diff
==============================================================================
---
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
(original)
+++
axis/axis2/java/transports/trunk/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPSender.java
Sun May 23 18:05:46 2010
@@ -24,8 +24,6 @@ import java.io.ByteArrayInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
-import java.net.SocketAddress;
-import java.nio.channels.DatagramChannel;
import java.nio.ByteBuffer;
import org.apache.axiom.om.OMOutputFormat;
@@ -49,7 +47,7 @@ import javax.xml.stream.XMLStreamExcepti
/**
* Transport sender for the UDP protocol.
*
- * @see org.apache.synapse.transport.udp
+ * @see org.apache.axis2.transport.udp
*/
public class UDPSender extends AbstractTransportSender {
public UDPSender() {
@@ -57,15 +55,18 @@ public class UDPSender extends AbstractT
}
@Override
- public void init(ConfigurationContext cfgCtx, TransportOutDescription
transportOut) throws AxisFault {
+ public void init(ConfigurationContext cfgCtx, TransportOutDescription
transportOut)
+ throws AxisFault {
super.init(cfgCtx, transportOut);
}
@Override
- public void sendMessage(MessageContext msgContext, String targetEPR,
OutTransportInfo outTransportInfo) throws AxisFault {
+ public void sendMessage(MessageContext msgContext, String targetEPR,
+ OutTransportInfo outTransportInfo) throws
AxisFault {
if ((targetEPR == null) && (outTransportInfo != null)) {
// this can happen only at the server side and send the message
using back chanel
- DatagramOutTransportInfo datagramOutTransportInfo =
(DatagramOutTransportInfo) outTransportInfo;
+ DatagramOutTransportInfo datagramOutTransportInfo =
+ (DatagramOutTransportInfo) outTransportInfo;
MessageFormatter messageFormatter =
TransportUtils.getMessageFormatter(msgContext);
OMOutputFormat format = BaseUtils.getOMOutputFormat(msgContext);
format.setContentType(datagramOutTransportInfo.getContentType());
@@ -74,14 +75,17 @@ public class UDPSender extends AbstractT
ByteBuffer byteBuffer = ByteBuffer.allocate(payload.length);
byteBuffer.put(payload);
- DatagramSocket socket = null;
+ DatagramSocket socket;
try {
socket = new DatagramSocket();
- socket.send(new DatagramPacket(payload, payload.length,
datagramOutTransportInfo.getSourceAddress()));
+ try {
+ socket.send(new DatagramPacket(payload, payload.length,
+ datagramOutTransportInfo.getSourceAddress()));
+ } finally {
+ socket.close();
+ }
} catch (IOException e) {
throw new AxisFault("Unable to send packet", e);
- } finally {
- socket.close();
}
} else {
@@ -93,8 +97,10 @@ public class UDPSender extends AbstractT
try {
DatagramSocket socket = new DatagramSocket();
try {
- socket.send(new DatagramPacket(payload, payload.length,
InetAddress.getByName(udpOutInfo.getHost()), udpOutInfo.getPort()));
- if (!msgContext.getOptions().isUseSeparateListener() &&
!msgContext.isServerSide()){
+ socket.send(new DatagramPacket(payload, payload.length,
+ InetAddress.getByName(udpOutInfo.getHost()),
udpOutInfo.getPort()));
+ if (!msgContext.getOptions().isUseSeparateListener() &&
+ !msgContext.isServerSide()){
waitForReply(msgContext, socket,
udpOutInfo.getContentType());
}
}
@@ -108,12 +114,13 @@ public class UDPSender extends AbstractT
}
}
- private void waitForReply(MessageContext messageContext, DatagramSocket
datagramSocket, String contentType) throws IOException {
+ private void waitForReply(MessageContext messageContext, DatagramSocket
datagramSocket,
+ String contentType) throws IOException {
// piggy back message constant is used to pass a piggy back
// message context in asnych model
if (!(messageContext.getAxisOperation() instanceof OutInAxisOperation)
&&
-
(messageContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE) ==
null)) {
+
messageContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE) ==
null) {
return;
}