You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/11/26 17:50:44 UTC

tomee git commit: TOMEE-1668 @MBean(objectName) support

Repository: tomee
Updated Branches:
  refs/heads/master 3ff6ff6aa -> 3b161695d


TOMEE-1668 @MBean(objectName) support


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

Branch: refs/heads/master
Commit: 3b161695d046f49ba243cf672274deb721fbacef
Parents: 3ff6ff6
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Thu Nov 26 17:50:45 2015 +0100
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Thu Nov 26 17:50:45 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/openejb/api/jmx/MBean.java  |  1 +
 .../openejb/assembler/classic/Assembler.java    |  6 +-
 .../openejb/testing/ApplicationComposers.java   | 13 +++-
 .../config/CustomObjectNameMBeanTest.java       | 74 ++++++++++++++++++++
 4 files changed, 90 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/3b161695/container/openejb-api/src/main/java/org/apache/openejb/api/jmx/MBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-api/src/main/java/org/apache/openejb/api/jmx/MBean.java b/container/openejb-api/src/main/java/org/apache/openejb/api/jmx/MBean.java
index 0d89e42..c6e4f81 100644
--- a/container/openejb-api/src/main/java/org/apache/openejb/api/jmx/MBean.java
+++ b/container/openejb-api/src/main/java/org/apache/openejb/api/jmx/MBean.java
@@ -26,5 +26,6 @@ import java.lang.annotation.Target;
 @Target(value = ElementType.TYPE)
 @Inherited
 public @interface MBean {
+    String objectName() default "";
 }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/3b161695/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index 7064052..4b5ed1f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -39,6 +39,7 @@ import org.apache.openejb.NoSuchApplicationException;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.UndeployException;
+import org.apache.openejb.api.jmx.MBean;
 import org.apache.openejb.api.resource.DestroyableResource;
 import org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated;
 import org.apache.openejb.assembler.classic.event.AssemblerBeforeApplicationDestroyed;
@@ -1613,11 +1614,12 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
 
             final MBeanServer server = LocalMBeanServer.get();
             try {
-                final ObjectName leaf = new ObjectNameBuilder("openejb.user.mbeans")
+                final MBean annotation = clazz.getAnnotation(MBean.class);
+                final ObjectName leaf = annotation == null || annotation.objectName().isEmpty() ? new ObjectNameBuilder("openejb.user.mbeans")
                     .set("application", id)
                     .set("group", clazz.getPackage().getName())
                     .set("name", clazz.getSimpleName())
-                    .build();
+                    .build() : new ObjectName(annotation.objectName());
 
                 server.registerMBean(new DynamicMBeanWrapper(wc, instance), leaf);
                 appMbeans.put(mbeanClass, leaf.getCanonicalName());

http://git-wip-us.apache.org/repos/asf/tomee/blob/3b161695/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
index 1a85edd..d7c42f2 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
@@ -1039,15 +1039,24 @@ public class ApplicationComposers {
         SystemInstance.get().setComponent((Class<Object>) key, value);
     }
 
-    public void evaluate(final Object testInstance, final Callable<Void> next) throws Exception {
+    public <T> T evaluate(final Object testInstance, final Callable<T> next) throws Exception {
         before(testInstance);
         try {
-            next.call();
+            return next.call();
         } finally {
             ThreadContext.exit(previous);
             after();
         }
+    }
 
+    public void evaluate(final Object testInstance, final Runnable next) throws Exception {
+        evaluate(testInstance, new Callable<Void>() {
+            @Override
+            public Void call() throws Exception {
+                next.run();
+                return null;
+            }
+        });
     }
 
     public void after() throws Exception {

http://git-wip-us.apache.org/repos/asf/tomee/blob/3b161695/container/openejb-core/src/test/java/org/apache/openejb/config/CustomObjectNameMBeanTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/CustomObjectNameMBeanTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/CustomObjectNameMBeanTest.java
new file mode 100644
index 0000000..da98276
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/CustomObjectNameMBeanTest.java
@@ -0,0 +1,74 @@
+/**
+ * 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.openejb.config;
+
+import org.apache.openejb.api.jmx.MBean;
+import org.apache.openejb.api.jmx.ManagedAttribute;
+import org.apache.openejb.testing.ApplicationComposers;
+import org.apache.openejb.testing.Classes;
+import org.junit.Test;
+
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
+
+import static org.junit.Assert.assertEquals;
+
+@Classes(innerClassesAsBean = true)
+public class CustomObjectNameMBeanTest {
+    @Test
+    public void run() throws Exception {
+        final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+        mbeanState(server, false);
+        new ApplicationComposers(this).evaluate(this, new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    mbeanState(server, true);
+                    assertEquals(1, server.getAttribute(new ObjectName("openejb.user.mbeans:application=openejb,group=org.apache.openejb.config,name=DefaultName"), "value"));
+                    assertEquals(2, server.getAttribute(new ObjectName("foo:type=bar,custom=yes"), "value"));
+                } catch (final Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+        });
+        mbeanState(server, false);
+    }
+
+    private void mbeanState(final MBeanServer server, final boolean registered) throws MalformedObjectNameException {
+        assertEquals(registered, server.isRegistered(new ObjectName("openejb.user.mbeans:application=openejb,group=org.apache.openejb.config,name=DefaultName")));
+        assertEquals(registered, server.isRegistered(new ObjectName("foo:type=bar,custom=yes")));
+    }
+
+    @MBean
+    public static class DefaultName {
+        @ManagedAttribute
+        public int getValue() {
+            return 1;
+        }
+    }
+
+    @MBean(objectName = "foo:type=bar,custom=yes")
+    public static class CustomName {
+        @ManagedAttribute
+        public int getValue() {
+            return 2;
+        }
+    }
+}
+