camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: svn commit: r1180036 - in /camel/branches/camel-2.8.x/camel-core: ./ src/main/java/org/apache/camel/management/ src/main/java/org/apache/camel/management/mbean/ src/main/java/org/apache/camel/processor/interceptor/
Date Sun, 09 Oct 2011 08:10:18 GMT
Why do you change the dependencies in pom.xml file.
Is that a mistake?


On Fri, Oct 7, 2011 at 3:47 PM,  <cschneider@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: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Mime
View raw message