You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by rm...@apache.org on 2015/10/23 16:50:41 UTC
deltaspike git commit: DELTASPIKE-1008 adding properties() to @MBean
Repository: deltaspike
Updated Branches:
refs/heads/master 44e5bbb6b -> b3570077a
DELTASPIKE-1008 adding properties() to @MBean
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/b3570077
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/b3570077
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/b3570077
Branch: refs/heads/master
Commit: b3570077ab5dc0c7568051bee825fa8ccdc1995f
Parents: 44e5bbb
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Fri Oct 23 16:50:35 2015 +0200
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Fri Oct 23 16:50:35 2015 +0200
----------------------------------------------------------------------
.../apache/deltaspike/core/api/jmx/MBean.java | 6 ++
.../core/impl/jmx/MBeanExtension.java | 42 +++++++++++---
.../test/core/impl/jmx/CustomProperties.java | 42 ++++++++++++++
.../test/core/impl/jmx/CustomProperties2.java | 42 ++++++++++++++
.../core/impl/jmx/CustomPropertiesTest.java | 60 ++++++++++++++++++++
5 files changed, 184 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b3570077/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/MBean.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/MBean.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/MBean.java
index b182318..27b23d4 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/MBean.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/MBean.java
@@ -52,6 +52,12 @@ public @interface MBean
String name() default "";
/**
+ * @return the properties part of the objectName if no objectName was specified.
+ * If name and type are specified this segment is concatenated after.
+ */
+ String properties() default "";
+
+ /**
* @return the type to use if no objectName was specified. Default is <pre>MBeans</pre> and can be
* overriden either directly by the value or by a key used to resolve a value using
* {@link org.apache.deltaspike.core.api.config.ConfigResolver}. It is a key if the value is between
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b3570077/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/MBeanExtension.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/MBeanExtension.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/MBeanExtension.java
index 02366c1..93f8d9f 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/MBeanExtension.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/MBeanExtension.java
@@ -47,6 +47,8 @@ import java.util.logging.Logger;
public class MBeanExtension implements Extension, Deactivatable
{
private static final Logger LOGGER = Logger.getLogger(MBeanExtension.class.getName());
+ private static final String DEFAULT_TYPE = "MBeans";
+ private static final String DEFAULT_CATEGORY = "org.apache.deltaspike";
private final Map<Class<?>, DynamicMBeanWrapper> wrappers = new ConcurrentHashMap<Class<?>, DynamicMBeanWrapper>();
@@ -98,16 +100,40 @@ public class MBeanExtension implements Extension, Deactivatable
String objectNameValue = mBeanAnnotation.objectName();
if (objectNameValue.isEmpty())
{
- String name = mBeanAnnotation.name();
- if (name.isEmpty())
+ final String type = getConfigurableAttribute(mBeanAnnotation.type(), DEFAULT_TYPE);
+ final String category = getConfigurableAttribute(mBeanAnnotation.category(), DEFAULT_CATEGORY);
+ final String properties = getConfigurableAttribute(mBeanAnnotation.properties(), "");
+ final String name = mBeanAnnotation.name();
+
+ final StringBuilder builder = new StringBuilder(category).append(':');
+ if (!properties.contains("type="))
{
- name = clazz.getName();
+ builder.append("type=").append(type);
}
-
- final String type = getConfigurableAttribute(mBeanAnnotation.type(), "MBeans");
- final String category = getConfigurableAttribute(mBeanAnnotation.category(), "org.apache.deltaspike");
-
- objectNameValue = category + ":type=" + type + ",name=" + name;
+ else if (!DEFAULT_TYPE.equals(type))
+ {
+ LOGGER.warning("type() ignored on " + clazz + " since properties contains it.");
+ }
+ if (!properties.contains("name="))
+ {
+ if (!name.isEmpty() || properties.isEmpty())
+ {
+ builder.append(",name=");
+ if (name.isEmpty())
+ {
+ builder.append(clazz.getName());
+ }
+ else
+ {
+ builder.append(name);
+ }
+ } // else skip. type is important in JMX but name is a fully custom property so we are able to skip it
+ }
+ if (!properties.isEmpty())
+ {
+ builder.append(',').append(properties);
+ }
+ objectNameValue = builder.toString();
}
final ObjectName objectName = new ObjectName(objectNameValue);
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b3570077/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties.java
new file mode 100644
index 0000000..bed6db6
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties.java
@@ -0,0 +1,42 @@
+/*
+ * 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.deltaspike.test.core.impl.jmx;
+
+import org.apache.deltaspike.core.api.jmx.JmxManaged;
+import org.apache.deltaspike.core.api.jmx.MBean;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+@MBean(category = "cat", type = "and", name = "", properties = "foo=bar,dummy=empty")
+public class CustomProperties
+{
+ @JmxManaged
+ private int counter;
+
+ public int getCounter()
+ {
+ return counter;
+ }
+
+ public void setCounter(final int counter)
+ {
+ this.counter = counter;
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b3570077/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties2.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties2.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties2.java
new file mode 100644
index 0000000..121006a
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomProperties2.java
@@ -0,0 +1,42 @@
+/*
+ * 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.deltaspike.test.core.impl.jmx;
+
+import org.apache.deltaspike.core.api.jmx.JmxManaged;
+import org.apache.deltaspike.core.api.jmx.MBean;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+@MBean(category = "cat", type = "and", name = "nom", properties = "foo=bar,dummy=empty")
+public class CustomProperties2
+{
+ @JmxManaged
+ private int counter;
+
+ public int getCounter()
+ {
+ return counter;
+ }
+
+ public void setCounter(final int counter)
+ {
+ this.counter = counter;
+ }
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/b3570077/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomPropertiesTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomPropertiesTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomPropertiesTest.java
new file mode 100644
index 0000000..578fe20
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/jmx/CustomPropertiesTest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.deltaspike.test.core.impl.jmx;
+
+import org.apache.deltaspike.test.util.ArchiveUtils;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.inject.Inject;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
+
+import static org.junit.Assert.assertTrue;
+
+@RunWith(Arquillian.class)
+public class CustomPropertiesTest
+{
+ @Deployment
+ public static Archive<?> war()
+ {
+ return ShrinkWrap.create(WebArchive.class, "CustomPropertiesTest.war")
+ .addAsLibraries(ArchiveUtils.getDeltaSpikeCoreArchive())
+ .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
+ .addClasses(CustomProperties.class, CustomProperties2.class);
+ }
+
+ @Inject
+ private CustomProperties myMBean;
+
+ @Test
+ public void checkMBean() throws Exception
+ {
+ assertTrue(ManagementFactory.getPlatformMBeanServer().isRegistered(
+ new ObjectName("cat:type=and,foo=bar,dummy=empty")));
+ assertTrue(ManagementFactory.getPlatformMBeanServer().isRegistered(
+ new ObjectName("cat:type=and,name=nom,foo=bar,dummy=empty")));
+ }
+}