You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/06/22 06:44:47 UTC

svn commit: r956772 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/impl/ main/java/org/apache/camel/management/ main/java/org/apache/camel/management/mbean/ main/java/org/apache/camel/spi/ test/java/org/apache/camel/management/

Author: ningjiang
Date: Tue Jun 22 04:44:46 2010
New Revision: 956772

URL: http://svn.apache.org/viewvc?rev=956772&view=rev
Log:
CAMEL-2753 JMX notification for events

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java   (with props)
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java   (with props)
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java   (with props)
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java   (with props)
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThreadPool.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTracerTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedDualCamelContextTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Tue Jun 22 04:44:46 2010
@@ -33,6 +33,7 @@ import java.util.concurrent.atomic.Atomi
 import javax.naming.Context;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.ConsumerTemplate;
@@ -72,6 +73,7 @@ import org.apache.camel.spi.ComponentRes
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.EndpointStrategy;
+import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ExecutorServiceStrategy;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.FactoryFinderResolver;
@@ -134,6 +136,7 @@ public class DefaultCamelContext extends
     private AtomicBoolean managementStrategyInitialized = new AtomicBoolean(false);
     private final List<RouteDefinition> routeDefinitions = new ArrayList<RouteDefinition>();
     private List<InterceptStrategy> interceptStrategies = new ArrayList<InterceptStrategy>();
+    
     private boolean firstStartDone;
     private Boolean autoStartup = Boolean.TRUE;
     private Boolean trace = Boolean.FALSE;
@@ -605,7 +608,7 @@ public class DefaultCamelContext extends
         }
         startServices(object);
     }
-
+   
     public boolean hasService(Object object) {
         if (object instanceof Service) {
             return servicesToClose.contains(object);
@@ -1010,6 +1013,17 @@ public class DefaultCamelContext extends
             }
         }
 
+        // start notifiers as services
+        for (EventNotifier notifier : getManagementStrategy().getEventNotifiers()) {
+            if (notifier instanceof Service) {
+                Service service = (Service) notifier;
+                for (LifecycleStrategy strategy : lifecycleStrategies) {
+                    strategy.onServiceAdd(this, service, null);
+                }
+            }
+            startServices(notifier);
+        }
+
         // must let some bootstrap service be started before we can notify the starting event
         EventHelper.notifyCamelContextStarting(this);
 
@@ -1068,6 +1082,11 @@ public class DefaultCamelContext extends
 
         // must notify that we are stopped before stopping the management strategy
         EventHelper.notifyCamelContextStopped(this);
+        
+        // stop the notifier service
+        for (EventNotifier notifier : getManagementStrategy().getEventNotifiers()) {
+            shutdownServices(notifier);
+        }
 
         // shutdown management as the last one
         shutdownServices(managementStrategy);
@@ -1629,6 +1648,12 @@ public class DefaultCamelContext extends
             answer = new DefaultManagementStrategy();
         }
 
+        // inject CamelContext
+        if (answer instanceof CamelContextAware) {
+            CamelContextAware aware = (CamelContextAware) answer;
+            aware.setCamelContext(this);
+        }
+
         return answer;
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Tue Jun 22 04:44:46 2010
@@ -20,11 +20,8 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.ThreadPoolExecutor;
 import javax.management.JMException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
@@ -48,6 +45,7 @@ import org.apache.camel.management.mbean
 import org.apache.camel.management.mbean.ManagedDelayer;
 import org.apache.camel.management.mbean.ManagedEndpoint;
 import org.apache.camel.management.mbean.ManagedErrorHandler;
+import org.apache.camel.management.mbean.ManagedEventNotifier;
 import org.apache.camel.management.mbean.ManagedPerformanceCounter;
 import org.apache.camel.management.mbean.ManagedProcessor;
 import org.apache.camel.management.mbean.ManagedProducer;
@@ -73,6 +71,7 @@ import org.apache.camel.processor.SendPr
 import org.apache.camel.processor.Throttler;
 import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.spi.BrowsableEndpoint;
