Tomcat Custom MBean
Кто-нибудь знает, как развернуть пользовательский MBean в Tomcat?
До сих пор я нашел это http://www.junlu.com/list/3/8871.html. Я скопировал мой jar с моим MBean в каталог lib Tomcat, чтобы загрузчик Custom class мог его забрать. Затем я следовал инструкциям, но продолжал получать исключение ниже. Мой MBean определенно имеет публичный конструктор. Если я удалил jar из каталога lib tomcat, то получу то же сообщение, в котором говорится, что он не забирает мой jar или мой jar загружается после запуска Apache MBean Modeler в Tomcat.
06-Aug-2010 12:14:23 org.apache.tomcat.util.modeler.modules.MbeansSource execute SEVERE: Ошибка создания компонента Mbean:type=Bean javax.management.NotCompliantMBeanException: класс MBean должен иметь открытый конструктор в com.sun.jmx.mbeanserver.Introspector.testCreation(Introspector.java:127) по адресу com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.createMBean(DefaultMBeanServerInterceptor.java:2 по умолчанию 1 в com.sun.jmx.mbeanserver.JmxMBeanServer.createMBean(JmxMBeanServer.java:393) в org.apache.tomcat.util.modeler.modules.MbeansSource.execute(MbeansSource.java:20t. Org или 207) в util.modeler.modules.MbeansSource.load(MbeansSource.java:137) в org.apache.catalina.core.StandardEngine.readEngineMbeans(StandardEngine.java:517) в org.apache.catalina.core.StandardEngine.init. Java:321) в org.apache.catalina.core.StandardEngine.start(StandardEngine.java:411) в org.apache.catalina.core.StandardService.start(StandardService.java:519) в org.apache.catalina.core.StandardServer.start(StandardServer.java:710) в org.apache.catalina.startup.Catalina.start(Catalina.java:581) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImplang.jjfj.jpg.Method.invoke(Method.java:597) в org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) в org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
3 ответа
В моих тестах это сообщение появлялось, когда имя класса и атрибут name в файле mbeans-descriptors.xml не совпадали.
<mbeans-descriptors>
<mbean name="<your class name here>"
...
Кажется, tomcat ищет конструктор по атрибуту name.
Поддержка Tomcat MBean основана на Apache Commons Modeler, который также определяет формат XML-дескриптора. Смотрите эту тему для получения дополнительных указателей.
Я не уверен, требуется ли это в спецификации JMX или нет, но вы должны назвать свой интерфейс FooMBean, если ваш реализующий класс называется Foo. Если вы этого не сделаете, вы получите исключение при развертывании, заявив: MBean не соответствует. Это чрезвычайно важно!!!