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


Reply via email to