+import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.ManagementAware;
 import org.apache.camel.spi.ManagementStrategy;
@@ -297,6 +296,11 @@ public class DefaultManagementLifecycleS
             ManagedTracer mt = new ManagedTracer(context, (Tracer) service);
             mt.init(getManagementStrategy());
             return mt;
+        } else if (service instanceof EventNotifier) {
+            // special for event notifier
+            ManagedEventNotifier men = new ManagedEventNotifier(context, (EventNotifier) service);
+            men.init(getManagementStrategy());
+            return men;            
         } else if (service instanceof Producer) {
             answer = new ManagedProducer(context, (Producer) service);
         } else if (service instanceof ScheduledPollConsumer) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java Tue Jun 22 04:44:46 2010
@@ -33,6 +33,7 @@ import org.apache.camel.Service;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.ManagementNamingStrategy;
 import org.apache.camel.spi.RouteContext;
@@ -54,6 +55,7 @@ public class DefaultManagementNamingStra
     public static final String TYPE_ROUTE = "routes";
     public static final String TYPE_COMPONENT = "components";
     public static final String TYPE_TRACER = "tracer";
+    public static final String TYPE_EVENT_NOTIFIER = "eventnotifiers";
     public static final String TYPE_ERRORHANDLER = "errorhandlers";
     public static final String TYPE_THREAD_POOL = "threadpools";
     public static final String TYPE_SERVICE = "services";
@@ -207,6 +209,24 @@ public class DefaultManagementNamingStra
         return createObjectName(buffer);
     }
 
