Tomcat自定义MBean

有谁知道如何部署一个自定义的MBean到Tomcat?

到目前为止,我发现这个http://www.junlu.com/list/3/8871.html 。 我将我的jar与我的MBean复制到Tomcat的lib目录,所以自定义类加载器应该把它拿起来。 然后我按照指示,但我不断得到下面的例外。 我的MBean确实有一个公共构造函数。 如果我从Tomcat的lib目录中删除了jar,我得到了同样的消息,表明它没有拿起我的jar,或者在Apache MBean Modeler在Tomcat中运行之后,我的jar被加载。

06-Aug-2010 12:14:23 org.apache.tomcat.util.modeler.modules.MbeansSource执行SEVERE:创buildmbean Bean时出错:type = Bean javax.management.NotCompliantMBeanException:MBean类必须在com.sun上有公共构造函数(默认MBeanServerInterceptor.java: 1 at com.un.jmx.mbeanserver.JmxMBeanServer.createMBean(JmxMBeanServer.java:393)at org.apache.tomcat.util.modeler.modules.MbeansSource.execute(MbeansSource.java:207)at org.apache.tomcat。 util.modeler.modules.MbeansSource.load(MbeansSource.java:137)at org.apache.catalina.core.StandardEngine.readEngineMbeans(StandardEngine.java:517)at org.apache.catalina.core.StandardEngine.init(StandardEngine。 java:321)在org.apache.catalin的org.apache.catalina.core.StandardEngine.start(StandardEngine.java:411) a.core.StandardService.start(StandardService.java:519)位于org.apache.catalina.core.StandardServer.start(StandardServer.java:710)位于org.apache.catalina.startup.Catalina.start(Catalina.java: 581)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect .Method.invoke(Method.java:597)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

在我的testing中,当mbeans-descriptors.xml文件中的类名称和名称属性不匹配时,出现此消息。

<mbeans-descriptors> <mbean name="<your class name here>" ... 

看来tomcat是通过name属性来search构造函数的。

Tomcat MBean支持基于Apache Commons Modeler ,它也定义了XML描述符的格式。 看到这个线程更多的指针。

我不确定JMX规范是否要求这样做,但是如果您的实现类名为Foo,则必须将接口命名为FooMBean。 如果您不这样做,您将在部署时收到exception:MBean不符合规定。 这是非常重要的!