Author: cwiklik
Date: Tue Feb  8 17:48:29 2011
New Revision: 1068493

URL: http://svn.apache.org/viewvc?rev=1068493&view=rev
Log:
UIMA-2038 Modified to close shared connection to a broker when stopping the 
last listener

Modified:
    
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/JmsInputChannel.java

Modified: 
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/JmsInputChannel.java
URL: 
http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/JmsInputChannel.java?rev=1068493&r1=1068492&r2=1068493&view=diff
==============================================================================
--- 
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/JmsInputChannel.java
 (original)
+++ 
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/JmsInputChannel.java
 Tue Feb  8 17:48:29 2011
@@ -886,14 +886,31 @@ public class JmsInputChannel implements 
       remoteJMXServer = null;
     }
   }
-
+  public void setTerminating() {
+        if ( listenerContainerList.size() > 0 ) {
+                //     set a global static flag to stop spring's from 
automatic recovery on lost connection
+                //     This method should be called when a service is shutting 
down
+                
((UimaDefaultMessageListenerContainer)listenerContainerList.get(0)).setTerminating();
+        }
+  }
+  public void terminate() {
+        try {
+                if ( listenerContainerList.size() > 0 ) {
+                        
((UimaDefaultMessageListenerContainer)listenerContainerList.get(0)).closeConnection();
+                }
+        } catch( Exception e) {
+            UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, 
CLASS_NAME.getName(),
+                  "terminate", UIMAEE_Constants.JMS_LOG_RESOURCE_BUNDLE,
+                  "UIMAEE_exception__WARNING", e);
+        }
+         
+  }
   public synchronized void stop(int channelsToClose) throws Exception {
-
     List<UimaDefaultMessageListenerContainer> listenersToRemove = new 
ArrayList<UimaDefaultMessageListenerContainer>();
     for (Object listenerObject : listenerContainerList) {
       final UimaDefaultMessageListenerContainer mL = 
(UimaDefaultMessageListenerContainer) listenerObject;
       if (mL != null && mL.isRunning() && doCloseChannel(mL, channelsToClose)) 
{
-        stopChannel(mL);
+         stopChannel(mL);
         // Just in case check if the container still in the list. If so, add 
it to
         // another list that container listeners that have been stopped and 
need
         // to be removed from the listenerContainerList. Removing the listener 
from
@@ -903,6 +920,14 @@ public class JmsInputChannel implements 
         // one element left. Process removal of listeners outside of the 
iterator
         // loop
         if (listenerContainerList.contains(mL)) {
+                           // When last listener, close shared connection
+          if ( listenerContainerList.size() == 1 ) {
+            try {
+              mL.closeConnection();
+            } catch( Exception e) {
+              e.printStackTrace();
+            }
+          }
           listenersToRemove.add(mL);
         }
       } else {
@@ -917,6 +942,10 @@ public class JmsInputChannel implements 
     }
     // Remove listeners from the listenerContainerList
     for (UimaDefaultMessageListenerContainer mL : listenersToRemove) {
+      if ( listenerContainerList.size() == 1 ) {
+        
((UimaDefaultMessageListenerContainer)listenerContainerList.get(0)).closeConnection();
+      }
+
       listenerContainerList.remove(mL);
     }
     listenersToRemove.clear();


Reply via email to