Christian did you read this? We cannot do a patch release where we change the dependencies in camel-core.
On Sun, Oct 9, 2011 at 10:10 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > 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/ > -- 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/