camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Schneider <ch...@die-schneider.net>
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 Wed, 12 Oct 2011 20:57:34 GMT
Hi Claus,

I read your mail and wanted to contact you on irc. I must have forgotten 
about it then.
Today Dan reminded me about it. The reason for the pom dependency change 
was that the spring notification support required an exception class 
from the spring-core. I see though that this change is not good in a 
bugfix release.

I have changed the Notification Support from the "spring way" to the 
Standard JMX way. I think it should now work and I was
able to put the pom into the old state.

Christian

Am 12.10.2011 10:07, schrieb Claus Ibsen:
> 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.ibsen@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,<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/
>>
>
>

-- 
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com


Mime
View raw message