Author: veithen Date: Sat Jul 3 11:28:44 2010 New Revision: 960203 URL: http://svn.apache.org/viewvc?rev=960203&view=rev Log: AXIS2-4759: Applied patch submitted by Grant Patterson. Fixed JMSSender/JMSConnectionFactory so that JMS connections are properly closed when the JMS transport sender is stopped.
Modified: axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactory.java axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactoryManager.java axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java Modified: axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactory.java URL: http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactory.java?rev=960203&r1=960202&r2=960203&view=diff ============================================================================== --- axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactory.java (original) +++ axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactory.java Sat Jul 3 11:28:44 2010 @@ -125,6 +125,19 @@ public class JMSConnectionFactory { throw new AxisJMSException("Invalid cache level : " + val + " for JMS CF : " + name); } } + + /** + * Close all connections, sessions etc.. and stop this connection factory + */ + public synchronized void stop() { + if (sharedConnection != null) { + try { + sharedConnection.close(); + } catch (JMSException e) { + log.warn("Error shutting down connection factory : " + name, e); + } + } + } /** * Return the name assigned to this JMS CF definition @@ -366,7 +379,7 @@ public class JMSConnectionFactory { * Get a new Connection or shared Connection from this JMS CF * @return new or shared Connection from this JMS CF */ - private Connection getSharedConnection() { + private synchronized Connection getSharedConnection() { if (sharedConnection == null) { sharedConnection = createConnection(); if (log.isDebugEnabled()) { @@ -380,7 +393,7 @@ public class JMSConnectionFactory { * Get a shared Session from this JMS CF * @return shared Session from this JMS CF */ - private Session getSharedSession() { + private synchronized Session getSharedSession() { if (sharedSession == null) { sharedSession = createSession(getSharedConnection()); if (log.isDebugEnabled()) { @@ -394,7 +407,7 @@ public class JMSConnectionFactory { * Get a shared MessageProducer from this JMS CF * @return shared MessageProducer from this JMS CF */ - private MessageProducer getSharedProducer() { + private synchronized MessageProducer getSharedProducer() { if (sharedProducer == null) { sharedProducer = createProducer(getSharedSession(), sharedDestination); if (log.isDebugEnabled()) { Modified: axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactoryManager.java URL: http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactoryManager.java?rev=960203&r1=960202&r2=960203&view=diff ============================================================================== --- axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactoryManager.java (original) +++ axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConnectionFactoryManager.java Sat Jul 3 11:28:44 2010 @@ -113,6 +113,15 @@ public class JMSConnectionFactoryManager private static boolean equals(Object s1, Object s2) { return s1 == s2 || s1 != null && s1.equals(s2); } + + /** + * Stop all connection factories. + */ + public void stop() { + for (JMSConnectionFactory conFac : connectionFactories.values()) { + conFac.stop(); + } + } protected void handleException(String msg, Exception e) throws AxisFault { log.error(msg, e); Modified: axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java URL: http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java?rev=960203&r1=960202&r2=960203&view=diff ============================================================================== --- axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java (original) +++ axis/axis2/java/transports/trunk/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java Sat Jul 3 11:28:44 2010 @@ -64,6 +64,15 @@ public class JMSSender extends AbstractT connFacManager = new JMSConnectionFactoryManager(transportOut); log.info("JMS Transport Sender initialized..."); } + + @Override + public void stop() { + + // clean up any shared JMS resources in this sender's connection factories + connFacManager.stop(); + + super.stop(); + } /** * Get corresponding JMS connection factory defined within the transport sender for the