вопрос по tomcat и jmx


Что именно делает MBeanServerFactory.findMBeanServer(null);?
Возвращает список всех зарегистрированных MBeanServers? Где зарегистрирован?
Я спрашиваю, потому что у меня возникла следующая проблема.
У меня есть веб-приложение Java, развернутое в Tomcat с помощью сервисной оболочки.
У меня есть реализации настраиваемого соединителя в файле server.xml, которые используют ManagedBeans ( spring включен).
Если я запускаю приложение через оболочку службы, все в порядке.
Если я запускаю веб-приложение через Tomcat напрямую, кажется, что развертывание прерывается.
Все, что я вижу в журналах, это то, что разъем делает

MBeanServerFactory.findMBeanServer(null);

а затем пытается вызвать bean-компонент beanServer.invoke(name, operationName, null, null);
Результатом является InstanceNotFoundException.
Кажется, что управляемые bean-компоненты не загружаются, если я не использую сервисную оболочку? Правильно ли я понимаю? Приветствуется любой вклад в отладку этой проблемы!


person Cratylus    schedule 20.04.2011    source источник


Ответы (1)


javadoc говорит, что при передаче null возвращаются серверы, зарегистрированные в текущей JVM. Если вы используете JSW, вы не можете использовать null, так как JSW разветвляет виртуальную машину как отдельный процесс. Вот почему вы видите InstanceNotFoundException.

person lobster1234    schedule 20.04.2011
comment
@lobster: Когда вы говорите JSW, вы имеете в виду сервисную оболочку? Использование сервисной оболочки, как я упоминал в посте, работает нормально. Если я запускаю напрямую через Tomcat, я получаю исключение - person Cratylus; 21.04.2011
comment
Да, Java Service Wrapper. Зачем вам нужна оболочка службы при развертывании в Tomcat? Сам Tomcat использует сервисную оболочку. Извините, это не помогает вашему вопросу, но, возможно, мы сможем что-то придумать. - person lobster1234; 21.04.2011
comment
Конкретная используемая оболочка имеет множество дополнительных функций. InstanceNotFoundException не развертывается таким образом. Конфигурация оболочки запускает jvm с -Dcom.sun.management.jmxremote, а также в конфигурации JSW включена возможность использования mbeans. Я не уверен, что чего-то не хватает, если я развертываю напрямую из Tomcat. - person Cratylus; 21.04.2011
comment
Вам нужно добавить строку -Dcom.sun.management.jmxremote в ваш catalina.sh, когда вы запускаете автономный tomcat - я предполагаю, что вы выполняете запуск catalina.sh или запуск catalina.sh. Добавьте его в строку JAVA_OPTS в самом конце. - person lobster1234; 21.04.2011
comment
@lobster: Хорошо, я проверю это. Достаточно ли этого или нужна какая-либо другая конфигурация для сервера Tomcat MBean? Для JSW я включаю Dcom.sun.management.jmxremote, но также устанавливаю другую конфигурацию для MBean, как указано. Что-нибудь еще для сервера Tomcat MBean? - person Cratylus; 21.04.2011
comment
Это должно быть все, что вам нужно, он начнется с портов по умолчанию и т. Д., Аутентификации SSL и т. Д. Попробуйте скопировать все настройки jmx, которые вы видите в JSW, в catalina.sh, и все будет в порядке. Удачи! - person lobster1234; 21.04.2011
comment
@lobster:Посмотрев на это, проблема, с которой я столкнулся, была связана с брандмауэром. По какой-то причине, хотя мое приложение не включало JMX, JMX уже был включен. Я подозреваю, что из-за другого приложения, работающего в том же контейнере. Я создам для этого новый поток. +1 за вашу помощь. - person Cratylus; 23.04.2011
comment
@lobster: новый вопрос здесь: stackoverflow.com/questions/5764429/ - person Cratylus; 23.04.2011