Author: michiel
Date: 2010-03-25 15:20:29 +0100 (Thu, 25 Mar 2010)
New Revision: 41607

Added:
   mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEvent.java
   mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventBroker.java
   
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventListener.java
Modified:
   mmbase/trunk/core/src/main/java/org/mmbase/core/event/Event.java
   mmbase/trunk/core/src/main/java/org/mmbase/core/event/EventManager.java
   mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEvent.java
Log:
  MMB-1944

Modified: mmbase/trunk/core/src/main/java/org/mmbase/core/event/Event.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/core/event/Event.java    
2010-03-25 14:16:05 UTC (rev 41606)
+++ mmbase/trunk/core/src/main/java/org/mmbase/core/event/Event.java    
2010-03-25 14:20:29 UTC (rev 41607)
@@ -7,6 +7,7 @@
 package org.mmbase.core.event;
 
 import java.io.Serializable;
+import java.util.*;
 
 import org.mmbase.module.core.MMBaseContext;
 
@@ -28,6 +29,7 @@
 
     protected int eventType = TYPE_UNSPECIFIED;
     protected String machine;
+    private   UUID machineId;
 
     /**
      * Every event originates from a certain machine, which is identified by a 
String.
@@ -37,7 +39,7 @@
         return machine;
     }
     public boolean isLocal() {
-        return MMBaseContext.getMachineName().equals(machine);
+        return machineId != null ? EventManager.getUUID().equals(machineId) : 
EventManager.getMachineName().equals(machine);
     }
 
 
@@ -55,9 +57,10 @@
      */
     public Event(String machine, int type) {
         this.machine =  machine == null ?
-            MMBaseContext.getMachineName() :
+            EventManager.getMachineName() :
             machine;
         this.eventType    = type;
+        this.machineId    = EventManager.getUUID();
     }
 
     public Event(String machine) {
@@ -68,7 +71,7 @@
      * @since MMBase-1.8.4
      */
     public Event() {
-        this(MMBaseContext.getMachineName());
+        this(null);
     }
 
     public Event clone(){

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/EventManager.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/core/event/EventManager.java     
2010-03-25 14:16:05 UTC (rev 41606)
+++ mmbase/trunk/core/src/main/java/org/mmbase/core/event/EventManager.java     
2010-03-25 14:20:29 UTC (rev 41607)
@@ -30,10 +30,13 @@
  * @since   MMBase-1.8
  * @version $Id$
  */
-public class EventManager {
+public class EventManager { //implements SystemEventListener {
 
     private static final Logger log = 
Logging.getLoggerInstance(EventManager.class);
 
+    private static final UUID INSTANCEID = UUID.randomUUID();
+    private static String machineName = "localhost";
+
     public static final String PUBLIC_ID_EVENTMANAGER = "-//MMBase//DTD 
eventmanager config 1.0//EN";
     public static final String DTD_EVENTMANAGER = "eventmanager_1_0.dtd";
 
@@ -62,7 +65,20 @@
         return eventManager;
     }
 
+    /**
+     * @since MMBase-2.0
+     */
+    public static UUID getUUID() {
+        return INSTANCEID;
+    }
+    /**
+     * @since MMBase-2.0
+     */
+    public static String getMachineName() {
+        return machineName;
+    }
 
+
     protected ResourceWatcher watcher = new ResourceWatcher() {
             public void onChange(String w) {
                 configure(w);
@@ -190,23 +206,27 @@
         }
         long startTime = System.nanoTime();
         for (EventBroker broker :  eventBrokers) {
-            if (broker.canBrokerForEvent(event)) {
-                broker.notifyForEvent(event);
-                if (log.isDebugEnabled()) {
-                    if (log.isTraceEnabled()) {
-                        log.trace("event from '" + event.getMachine() + "': " 
+ event + " has been accepted by broker " + broker);
-                    } else {
-                        log.debug("event from '" + event.getMachine() + "' has 
been accepted by broker " + broker);
+            try {
+                if (broker.canBrokerForEvent(event)) {
+                    broker.notifyForEvent(event);
+                    if (log.isDebugEnabled()) {
+                        if (log.isTraceEnabled()) {
+                            log.trace("event from '" + event.getMachine() + 
"': " + event + " has been accepted by broker " + broker);
+                        } else {
+                            log.debug("event from '" + event.getMachine() + "' 
has been accepted by broker " + broker);
+                        }
                     }
-                }
-            } else {
-                if (log.isDebugEnabled()) {
-                    if (log.isTraceEnabled()) {
-                        log.trace("event from '" + event.getMachine() + "': " 
+ event + " has been rejected by broker " + broker);
-                    } else {
-                        log.debug("event from '" + event.getMachine() + "' has 
been rejected by broker " + broker);
+                } else {
+                    if (log.isDebugEnabled()) {
+                        if (log.isTraceEnabled()) {
+                            log.trace("event from '" + event.getMachine() + 
"': " + event + " has been rejected by broker " + broker);
+                        } else {
+                            log.debug("event from '" + event.getMachine() + "' 
has been rejected by broker " + broker);
+                        }
                     }
                 }
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
             }
         }
         numberOfPropagatedEvents++;
@@ -214,6 +234,22 @@
     }
 
     /**
+     * Like {...@link #propagateEvent} but with an extra argument 
'asynchronous'.
+     * @param asynchronous If true, execute the propagation in a different 
thread, and don't let this thread wait for the result.
+     */
+    public void propagateEvent(final Event event, boolean asynchronous) {
+        if (asynchronous) {
+            ThreadPools.jobsExecutor.execute(new Runnable() {
+                    public void run() {
+                        propagateEvent(event);
+                    }
+                });
+        } else {
+            propagateEvent(event);
+        }
+    }
+
+    /**
      * @since MMBase-1.8.1
      */
     public long getNumberOfPropagatedEvents() {

Modified: mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEvent.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEvent.java  
2010-03-25 14:16:05 UTC (rev 41606)
+++ mmbase/trunk/core/src/main/java/org/mmbase/core/event/IdEvent.java  
2010-03-25 14:20:29 UTC (rev 41607)
@@ -21,7 +21,7 @@
 
     private static final long serialVersionUID = 1L;
 
-    private String id;
+    private final String id;
 
 
     public IdEvent(String machineName, int type, String id) {

Copied: mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEvent.java 
(from rev 41606, 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEvent.java)
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEvent.java      
                        (rev 0)
+++ mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEvent.java      
2010-03-25 14:20:29 UTC (rev 41607)
@@ -0,0 +1,42 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+import java.io.*;
+import java.util.*;
+
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+/**
+ *
+ * @author  Michiel Meeuwissen
+ * @since   MMBase-1.9.3
+ * @version $Id: TransactionEvent.java 41369 2010-03-15 20:54:45Z michiel $
+ */
+public abstract class SystemEvent extends Event {
+    private static final Logger LOG = 
Logging.getLoggerInstance(SystemEvent.class);
+
+    public SystemEvent() {
+    }
+
+    /**
+     * Notifies that the local MMBase is now fully up and running
+     */
+    public static class Up extends SystemEvent {
+    }
+
+    static {
+        SystemEventListener logger = new SystemEventListener() {
+                public void notify(SystemEvent s) {
+                    LOG.service(" Received " + s);
+                }
+            };
+        EventManager.getInstance().addEventListener(logger);
+    }
+
+}

Copied: 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventBroker.java 
(from rev 41606, 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEventBroker.java)
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventBroker.java    
                            (rev 0)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventBroker.java    
    2010-03-25 14:20:29 UTC (rev 41607)
@@ -0,0 +1,55 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+
+/**
+ *
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.9.3
+ * @version $Id: TransactionEventBroker.java 41369 2010-03-15 20:54:45Z 
michiel $
+ */
+public class SystemEventBroker extends AbstractEventBroker {
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see event.AbstractEventBroker#canBrokerFor(java.lang.Class)
+     */
+    public boolean canBrokerForListener(EventListener listener) {
+        return listener instanceof SystemEventListener;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see event.AbstractEventBroker#shouldNotifyForEvent(event.Event)
+     */
+    public boolean canBrokerForEvent(Event event) {
+        return event instanceof SystemEvent;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see event.AbstractEventBroker#notifyEventListeners()
+     */
+    protected void notifyEventListener(Event event, EventListener listener) {
+        SystemEvent te = (SystemEvent) event; //!!!!!
+        SystemEventListener sel = (SystemEventListener) listener;
+        sel.notify(te);
+    }
+
+    /* (non-Javadoc)
+     * @see org.mmbase.core.event.AbstractEventBroker#toString()
+     */
+    @Override
+    public String toString() {
+        return "SystemEvent Broker";
+    }
+
+}

Copied: 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventListener.java 
(from rev 41606, 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/SystemEventListener.java)
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventListener.java  
                            (rev 0)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/core/event/SystemEventListener.java  
    2010-03-25 14:20:29 UTC (rev 41607)
@@ -0,0 +1,17 @@
+/*
+ * This software is OSI Certified Open Source Software.
+ * OSI Certified is a certification mark of the Open Source Initiative. The
+ * license (Mozilla version 1.0) can be read at the MMBase site. See
+ * http://www.MMBase.org/license
+ */
+package org.mmbase.core.event;
+
+/**
+ *
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.9.3
+ * @version $Id: TransactionEventListener.java 41419 2010-03-16 12:54:44Z 
michiel $
+ */
+public interface SystemEventListener extends EventListener {
+    public void notify(SystemEvent event);
+}

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

Reply via email to