+    public ObjectName getObjectNameForEventNotifier(CamelContext context, EventNotifier eventNotifier) throws MalformedObjectNameException {
+        StringBuilder buffer = new StringBuilder();
+        buffer.append(domainName).append(":");
+        buffer.append(KEY_CONTEXT + "=").append(getContextId(context)).append(",");
+        buffer.append(KEY_TYPE + "=" + TYPE_EVENT_NOTIFIER + ",");
+
+        if (eventNotifier instanceof JmxNotificationEventNotifier) {
+            // JMX notifier shall have an easy to use name
+            buffer.append(KEY_NAME + "=").append("JmxEventNotifier");
+        } else {
+            // others can be per instance
+            buffer.append(KEY_NAME + "=")
+                .append("EventNotifier")
+                .append("(").append(ObjectHelper.getIdentityHashCode(eventNotifier)).append(")");
+        }
+        return createObjectName(buffer);
+    }
+
     public ObjectName getObjectNameForRoute(Route route) throws MalformedObjectNameException {
         Endpoint ep = route.getEndpoint();
         String id = route.getId();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java Tue Jun 22 04:44:46 2010
@@ -20,6 +20,8 @@ import java.util.ArrayList;
 import java.util.EventObject;
 import java.util.List;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.EventFactory;
@@ -43,7 +45,7 @@ import org.fusesource.commons.management
  * @see ManagedManagementStrategy
  * @version $Revision$
  */
-public class DefaultManagementStrategy implements ManagementStrategy {
+public class DefaultManagementStrategy implements ManagementStrategy, CamelContextAware {
 
     private List<EventNotifier> eventNotifiers = new ArrayList<EventNotifier>();
     private EventFactory eventFactory = new DefaultEventFactory();
@@ -51,6 +53,7 @@ public class DefaultManagementStrategy i
     private boolean onlyManageProcessorWithCustomId;
     private ManagementAgent managementAgent;
     private ManagementStatisticsLevel statisticsLevel = ManagementStatisticsLevel.All;
+    private CamelContext camelContext;
 
     public List<EventNotifier> getEventNotifiers() {
         return eventNotifiers;
@@ -129,6 +132,14 @@ public class DefaultManagementStrategy i
         return false;
     }
 
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
     public void notify(EventObject event) throws Exception {
         if (eventNotifiers != null && !eventNotifiers.isEmpty()) {
             for (EventNotifier notifier : eventNotifiers) {

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java?rev=956772&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java Tue Jun 22 04:44:46 2010
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import javax.management.NotificationBroadcasterSupport;
+
+public interface JmxNotificationBroadcasterAware {
+    
+    void setNotificationBroadcaster(NotificationBroadcasterSupport broadcaseter);
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationBroadcasterAware.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java?rev=956772&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java Tue Jun 22 04:44:46 2010
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.AttributeNotFoundException;
+import javax.management.DynamicMBean;
+import javax.management.InvalidAttributeValueException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanConstructorInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanNotificationInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.Notification;
+import javax.management.NotificationBroadcasterSupport;
+import javax.management.ReflectionException;
+
+import org.apache.camel.Service;
+import org.apache.camel.spi.EventNotifier;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * A JMX based {@link EventNotifier} which broadcasts JMX {@link Notification}s.
+ *
+ * @version $Revision$
+ */
+public class JmxNotificationEventNotifier extends EventNotifierSupport implements JmxNotificationBroadcasterAware {
+
+    private static final Log LOG = LogFactory.getLog(JmxNotificationEventNotifier.class);
+    private final AtomicLong counter = new AtomicLong();
+    private NotificationBroadcasterSupport notificationBroadcaseter;
+    
+    
+    public void setNotificationBroadcaster(NotificationBroadcasterSupport broadcaseter) {
+        notificationBroadcaseter = broadcaseter;
+    }
+
+    public void notify(EventObject event) throws Exception {
+        // use simple class name as the type
+        String type = event.getClass().getSimpleName();
+        Notification notification = new Notification(type, event, counter.getAndIncrement());
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Broadcasting JMX notification " + notification);
+        }
+        if (notificationBroadcaseter != null) {
+            notificationBroadcaseter.sendNotification(notification);
+        }
+    }
+
+    public boolean isEnabled(EventObject event) {
+        return true;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        counter.set(0);
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // TODO Auto-generated method stub
+        
+    }
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/JmxNotificationEventNotifier.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java Tue Jun 22 04:44:46 2010
@@ -25,6 +25,7 @@ import org.apache.camel.management.mbean
 import org.apache.camel.management.mbean.ManagedConsumer;
 import org.apache.camel.management.mbean.ManagedEndpoint;
 import org.apache.camel.management.mbean.ManagedErrorHandler;
+import org.apache.camel.management.mbean.ManagedEventNotifier;
 import org.apache.camel.management.mbean.ManagedProcessor;
 import org.apache.camel.management.mbean.ManagedProducer;
 import org.apache.camel.management.mbean.ManagedRoute;
@@ -32,6 +33,7 @@ import org.apache.camel.management.mbean
 import org.apache.camel.management.mbean.ManagedThreadPool;
 import org.apache.camel.management.mbean.ManagedTracer;
 import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementAgent;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -110,10 +112,13 @@ public class ManagedManagementStrategy e
             objectName = getManagementNamingStrategy().getObjectNameForProducer(ms.getContext(), ms.getProducer());
         } else if (managedObject instanceof ManagedTracer) {
             ManagedTracer mt = (ManagedTracer) managedObject;
-            objectName = getManagementNamingStrategy().getObjectNameForTracer(mt.getCamelContext(), mt.getTracer());
+            objectName = getManagementNamingStrategy().getObjectNameForTracer(mt.getContext(), mt.getTracer());
+        } else if (managedObject instanceof ManagedEventNotifier) {
+            ManagedEventNotifier men = (ManagedEventNotifier) managedObject;
+            objectName = getManagementNamingStrategy().getObjectNameForEventNotifier(men.getContext(), men.getEventNotifier());
         } else if (managedObject instanceof ManagedThreadPool) {
             ManagedThreadPool mes = (ManagedThreadPool) managedObject;
-            objectName = getManagementNamingStrategy().getObjectNameForThreadPool(mes.getCamelContext(), mes.getThreadPool());
+            objectName = getManagementNamingStrategy().getObjectNameForThreadPool(mes.getContext(), mes.getThreadPool());
         } else if (managedObject instanceof ManagedService) {
             // check for managed service should be last
             ManagedService ms = (ManagedService) managedObject;

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java?rev=956772&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java Tue Jun 22 04:44:46 2010
@@ -0,0 +1,140 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management.mbean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.management.MBeanNotificationInfo;
+import javax.management.NotificationBroadcasterSupport;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.management.JmxNotificationBroadcasterAware;
+import org.apache.camel.spi.EventNotifier;
+import org.apache.camel.spi.ManagementStrategy;
+
+/**
+ * @version $Revision$
+ */
+public class ManagedEventNotifier extends NotificationBroadcasterSupport implements ManagedEventNotifierMBean {
+
+    private CamelContext context;
+    private EventNotifier eventNotifier;
+
+    public ManagedEventNotifier(CamelContext context, EventNotifier eventNotifier) {
+        this.context = context;
+        this.eventNotifier = eventNotifier;
+        if (eventNotifier instanceof JmxNotificationBroadcasterAware) {
+            ((JmxNotificationBroadcasterAware)eventNotifier).setNotificationBroadcaster(this);
+        }
+    }
+
+    public void init(ManagementStrategy strategy) {
+        // do nothing
+    }
+
+    public CamelContext getContext() {
+        return context;
+    }
+
+    public EventNotifier getEventNotifier() {
+        return eventNotifier;
+    }
+    
+    public boolean isIgnoreCamelContextEvents() {
+        return getEventNotifier().isIgnoreCamelContextEvents();
+    }
+    
+    public void setIgnoreCamelContextEvents(boolean ignoreCamelContextEvents) {
+        getEventNotifier().setIgnoreCamelContextEvents(ignoreCamelContextEvents);
+    }
+    
+    public boolean isIgnoreRouteEvents() {
+        return getEventNotifier().isIgnoreRouteEvents();
+    }
+    
+    public void setIgnoreRouteEvents(boolean ignoreRouteEvents) {
+        getEventNotifier().setIgnoreRouteEvents(ignoreRouteEvents);
+    }
+    
+    public boolean isIgnoreServiceEvents() {
+        return getEventNotifier().isIgnoreServiceEvents();
+    }
+   
+    public void setIgnoreServiceEvents(boolean ignoreServiceEvents) {
+        getEventNotifier().setIgnoreServiceEvents(ignoreServiceEvents);
+    }
+   
+    public boolean isIgnoreExchangeEvents() {
+        return getEventNotifier().isIgnoreExchangeEvents();
+    }
+    
+    public void setIgnoreExchangeEvents(boolean ignoreExchangeEvents) {
+        getEventNotifier().setIgnoreExchangeEvents(ignoreExchangeEvents);
+    }
+    
+    public boolean isIgnoreExchangeCreatedEvent() {
+        return getEventNotifier().isIgnoreExchangeCreatedEvent();
+    }
+   
+    public void setIgnoreExchangeCreatedEvent(boolean ignoreExchangeCreatedEvent) {
+        getEventNotifier().setIgnoreExchangeCreatedEvent(ignoreExchangeCreatedEvent);
+    }
+    
+    public boolean isIgnoreExchangeCompletedEvent() {
+        return getEventNotifier().isIgnoreExchangeCompletedEvent();
+    }
+    
+    public void setIgnoreExchangeCompletedEvent(boolean ignoreExchangeCompletedEvent) {
+        getEventNotifier().setIgnoreExchangeCompletedEvent(ignoreExchangeCompletedEvent);
+    }
+    
+    public boolean isIgnoreExchangeFailureEvents() {
+        return getEventNotifier().isIgnoreExchangeFailureEvents();
+    }
+    
+    public void setIgnoreExchangeFailureEvents(boolean ignoreExchangeFailureEvents) {
+        getEventNotifier().setIgnoreExchangeFailureEvents(ignoreExchangeFailureEvents);
+    }
+
+    public boolean isIgnoreExchangeSentEvents() {
+        return getEventNotifier().isIgnoreExchangeSentEvents();
+    }
+ 
+    public void setIgnoreExchangeSentEvents(boolean ignoreExchangeSentEvents) {
+        getEventNotifier().setIgnoreExchangeSentEvents(ignoreExchangeSentEvents);
+    }
+    
+    public MBeanNotificationInfo[] getNotificationInfo() {
+        // all the class names in the event package
+        String[] names = {"CamelContextStartedEvent", "CamelContextStartingEvent", "CamelContextStartupFailureEvent"
+                , "CamelContextStopFailureEvent", "CamelContextStoppedEvent", "CamelContextStoppingEvent"
+                , "ExchangeCompletedEvent", "ExchangeCreatedEvent", "ExchangeFailureEvent"
+                , "ExchangeFailureHandledEvent", "ExchangeSentEvent", "RouteStartedEvent"
+                , "RouteStoppedEvent", "ServiceStartupFailureEvent", "ServiceStopFailureEvent"};
+
+        List<MBeanNotificationInfo> infos = new ArrayList<MBeanNotificationInfo>();
+        for (String name : names) {
+            MBeanNotificationInfo info = new MBeanNotificationInfo(new String[]{"org.apache.camel.management.event"},
+                    "org.apache.camel.management.event." + name, "The event " + name + " occurred");
+            infos.add(info);
+        }
+
+        return infos.toArray(new MBeanNotificationInfo[infos.size()]);
+    }
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java?rev=956772&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java Tue Jun 22 04:44:46 2010
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management.mbean;
+
+public interface ManagedEventNotifierMBean {
+    
+    boolean isIgnoreCamelContextEvents();
+
+    void setIgnoreCamelContextEvents(boolean ignoreCamelContextEvents);
+
+    boolean isIgnoreRouteEvents();
+
+    void setIgnoreRouteEvents(boolean ignoreRouteEvents);
+
+    boolean isIgnoreServiceEvents();
+
+    void setIgnoreServiceEvents(boolean ignoreServiceEvents);
+
+    boolean isIgnoreExchangeEvents();
+
+    void setIgnoreExchangeEvents(boolean ignoreExchangeEvents);
+
+    boolean isIgnoreExchangeCreatedEvent();
+
+    void setIgnoreExchangeCreatedEvent(boolean ignoreExchangeCreatedEvent);
+
+    boolean isIgnoreExchangeCompletedEvent();
+
+    void setIgnoreExchangeCompletedEvent(boolean ignoreExchangeCompletedEvent);
+
+    boolean isIgnoreExchangeFailureEvents();
+
+    void setIgnoreExchangeFailureEvents(boolean ignoreExchangeFailureEvents);
+
+    boolean isIgnoreExchangeSentEvents();
+
+    void setIgnoreExchangeSentEvents(boolean ignoreExchangeSentEvents);
+
+}

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThreadPool.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThreadPool.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThreadPool.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThreadPool.java Tue Jun 22 04:44:46 2010
@@ -42,7 +42,7 @@ public class ManagedThreadPool {
         // do nothing
     }
 
-    public CamelContext getCamelContext() {
+    public CamelContext getContext() {
         return camelContext;
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java Tue Jun 22 04:44:46 2010
@@ -42,7 +42,7 @@ public class ManagedTracer {
         // do nothing
     }
 
-    public CamelContext getCamelContext() {
+    public CamelContext getContext() {
         return camelContext;
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementNamingStrategy.java Tue Jun 22 04:44:46 2010
@@ -60,4 +60,5 @@ public interface ManagementNamingStrateg
 
     ObjectName getObjectNameForThreadPool(CamelContext context, ThreadPoolExecutor threadPool) throws MalformedObjectNameException;
 
+    ObjectName getObjectNameForEventNotifier(CamelContext context, EventNotifier eventNotifier) throws MalformedObjectNameException;
 }

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java?rev=956772&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java Tue Jun 22 04:44:46 2010
@@ -0,0 +1,134 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import java.util.Set;
+
+import javax.management.Notification;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.CastUtils;
+
+/**
+ * @version $Revision$
+ */
+public class JmxNotificationEventNotifierTest extends ContextTestSupport {
+
+    private JmxNotificationEventNotifier notifier;
+
+    @Override
+    protected boolean useJmx() {
+        return true;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        notifier = new JmxNotificationEventNotifier();
+        notifier.setIgnoreCamelContextEvents(true);
+        notifier.setIgnoreRouteEvents(true);
+        notifier.setIgnoreServiceEvents(true);
+
+        CamelContext context = new DefaultCamelContext(createRegistry());
+        context.getManagementStrategy().addEventNotifier(notifier);
+
+        DefaultManagementNamingStrategy naming = (DefaultManagementNamingStrategy) context.getManagementStrategy().getManagementNamingStrategy();
+        naming.setHostName("localhost");
+        naming.setDomainName("org.apache.camel");
+
+        return context;
+    }
+
+    public void testExchangeDone() throws Exception {
+        ObjectName on = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=eventnotifiers,name=JmxEventNotifier");
+        MyNotificationListener listener = new MyNotificationListener();   
+        context.getManagementStrategy().getManagementAgent().getMBeanServer().addNotificationListener(on,
+            listener,                                                                                         
+            new NotificationFilter() {
+                public boolean isNotificationEnabled(Notification notification) {
+                    return true;
+                }
+            }, null);
+
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+        
+        assertEquals("Get a wrong number of events", 5, listener.getEventCounter());
+
+        context.stop();
+    }
+
+    public void testExchangeFailed() throws Exception {
+        ObjectName on = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=eventnotifiers,name=JmxEventNotifier");
+        
+        MyNotificationListener listener = new MyNotificationListener();   
+        context.getManagementStrategy().getManagementAgent().getMBeanServer().addNotificationListener(on,
+            listener, new NotificationFilter() {
+                public boolean isNotificationEnabled(Notification notification) {
+                    return true;
+                }
+            }, null);
+        
+        try {
+            template.sendBody("direct:fail", "Hello World");
+            fail("Should have thrown an exception");
+        } catch (Exception e) {
+            // expected
+            assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
+        }
+        
+        assertEquals("Get a wrong number of events", 3, listener.getEventCounter());
+
+        context.stop();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("log:foo").to("mock:result");
+
+                from("direct:fail").throwException(new IllegalArgumentException("Damn"));
+            }
+        };
+    }
+    
+    private class MyNotificationListener implements NotificationListener {
+        
+        private int eventCounter;
+
+        public void handleNotification(Notification notification, Object handback) {
+            log.debug("Get the notification : " + notification);
+            eventCounter++;            
+        }
+        
+        public int getEventCounter() {
+            return eventCounter;
+        }
+        
+    }
+
+}
\ No newline at end of file

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/management/JmxNotificationEventNotifierTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTracerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTracerTest.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTracerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedCamelContextTracerTest.java Tue Jun 22 04:44:46 2010
@@ -46,8 +46,7 @@ public class ManagedCamelContextTracerTe
         naming.setDomainName("org.apache.camel");
         return context;
     }
-
-    @SuppressWarnings("unchecked")
+    
     public void testCamelContextTracing() throws Exception {
         MBeanServer mbeanServer = context.getManagementStrategy().getManagementAgent().getMBeanServer();
 

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedDualCamelContextTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedDualCamelContextTest.java?rev=956772&r1=956771&r2=956772&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedDualCamelContextTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedDualCamelContextTest.java Tue Jun 22 04:44:46 2010
@@ -39,8 +39,7 @@ public class ManagedDualCamelContextTest
         context.addRoutes(createRouteBuilder());
         return context;
     }
-
-    @SuppressWarnings("unchecked")
+    
     public void testDualCamelContext() throws Exception {
         CamelContext camel1 = createCamelContext();
         camel1.start();