You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/24 13:36:16 UTC

[3/8] camel git commit: CAMEL-9157: JMX - Add dataformat as mbean category

CAMEL-9157: JMX - Add dataformat as mbean category


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ca7fd9a8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ca7fd9a8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ca7fd9a8

Branch: refs/heads/master
Commit: ca7fd9a833ffa5a8895159564f18a4d7cff8f950
Parents: 5f399e6
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Sep 24 11:29:19 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Sep 24 11:29:19 2015 +0200

----------------------------------------------------------------------
 .../mbean/ManagedDataFormatMBean.java           | 41 +++++++++
 .../DefaultManagementLifecycleStrategy.java     |  3 +
 .../DefaultManagementObjectStrategy.java        | 13 +++
 .../management/ManagedManagementStrategy.java   | 12 ++-
 .../management/mbean/ManagedDataFormat.java     | 91 ++++++++++++++++++++
 .../camel/spi/ManagementObjectStrategy.java     |  2 +
 6 files changed, 155 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ca7fd9a8/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
new file mode 100644
index 0000000..c5ed0e0
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
@@ -0,0 +1,41 @@
+/**
+ * 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.api.management.mbean;
+
+import javax.management.openmbean.TabularData;
+
+import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
+
+public interface ManagedDataFormatMBean {
+
+    @ManagedAttribute(description = "Camel ID")
+    String getCamelId();
+
+    @ManagedAttribute(description = "Camel ManagementName")
+    String getCamelManagementName();
+
+    @ManagedAttribute(description = "DataFormat State")
+    String getState();
+
+    @ManagedOperation(description = "DataFormat information as JSon")
+    String informationJson();
+
+    @ManagedOperation(description = "Explain how this data format is configured")
+    TabularData explain(boolean allOptions);
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ca7fd9a8/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
index ab4db16..1c52d2a 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
@@ -81,6 +81,7 @@ import org.apache.camel.processor.interceptor.BacklogDebugger;
 import org.apache.camel.processor.interceptor.BacklogTracer;
 import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
+import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.InflightRepository;
 import org.apache.camel.spi.LifecycleStrategy;
@@ -449,6 +450,8 @@ public class DefaultManagementLifecycleStrategy extends ServiceSupport implement
                 managedBacklogDebuggers.put(backlogDebugger, md);
             }
             return md;
+        } else if (service instanceof DataFormat) {
+            answer = getManagementObjectStrategy().getManagedObjectForDataFormat(context, (DataFormat) service);
         } else if (service instanceof Producer) {
             answer = getManagementObjectStrategy().getManagedObjectForProducer(context, (Producer) service);
         } else if (service instanceof Consumer) {

http://git-wip-us.apache.org/repos/asf/camel/blob/ca7fd9a8/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
index 95d2a0f..d30e4fe 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
@@ -42,6 +42,7 @@ import org.apache.camel.management.mbean.ManagedComponent;
 import org.apache.camel.management.mbean.ManagedConsumer;
 import org.apache.camel.management.mbean.ManagedConvertBody;
 import org.apache.camel.management.mbean.ManagedCustomLoadBalancer;
+import org.apache.camel.management.mbean.ManagedDataFormat;
 import org.apache.camel.management.mbean.ManagedDelayer;
 import org.apache.camel.management.mbean.ManagedDynamicRouter;
 import org.apache.camel.management.mbean.ManagedEndpoint;
@@ -153,6 +154,7 @@ import org.apache.camel.processor.loadbalancer.TopicLoadBalancer;
 import org.apache.camel.processor.loadbalancer.WeightedLoadBalancer;
 import org.apache.camel.processor.validation.PredicateValidatingProcessor;
 import org.apache.camel.spi.BrowsableEndpoint;
+import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementObjectStrategy;
 import org.apache.camel.spi.RouteContext;
@@ -180,6 +182,17 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
     }
 
     @SuppressWarnings({"deprecation", "unchecked"})
+    public Object getManagedObjectForDataFormat(CamelContext context, DataFormat dataFormat) {
+        if (dataFormat instanceof org.apache.camel.spi.ManagementAware) {
+            return ((org.apache.camel.spi.ManagementAware<DataFormat>) dataFormat).getManagedObject(dataFormat);
+        } else {
+            ManagedDataFormat md = new ManagedDataFormat(context, dataFormat);
+            md.init(context.getManagementStrategy());
+            return md;
+        }
+    }
+
+    @SuppressWarnings({"deprecation", "unchecked"})
     public Object getManagedObjectForEndpoint(CamelContext context, Endpoint endpoint) {
         // we only want to manage singleton endpoints
         if (!endpoint.isSingleton()) {

http://git-wip-us.apache.org/repos/asf/camel/blob/ca7fd9a8/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
index 942df5f..58a6982 100644
--- a/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/ManagedManagementStrategy.java
@@ -25,6 +25,7 @@ import org.apache.camel.management.mbean.ManagedBacklogTracer;
 import org.apache.camel.management.mbean.ManagedCamelContext;
 import org.apache.camel.management.mbean.ManagedComponent;
 import org.apache.camel.management.mbean.ManagedConsumer;
+import org.apache.camel.management.mbean.ManagedDataFormat;
 import org.apache.camel.management.mbean.ManagedEndpoint;
 import org.apache.camel.management.mbean.ManagedErrorHandler;
 import org.apache.camel.management.mbean.ManagedEventNotifier;
@@ -35,7 +36,6 @@ import org.apache.camel.management.mbean.ManagedService;
 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.DataFormat;
 import org.apache.camel.spi.ManagementAgent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -92,6 +92,9 @@ public class ManagedManagementStrategy extends DefaultManagementStrategy {
         } else if (managedObject instanceof ManagedComponent) {
             ManagedComponent mc = (ManagedComponent) managedObject;
             objectName = getManagementNamingStrategy().getObjectNameForComponent(mc.getComponent(), mc.getComponentName());
+        } else if (managedObject instanceof ManagedDataFormat) {
+            ManagedDataFormat md = (ManagedDataFormat) managedObject;
+            objectName = getManagementNamingStrategy().getObjectNameForDataFormat(md.getContext(), md.getDataFormat());
         } else if (managedObject instanceof ManagedEndpoint) {
             ManagedEndpoint me = (ManagedEndpoint) managedObject;
             objectName = getManagementNamingStrategy().getObjectNameForEndpoint(me.getEndpoint());
@@ -134,12 +137,7 @@ public class ManagedManagementStrategy extends DefaultManagementStrategy {
             if (ms.getService() instanceof Endpoint) {
                 return null;
             }
-            if (ms.getService() instanceof DataFormat) {
-                DataFormat df = (DataFormat) ms.getService();
-                objectName = getManagementNamingStrategy().getObjectNameForDataFormat(ms.getContext(), df);
-            } else {
-                objectName = getManagementNamingStrategy().getObjectNameForService(ms.getContext(), ms.getService());
-            }
+            objectName = getManagementNamingStrategy().getObjectNameForService(ms.getContext(), ms.getService());
         }
 
         return nameType.cast(objectName);

http://git-wip-us.apache.org/repos/asf/camel/blob/ca7fd9a8/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
new file mode 100644
index 0000000..dcb5e09
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
@@ -0,0 +1,91 @@
+/**
+ * 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 javax.management.openmbean.TabularData;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.StatefulService;
+import org.apache.camel.api.management.ManagedInstance;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.ManagedDataFormatMBean;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.ManagementStrategy;
+
+@ManagedResource(description = "Managed DataFormat")
+public class ManagedDataFormat implements ManagedInstance, ManagedDataFormatMBean {
+    private final CamelContext camelContext;
+    private final DataFormat dataFormat;
+
+    public ManagedDataFormat(CamelContext camelContext, DataFormat dataFormat) {
+        this.camelContext = camelContext;
+        this.dataFormat = dataFormat;
+    }
+
+    public void init(ManagementStrategy strategy) {
+        // noop
+    }
+
+    public DataFormat getDataFormat() {
+        return dataFormat;
+    }
+
+    public CamelContext getContext() {
+        return camelContext;
+    }
+
+    @Override
+    public String getCamelId() {
+        return camelContext.getName();
+    }
+
+    @Override
+    public String getCamelManagementName() {
+        return camelContext.getManagementName();
+    }
+
+    @Override
+    public String getState() {
+        // must use String type to be sure remote JMX can read the attribute without requiring Camel classes.
+        if (dataFormat instanceof StatefulService) {
+            ServiceStatus status = ((StatefulService) dataFormat).getStatus();
+            return status.name();
+        }
+
+        // assume started if not a ServiceSupport instance
+        return ServiceStatus.Started.name();
+    }
+
+    @Override
+    public String informationJson() {
+        // TODO: not yet implemented
+        return null;
+    }
+
+    @Override
+    public TabularData explain(boolean allOptions) {
+        // TODO: not yet implemented
+        return null;
+    }
+
+    @Override
+    public DataFormat getInstance() {
+        return dataFormat;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/ca7fd9a8/camel-core/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java b/camel-core/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
index 5190cd6..b6acc7f 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
@@ -38,6 +38,8 @@ public interface ManagementObjectStrategy {
 
     Object getManagedObjectForComponent(CamelContext context, Component component, String name);
 
+    Object getManagedObjectForDataFormat(CamelContext context, DataFormat dataFormat);
+
     Object getManagedObjectForEndpoint(CamelContext context, Endpoint endpoint);
 
     Object getManagedObjectForErrorHandler(CamelContext context, RouteContext routeContext,