Author: michiel
Date: 2010-04-13 18:50:39 +0200 (Tue, 13 Apr 2010)
New Revision: 41919

Modified:
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java
   mmbase/trunk/utils/src/main/java/org/mmbase/core/event/SystemEvent.java
   mmbase/trunk/utils/src/main/java/org/mmbase/util/ThreadPools.java
Log:
introduces SystemEvent.shutdown

Modified: 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java    
2010-04-13 16:28:56 UTC (rev 41918)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java    
2010-04-13 16:50:39 UTC (rev 41919)
@@ -83,6 +83,9 @@
         if (se instanceof SystemEvent.MachineName) {
             machineName = ((SystemEvent.MachineName) se).getName();
         }
+        if (se instanceof SystemEvent.Shutdown) {
+            shutdown();
+        }
         if (se instanceof SystemEvent.Collectable) {
             receivedSystemEvents.add((SystemEvent.Collectable) se);
         }

Modified: 
mmbase/trunk/utils/src/main/java/org/mmbase/core/event/SystemEvent.java
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/SystemEvent.java     
2010-04-13 16:28:56 UTC (rev 41918)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/SystemEvent.java     
2010-04-13 16:50:39 UTC (rev 41919)
@@ -50,6 +50,9 @@
         }
     }
 
+    public static class Shutdown extends Collectable {
+    }
+
     /**
      * Notifies the first determination or change in the 'machinename'
      */

Modified: mmbase/trunk/utils/src/main/java/org/mmbase/util/ThreadPools.java
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/util/ThreadPools.java   
2010-04-13 16:28:56 UTC (rev 41918)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/util/ThreadPools.java   
2010-04-13 16:50:39 UTC (rev 41919)
@@ -11,6 +11,7 @@
 import java.util.*;
 import java.lang.ref.WeakReference;
 import java.util.concurrent.*;
+import org.mmbase.core.event.*;
 import org.mmbase.util.logging.*;
 import org.mmbase.util.xml.UtilReader;
 import org.mmbase.util.xml.Instantiator;
@@ -153,26 +154,30 @@
     static {
         scheduler.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
 
-        // after some time the machine name will be known, use it for the 
'nameless' threads.
-        // Actually, getMachineName is starting to wait too, so I think the 
scheduled delay here is
-        // a bit silly, but otherwise I in some cases encountered an exception 
('cannot be started
-        // by this class').
-        scheduler.schedule(new Runnable() {
-                public void run() {
-                    String machineName = getMachineName();
-                    for (WeakReference<Thread> tr : nameLess) {
-                        Thread t = tr.get();
-                        if (t != null) {
-                            String stringBefore = "" + t;
-                            t.setName(machineName + t.getName());
-                            log.debug("Fixed name of " + stringBefore + " -> " 
+ t);
+
+        EventManager.getInstance().addEventListener(new SystemEventListener() {
+                @Override
+                public void notify(SystemEvent systemEvent) {
+                    if (systemEvent instanceof SystemEvent.MachineName) {
+
+                        String machineName = ((SystemEvent.MachineName) 
systemEvent).getName();
+                        for (WeakReference<Thread> tr : nameLess) {
+                            Thread t = tr.get();
+                            if (t != null) {
+                                String stringBefore = "" + t;
+                                t.setName(machineName + t.getName());
+                                log.debug("Fixed name of " + stringBefore + " 
-> " + t);
+                            }
                         }
+                        nameLess.clear();
+                    } else if (systemEvent instanceof SystemEvent.Shutdown) {
+                        ThreadPools.shutdown();
                     }
-                    nameLess.clear();
                 }
-            }, 60, TimeUnit.SECONDS);
+            });
     }
 
+
     private static final Map<String, ExecutorService> threadPools = new 
ConcurrentHashMap<String, ExecutorService>();
     static {
         threadPools.put("jobs", jobsExecutor);

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to