You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2005/12/08 22:48:10 UTC
svn commit: r355228 - in
/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms:
JMSOutTransportInfo.java JMSSender.java JMSTransport.java
SimpleJMSListener.java SimpleJMSWorker.java
Author: dims
Date: Thu Dec 8 13:48:06 2005
New Revision: 355228
URL: http://svn.apache.org/viewcvs?rev=355228&view=rev
Log:
- Collapse JMSTransport into JMSSender
- Don't store connector in TransportInfo
Removed:
webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSTransport.java
Modified:
webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSOutTransportInfo.java
webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSSender.java
webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java
webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSOutTransportInfo.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSOutTransportInfo.java?rev=355228&r1=355227&r2=355228&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSOutTransportInfo.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSOutTransportInfo.java Thu Dec 8 13:48:06 2005
@@ -19,16 +19,16 @@
import org.apache.axis2.transport.OutTransportInfo;
import javax.jms.Destination;
+import java.util.HashMap;
public class JMSOutTransportInfo implements OutTransportInfo {
- JMSConnector connector = null;
Destination dest = null;
String contentType = null;
+ HashMap properties = new HashMap();
- JMSOutTransportInfo(JMSConnector connector, Destination dest) {
- this.connector = connector;
+ JMSOutTransportInfo(Destination dest, HashMap properties) {
this.dest = dest;
-
+ this.properties.putAll(properties);
}
public void setContentType(String contentType) {
@@ -38,8 +38,8 @@
public Destination getDestination() {
return dest;
}
-
- public JMSConnector getConnector() {
- return connector;
+
+ public HashMap getProperties() {
+ return properties;
}
}
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSSender.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSSender.java?rev=355228&r1=355227&r2=355228&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSSender.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/JMSSender.java Thu Dec 8 13:48:06 2005
@@ -24,11 +24,14 @@
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.handlers.AbstractHandler;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.om.OMElement;
import org.apache.axis2.om.OMOutputFormat;
import org.apache.axis2.soap.SOAPEnvelope;
import org.apache.axis2.transport.TransportSender;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import javax.jms.Destination;
import java.io.ByteArrayInputStream;
@@ -42,10 +45,25 @@
/**
* This is meant to be used on a SOAP Client to call a SOAP server.
*/
-public class JMSSender extends JMSTransport implements TransportSender {
+public class JMSSender extends AbstractHandler implements TransportSender {
+
+ protected static Log log =
+ LogFactory.getLog(JMSSender.class.getName());
HashMap params = new HashMap();
+ static {
+ // add a shutdown hook to close JMS connections
+ Runtime.getRuntime().addShutdownHook(
+ new Thread() {
+ public void run() {
+ JMSSender.closeAllConnectors();
+ }
+ }
+ );
+ }
+
+
public JMSSender() {
}
@@ -66,35 +84,50 @@
*/
public void invoke(MessageContext msgContext) throws AxisFault {
JMSConnector connector = null;
+ HashMap properties = null;
+
Destination dest = null;
if (msgContext.isServerSide()) {
JMSOutTransportInfo transportInfo =
(JMSOutTransportInfo) msgContext.getProperty(
Constants.OUT_TRANSPORT_INFO);
if (transportInfo != null) {
- connector = transportInfo.getConnector();
dest = transportInfo.getDestination();
+ properties = transportInfo.getProperties();
}
}
+ String endpointAddress = msgContext.getTo().getAddress();
+
boolean waitForResponse = false;
- if (connector == null) {
+ if (dest == null) {
if (msgContext.getProperty(JMSConstants.WAIT_FOR_RESPONSE) != null && msgContext.getProperty(JMSConstants.WAIT_FOR_RESPONSE).equals(Boolean.TRUE))
waitForResponse =
((Boolean) msgContext.getProperty(
JMSConstants.WAIT_FOR_RESPONSE)).booleanValue();
-
- super.invoke(msgContext);
+ } else {
+ if (properties != null) {
+ JMSURLHelper url = null;
+ try {
+ url = new JMSURLHelper("jms:/" + dest);
+ } catch (Exception e) {
+ throw AxisFault.makeFault(e);
+ }
+ url.getProperties().putAll(properties);
+ endpointAddress = url.getURLString();
+ }
}
+ setupTransport(msgContext, endpointAddress);
+
+ if (connector == null) {
+ connector = (JMSConnector) msgContext.getProperty(JMSConstants.CONNECTOR);
+ }
try {
JMSEndpoint endpoint = null;
if (dest == null) {
Object destination = msgContext.getProperty(JMSConstants.DESTINATION);
- if (connector == null) {
- connector = (JMSConnector) msgContext.getProperty(JMSConstants.CONNECTOR);
- }
if (destination == null && msgContext.getTo() != null) {
String to = msgContext.getTo().getAddress();
if (to != null) {
@@ -258,5 +291,168 @@
soapActionString = "";
}
return soapActionString;
+ }
+
+ /**
+ * Set up any transport-specific derived properties in the message context.
+ *
+ * @param context the context to set up
+ * @throws AxisFault if service cannot be found
+ */
+ public void setupTransport(MessageContext context, String endpointAddr)
+ throws AxisFault {
+ if (log.isDebugEnabled()) {
+ log.debug("Enter: JMSTransport::invoke");
+ }
+
+ JMSConnector connector = null;
+ HashMap connectorProperties = null;
+ HashMap connectionFactoryProperties = null;
+
+ JMSVendorAdapter vendorAdapter = null;
+ JMSURLHelper jmsurl = null;
+
+ // a security context is required to create/use JMSConnectors
+ // TODO: Fill username password from context
+ String username = "";
+ String password = "";
+
+ // the presence of an endpoint address indicates whether the client application
+ // is instantiating the JMSTransport directly (deprecated) or indirectly via JMS URL
+
+ if (endpointAddr != null) {
+ try {
+ // performs minimal validation ('jms:/destination?...')
+ jmsurl = new JMSURLHelper(endpointAddr);
+
+ // lookup the appropriate vendor adapter
+ String vendorId = jmsurl.getVendor();
+ if (vendorId == null)
+ vendorId = JMSConstants.JNDI_VENDOR_ID;
+
+ if (log.isDebugEnabled())
+ log.debug("JMSTransport.invoke(): endpt=" + endpointAddr +
+ ", vendor=" + vendorId);
+
+ vendorAdapter = JMSVendorAdapterFactory.getJMSVendorAdapter(vendorId);
+ if (vendorAdapter == null) {
+ throw new AxisFault("cannotLoadAdapterClass:" + vendorId);
+ }
+
+ // populate the connector and connection factory properties tables
+ connectorProperties = vendorAdapter.getJMSConnectorProperties(jmsurl);
+ connectionFactoryProperties = vendorAdapter.getJMSConnectionFactoryProperties(jmsurl);
+ }
+ catch (Exception e) {
+ log.error(Messages.getMessage("malformedURLException00"), e);
+ throw new AxisFault(Messages.getMessage("malformedURLException00"), e);
+ }
+ } else {
+ // the JMSTransport was instantiated directly, use the default adapter
+ try {
+ vendorAdapter = JMSVendorAdapterFactory.getJMSVendorAdapter();
+ } catch (Exception e) {
+ throw new AxisFault("cannotLoadAdapterClass");
+ }
+
+ // use the properties passed in to the constructor
+ connectorProperties = params;
+ connectionFactoryProperties = params;
+ }
+
+ try {
+ connector = JMSConnectorManager.getInstance().getConnector(connectorProperties, connectionFactoryProperties,
+ username, password, vendorAdapter);
+ }
+ catch (Exception e) {
+ log.error(Messages.getMessage("cannotConnectError"), e);
+
+ if (e instanceof AxisFault)
+ throw (AxisFault) e;
+ throw new AxisFault("cannotConnect", e);
+ }
+
+ // store these in the context for later use
+ context.setProperty(JMSConstants.CONNECTOR, connector);
+ context.setProperty(JMSConstants.VENDOR_ADAPTER, vendorAdapter);
+
+ // vendors may populate the message context
+ vendorAdapter.setupMessageContext(context, jmsurl);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: JMSTransport::invoke");
+ }
+ }
+
+ /**
+ * Shuts down the connectors managed by this JMSTransport.
+ */
+ public void shutdown() {
+ if (log.isDebugEnabled()) {
+ log.debug("Enter: JMSTransport::shutdown");
+ }
+
+ closeAllConnectors();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: JMSTransport::shutdown");
+ }
+ }
+
+ /**
+ * Closes all JMS connectors
+ */
+ public static void closeAllConnectors() {
+ if (log.isDebugEnabled()) {
+ log.debug("Enter: JMSTransport::closeAllConnectors");
+ }
+
+ JMSConnectorManager.getInstance().closeAllConnectors();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: JMSTransport::closeAllConnectors");
+ }
+ }
+
+ /**
+ * Closes JMS connectors that match the specified endpoint address
+ *
+ * @param endpointAddr the JMS endpoint address
+ * @param username
+ * @param password
+ */
+ public static void closeMatchingJMSConnectors(String endpointAddr, String username, String password) {
+ if (log.isDebugEnabled()) {
+ log.debug("Enter: JMSTransport::closeMatchingJMSConnectors");
+ }
+
+ try {
+ JMSURLHelper jmsurl = new JMSURLHelper(endpointAddr);
+ String vendorId = jmsurl.getVendor();
+
+ JMSVendorAdapter vendorAdapter = null;
+ if (vendorId == null)
+ vendorId = JMSConstants.JNDI_VENDOR_ID;
+ vendorAdapter = JMSVendorAdapterFactory.getJMSVendorAdapter(vendorId);
+
+ // the vendor adapter may not exist
+ if (vendorAdapter == null)
+ return;
+
+ // determine the set of properties to be used for matching the connection
+ HashMap connectorProps = vendorAdapter.getJMSConnectorProperties(jmsurl);
+ HashMap cfProps = vendorAdapter.getJMSConnectionFactoryProperties(jmsurl);
+
+ JMSConnectorManager.getInstance().closeMatchingJMSConnectors(connectorProps, cfProps,
+ username, password,
+ vendorAdapter);
+ }
+ catch (Exception e) {
+ log.warn(Messages.getMessage("malformedURLException00"), e);
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: JMSTransport::closeMatchingJMSConnectors");
+ }
}
}
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java?rev=355228&r1=355227&r2=355228&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java Thu Dec 8 13:48:06 2005
@@ -242,4 +242,8 @@
System.exit(1);
}
+
+ public HashMap getProperties() {
+ return properties;
+ }
}
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java?rev=355228&r1=355227&r2=355228&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java Thu Dec 8 13:48:06 2005
@@ -21,6 +21,7 @@
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.description.TransportInDescription;
import org.apache.axis2.engine.AxisEngine;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.om.OMException;
@@ -117,19 +118,19 @@
MessageContext msgContext;
try {
+ TransportInDescription transportIn =
+ configurationContext.getAxisConfiguration().getTransportIn(
+ new QName(Constants.TRANSPORT_JMS));
TransportOutDescription transportOut =
configurationContext.getAxisConfiguration().getTransportOut(
new QName(Constants.TRANSPORT_JMS));
msgContext = new MessageContext(
- configurationContext);
- //,
- // configurationContext.getAxisConfiguration().getTransportIn(
- // new QName(Constants.TRANSPORT_JMS)),
- // transportOut);
+ configurationContext,
+ transportIn,
+ transportOut);
msgContext.setProperty(
Constants.OUT_TRANSPORT_INFO,
- new JMSOutTransportInfo(listener.getConnector(), message.getJMSReplyTo()));
-
+ new JMSOutTransportInfo(message.getJMSReplyTo(), listener.getProperties()));
msgContext.setTransportOut(transportOut);
msgContext.setServerSide(true);
} catch (Exception e) {