Author: cwiklik
Date: Mon Feb 14 15:18:08 2011
New Revision: 1070516

URL: http://svn.apache.org/viewvc?rev=1070516&view=rev
Log:
UIMA-2038 Modified destroy() to always call listener.shutdown() method. Removed 
code that explicitly waited for all threads to finish. This is no longed needed 
as all threads are daemon threads.

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

Modified: 
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/UimaDefaultMessageListenerContainer.java
URL: 
http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/UimaDefaultMessageListenerContainer.java?rev=1070516&r1=1070515&r2=1070516&view=diff
==============================================================================
--- 
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/UimaDefaultMessageListenerContainer.java
 (original)
+++ 
uima/uima-as/trunk/uimaj-as-activemq/src/main/java/org/apache/uima/adapter/jms/activemq/UimaDefaultMessageListenerContainer.java
 Mon Feb 14 15:18:08 2011
@@ -675,7 +675,9 @@ public class UimaDefaultMessageListenerC
           // Initialize the TaskExecutor. This call injects a custom Thread 
Pool into the
           // TaskExecutor provided in the spring xml. The custom thread pool 
initializes
           // an instance of AE in a dedicated thread
-          initializeTaskExecutor();
+          if ( getMessageSelector() != null && !isGetMetaListener()) {
+            initializeTaskExecutor();
+          }
           if ( threadPoolExecutor == null ) {
               // Plug in TaskExecutor to Spring's Listener
               __listenerRef.injectTaskExecutor();
@@ -925,12 +927,13 @@ public class UimaDefaultMessageListenerC
             "threadGroupDestroyer") {
       public void run() {
         try {
-               if ( !__listenerRef.awaitingShutdown && 
__listenerRef.isRunning() ) {
+          if ( !__listenerRef.awaitingShutdown ) {
                    awaitingShutdown = true;
                 // delegate stop request to Spring 
               __listenerRef.delegateStop();
               if (taskExecutor != null && taskExecutor instanceof 
ThreadPoolTaskExecutor) {
-                  ((ThreadPoolTaskExecutor) 
taskExecutor).getThreadPoolExecutor().shutdownNow();
+                ((ThreadPoolTaskExecutor) 
taskExecutor).getThreadPoolExecutor().purge();
+                  ((ThreadPoolTaskExecutor) 
taskExecutor).getThreadPoolExecutor().shutdown();
                   ((ThreadPoolTaskExecutor) 
taskExecutor).getThreadPoolExecutor().awaitTermination(Long.MAX_VALUE, 
TimeUnit.NANOSECONDS);
                 } else if (concurrentListener != null) {
                   shutdownTaskExecutor(concurrentListener.getTaskExecutor());
@@ -938,8 +941,8 @@ public class UimaDefaultMessageListenerC
                 } else if ( threadPoolExecutor != null ) {
                   shutdownTaskExecutor(threadPoolExecutor);
                 }
-                __listenerRef.shutdown();
                }
+          __listenerRef.shutdown();
         } catch (Exception e) {
           UIMAFramework.getLogger(CLASS_NAME).logrb(Level.WARNING, 
this.getClass().getName(),
                   "destroy", JmsConstants.JMS_LOG_RESOURCE_BUNDLE,
@@ -949,36 +952,6 @@ public class UimaDefaultMessageListenerC
         if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.FINEST)) {
           threadGroup.getParent().list();
         }
-        // Wait until all threads are accounted for
-        while (threadGroup.activeCount() > 0) {
-          try {
-            Thread[] threads = new Thread[threadGroup.activeCount()];
-            threadGroup.enumerate(threads);
-            boolean foundExpectedThreads = true;
-
-            for (Thread t : threads) {
-              try {
-                 if ( !isAmqThread(t) ) {
-                      foundExpectedThreads = false;
-                      break; // from for
-                 }
-               // Check if there are still any non-daemon threads left in the 
thread group
-                if ( !t.isDaemon() ) {
-                    foundExpectedThreads = false;
-                    break; // from for
-                       
-                }
-              } catch (Exception e) {
-              }
-            }
-            if (foundExpectedThreads) {
-              break; // from while
-            }
-            Thread.sleep(100);
-          } catch (InterruptedException e) {
-          }
-        }
-
         try {
           synchronized (threadGroup) {
             if (!threadGroup.isDestroyed()) {
@@ -994,18 +967,6 @@ public class UimaDefaultMessageListenerC
     
   }
   
-  private boolean isAmqThread(Thread t) {
-         String tName = t.getName();
-         // The following is necessary to account for the AMQ threads
-         // Any threads not named in the list below will cause a wait
-         // and retry until all non-amq threads are stopped
-         if (!tName.startsWith("main") && !tName.equalsIgnoreCase("timer-0")
-                 && !tName.equals("ReaderThread") && 
!tName.equals("BrokerThreadGroup")
-                 && !tName.startsWith("ActiveMQ")) {
-           return false;
-         }
-         return true;
-  }
   private void setUimaASThreadPoolExecutor(int consumentCount) throws 
Exception{
     super.setMessageListener(ml);
     // create task executor with custom thread pool for:


Reply via email to