Why do you change the dependencies in pom.xml file. Is that a mistake?
On Fri, Oct 7, 2011 at 3:47 PM, <cschnei...@apache.org> wrote: > Author: cschneider > Date: Fri Oct 7 13:47:03 2011 > New Revision: 1180036 > > URL: http://svn.apache.org/viewvc?rev=1180036&view=rev > Log: > CAMEL-4500 Add JMX trace notifications > > Added: > > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/JMXNotificationTraceEventHandler.java > Modified: > camel/branches/camel-2.8.x/camel-core/pom.xml > > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java > > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java > > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java > > Modified: camel/branches/camel-2.8.x/camel-core/pom.xml > URL: > http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/pom.xml?rev=1180036&r1=1180035&r2=1180036&view=diff > ============================================================================== > --- camel/branches/camel-2.8.x/camel-core/pom.xml (original) > +++ camel/branches/camel-2.8.x/camel-core/pom.xml Fri Oct 7 13:47:03 2011 > @@ -86,10 +86,6 @@ > <!-- we only need spring-context.jar as optional as we need the JMX > export annotations --> > <exclusion> > <groupId>org.springframework</groupId> > - <artifactId>spring-core</artifactId> > - </exclusion> > - <exclusion> > - <groupId>org.springframework</groupId> > <artifactId>spring-beans</artifactId> > </exclusion> > <exclusion> > > Modified: > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java > URL: > http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java?rev=1180036&r1=1180035&r2=1180036&view=diff > ============================================================================== > --- > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java > (original) > +++ > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/JmxMBeanAssembler.java > Fri Oct 7 13:47:03 2011 > @@ -30,6 +30,8 @@ import org.slf4j.LoggerFactory; > import > org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource; > import org.springframework.jmx.export.annotation.ManagedResource; > import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler; > +import > org.springframework.jmx.export.notification.ModelMBeanNotificationPublisher; > +import > org.springframework.jmx.export.notification.NotificationPublisherAware; > > /** > * An assembler to assemble a {@link > javax.management.modelmbean.RequiredModelMBean} which can be used > @@ -78,6 +80,11 @@ public class JmxMBeanAssembler { > } catch (InvalidTargetObjectTypeException e) { > throw new JMException(e.getMessage()); > } > + > + if (obj instanceof NotificationPublisherAware) { > + NotificationPublisherAware publishereAwareObj = > (NotificationPublisherAware) obj; > + publishereAwareObj.setNotificationPublisher(new > ModelMBeanNotificationPublisher(mbean, name, obj)); > + } > > return mbean; > } > > Added: > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/JMXNotificationTraceEventHandler.java > URL: > http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/JMXNotificationTraceEventHandler.java?rev=1180036&view=auto > ============================================================================== > --- > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/JMXNotificationTraceEventHandler.java > (added) > +++ > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/JMXNotificationTraceEventHandler.java > Fri Oct 7 13:47:03 2011 > @@ -0,0 +1,114 @@ > +/** > + * 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.Date; > +import java.util.HashMap; > +import java.util.Map; > + > +import javax.management.Notification; > + > +import org.apache.camel.Exchange; > +import org.apache.camel.Message; > +import org.apache.camel.Processor; > +import org.apache.camel.model.ProcessorDefinition; > +import org.apache.camel.processor.Traceable; > +import org.apache.camel.processor.interceptor.TraceEventHandler; > +import org.apache.camel.processor.interceptor.TraceInterceptor; > +import org.apache.camel.processor.interceptor.Tracer; > +import org.apache.camel.util.MessageHelper; > +import org.springframework.jmx.export.notification.NotificationPublisher; > +import > org.springframework.jmx.export.notification.NotificationPublisherAware; > + > +public final class JMXNotificationTraceEventHandler implements > TraceEventHandler, NotificationPublisherAware { > + private static final int MAX_MESSAGE_LENGTH = 60; > + private long num; > + private NotificationPublisher notificationSender; > + private Tracer tracer; > + > + public JMXNotificationTraceEventHandler(Tracer tracer) { > + this.tracer = tracer; > + } > + > + @SuppressWarnings("rawtypes") > + public void traceExchangeOut(ProcessorDefinition node, Processor target, > TraceInterceptor traceInterceptor, Exchange exchange, Object traceState) > throws Exception { > + } > + > + @SuppressWarnings("rawtypes") > + public Object traceExchangeIn(ProcessorDefinition node, Processor > target, TraceInterceptor traceInterceptor, Exchange exchange) throws > Exception { > + return null; > + } > + > + @SuppressWarnings("rawtypes") > + public void traceExchange(ProcessorDefinition node, Processor target, > TraceInterceptor traceInterceptor, Exchange exchange) throws Exception { > + if (notificationSender != null && tracer.isJmxTraceNotifications()) { > + String body = > MessageHelper.extractBodyForLogging(exchange.getIn(), "", false, > tracer.getTraceBodySize()); > + > + if (body == null) { > + body = ""; > + } > + String message = body.substring(0, Math.min(body.length(), > MAX_MESSAGE_LENGTH)); > + Map tm = createTraceMessage(node, exchange, body); > + > + Notification notification = new > Notification("TraceNotification", exchange.toString(), num++, > System.currentTimeMillis(), message); > + notification.setUserData(tm); > + > + notificationSender.sendNotification(notification); > + } > + > + } > + > + private Map<String, Object> createTraceMessage(ProcessorDefinition<?> > node, Exchange exchange, String body) { > + Map<String, Object> mi = new HashMap<String, Object>(); > + mi.put("ExchangeId", exchange.getExchangeId()); > + mi.put("EndpointURI", getEndpointUri(node)); > + mi.put("TimeStamp", new Date(System.currentTimeMillis())); > + mi.put("Body", body); > + > + Message message = exchange.getIn(); > + Map<String, Object> sHeaders = message.getHeaders(); > + Map<String, Object> sProperties = exchange.getProperties(); > + > + Map<String, String> headers = new HashMap<String, String>(); > + for (String key : sHeaders.keySet()) { > + headers.put(key, message.getHeader(key, String.class)); > + } > + mi.put("Headers", headers); > + > + Map<String, String> properties = new HashMap<String, String>(); > + for (String key : sProperties.keySet()) { > + properties.put(key, exchange.getProperty(key, String.class)); > + } > + mi.put("Properties", properties); > + return mi; > + } > + > + private String getEndpointUri(ProcessorDefinition<?> node) { > + if (node instanceof Traceable) { > + Traceable tr = (Traceable)node; > + return tr.getTraceLabel(); > + } else { > + return node.getLabel(); > + } > + } > + > + @Override > + public void setNotificationPublisher(NotificationPublisher > notificationPublisher) { > + this.notificationSender = notificationPublisher; > + } > + > +} > > Modified: > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java > URL: > http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java?rev=1180036&r1=1180035&r2=1180036&view=diff > ============================================================================== > --- > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java > (original) > +++ > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java > Fri Oct 7 13:47:03 2011 > @@ -22,19 +22,31 @@ import org.apache.camel.processor.interc > import org.apache.camel.spi.ManagementStrategy; > import org.apache.camel.util.ObjectHelper; > import org.springframework.jmx.export.annotation.ManagedAttribute; > +import org.springframework.jmx.export.annotation.ManagedNotification; > +import org.springframework.jmx.export.annotation.ManagedNotifications; > import org.springframework.jmx.export.annotation.ManagedResource; > +import org.springframework.jmx.export.notification.NotificationPublisher; > +import > org.springframework.jmx.export.notification.NotificationPublisherAware; > > /** > * @version > */ > @ManagedResource(description = "Managed Tracer") > -public class ManagedTracer { > +@ManagedNotifications(@ManagedNotification(name = > "javax.management.Notification", > +description = "Fine grained trace events", > +notificationTypes = {"TraceNotification"})) > +public class ManagedTracer implements NotificationPublisherAware { > private final CamelContext camelContext; > private final Tracer tracer; > + private JMXNotificationTraceEventHandler jmxTraceHandler; > > public ManagedTracer(CamelContext camelContext, Tracer tracer) { > this.camelContext = camelContext; > this.tracer = tracer; > + this.jmxTraceHandler = new JMXNotificationTraceEventHandler(tracer); > + if (this.tracer.getTraceHandler() == null) { > + this.tracer.setTraceHandler(this.jmxTraceHandler); > + } > } > > public void init(ManagementStrategy strategy) { > @@ -409,5 +421,30 @@ public class ManagedTracer { > } > tracer.getDefaultTraceFormatter().setMaxChars(maxChars); > } > + > + @ManagedAttribute(description = "Should trace events be sent as jmx > notifications") > + public boolean isJmxTraceNotifications() { > + return this.tracer.isJmxTraceNotifications(); > + } > + > + @ManagedAttribute > + public void setJmxTraceNotifications(boolean jmxTraceNotifications) { > + this.tracer.setJmxTraceNotifications(jmxTraceNotifications); > + } > + > + @ManagedAttribute(description = "Maximum size of a message body for > trace notification") > + public int getTraceBodySize() { > + return this.tracer.getTraceBodySize(); > + } > + > + @ManagedAttribute > + public void setTraceBodySize(int traceBodySize) { > + this.tracer.setTraceBodySize(traceBodySize); > + } > + > + @Override > + public void setNotificationPublisher(NotificationPublisher > notificationPublisher) { > + this.jmxTraceHandler.setNotificationPublisher(notificationPublisher); > + } > > } > > Modified: > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java > URL: > http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java?rev=1180036&r1=1180035&r2=1180036&view=diff > ============================================================================== > --- > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java > (original) > +++ > camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java > Fri Oct 7 13:47:03 2011 > @@ -54,6 +54,8 @@ public class Tracer implements Intercept > private TraceInterceptorFactory traceInterceptorFactory = new > DefaultTraceInterceptorFactory(); > private TraceEventHandler traceHandler; > private String jpaTraceEventMessageClassName = JPA_TRACE_EVENT_MESSAGE; > + private boolean jmxTraceNotifications; > + private int traceBodySize; > > /** > * Creates a new tracer. > @@ -306,6 +308,22 @@ public class Tracer implements Intercept > this.jpaTraceEventMessageClassName = jpaTraceEventMessageClassName; > } > > + public boolean isJmxTraceNotifications() { > + return jmxTraceNotifications; > + } > + > + public void setJmxTraceNotifications(boolean jmxTraceNotifications) { > + this.jmxTraceNotifications = jmxTraceNotifications; > + } > + > + public int getTraceBodySize() { > + return traceBodySize; > + } > + > + public void setTraceBodySize(int traceBodySize) { > + this.traceBodySize = traceBodySize; > + } > + > @Override > public String toString() { > return "Tracer"; > > > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/