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