You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2015/12/01 23:04:14 UTC
[62/77] [abbrv] tomee git commit: TOMEE-1668 @MBean(objectName)
support
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/tomee-7.0.0-M1
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;
+ }
+ }
+}
+