[KARAF-2343] Fixed cellar-event support git-svn-id: https://svn.apache.org/repos/asf/karaf/cellar/branches/cellar-2.3.x@1493463 13f79535-47bb-0310-9956-ffa450edef68
Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/e9ea518c Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/e9ea518c Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/e9ea518c Branch: refs/heads/cellar-2.3.x Commit: e9ea518c70f182180b22346dcec0d9f79cc54a82 Parents: d42adc0 Author: jbonofre <jbonofre@13f79535-47bb-0310-9956-ffa450edef68> Authored: Sun Jun 16 06:38:45 2013 +0000 Committer: jbonofre <jbonofre@13f79535-47bb-0310-9956-ffa450edef68> Committed: Sun Jun 16 06:38:45 2013 +0000 ---------------------------------------------------------------------- .../apache/karaf/cellar/event/EventSupport.java | 17 ++++++++++------- .../karaf/cellar/event/LocalEventListener.java | 10 +++++++--- 2 files changed, 17 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/e9ea518c/event/src/main/java/org/apache/karaf/cellar/event/EventSupport.java ---------------------------------------------------------------------- diff --git a/event/src/main/java/org/apache/karaf/cellar/event/EventSupport.java b/event/src/main/java/org/apache/karaf/cellar/event/EventSupport.java index 587aa40..819186d 100644 --- a/event/src/main/java/org/apache/karaf/cellar/event/EventSupport.java +++ b/event/src/main/java/org/apache/karaf/cellar/event/EventSupport.java @@ -25,7 +25,7 @@ import java.util.Map; * Generic event support. */ public class EventSupport extends CellarSupport { - + protected EventAdmin eventAdmin; /** @@ -35,17 +35,20 @@ public class EventSupport extends CellarSupport { * @return the map. */ public Map<String, Serializable> getEventProperties(Event event) { + String[] propertyNames = event.getPropertyNames(); Map<String, Serializable> properties = new HashMap<String, Serializable>(); for (String propertyName : propertyNames) { - Object property = event.getProperty(propertyName); - if (property instanceof Serializable) { - properties.put(propertyName, (Serializable) property); + // event property (org.osgi.framework.ServiceEvent for instance) contains non serializable objects (like source or service reference) + if (!propertyName.equals("event")) { + Object property = event.getProperty(propertyName); + if (property instanceof Serializable) + properties.put(propertyName, (Serializable) property); } } - + return properties; } @@ -71,7 +74,7 @@ public class EventSupport extends CellarSupport { /** * Post events via {@link EventAdmin}. * - * @param topicName the topic name. + * @param topicName the topic name. * @param properties the event properties. */ public void postEvent(String topicName, Map<String, Serializable> properties) { @@ -87,7 +90,7 @@ public class EventSupport extends CellarSupport { /** * Send events via {@link EventAdmin}. * - * @param topicName the topic name. + * @param topicName the topic name. * @param properties the event properties. */ public void sendEvent(String topicName, Map<String, Serializable> properties) { http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/e9ea518c/event/src/main/java/org/apache/karaf/cellar/event/LocalEventListener.java ---------------------------------------------------------------------- diff --git a/event/src/main/java/org/apache/karaf/cellar/event/LocalEventListener.java b/event/src/main/java/org/apache/karaf/cellar/event/LocalEventListener.java index 4863252..432e960 100644 --- a/event/src/main/java/org/apache/karaf/cellar/event/LocalEventListener.java +++ b/event/src/main/java/org/apache/karaf/cellar/event/LocalEventListener.java @@ -23,6 +23,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; +import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -35,6 +36,10 @@ public class LocalEventListener extends EventSupport implements EventHandler { @Override public void handleEvent(Event event) { + // ignore log entry event + if (event.getTopic().startsWith("org/osgi/service/log/LogEntry")) + return; + // check if the producer is ON if (eventProducer.getSwitch().getStatus().equals(SwitchStatus.OFF)) { LOGGER.warn("CELLAR EVENT: cluster event producer is OFF"); @@ -64,12 +69,11 @@ public class LocalEventListener extends EventSupport implements EventHandler { String topicName = event.getTopic(); Map<String, Serializable> properties = getEventProperties(event); if (isAllowed(group, Constants.CATEGORY, topicName, EventType.OUTBOUND)) { - // broascast the event + // broadcast the event ClusterEvent clusterEvent = new ClusterEvent(topicName, properties); clusterEvent.setSourceGroup(group); eventProducer.produce(clusterEvent); - } else if (!topicName.startsWith("org/osgi/service/log/LogEntry/")) - LOGGER.warn("CELLAR EVENT: event {} is marked as BLOCKED OUTBOUND", topicName); + } else LOGGER.warn("CELLAR EVENT: event {} is marked as BLOCKED OUTBOUND", topicName); } } }
