NPE в JBossWS на JBoss 4.2.2 с включенным jmxremote - PullRequest
3 голосов
/ 25 сентября 2008

Я пытаюсь настроить JBoss 4.2.2 и JConsole для удаленного мониторинга. Согласно многим инструкциям, которые я нашел в Интернете, чтобы сделать это, вам нужно включить jmxremote, установив следующие параметры в run.conf. (Я понимаю, что два других параметра отключают аутентификацию)

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=11099"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false" 

Что приводит к следующему исключению:

13:06:56,418 INFO [TomcatDeployer] performDeployInternal :: deploy, ctxPath=/services, warUrl=.../tmp/deploy/tmp34585xxxxxxxxx.ear-contents/mDate-Services-exp.war/
13:06:57,706 WARN [AbstractServerConfig] getWebServicePort :: Unable to calculate 'WebServicePort', using default '8080'
13:06:57,711 WARN [AbstractServerConfig] getWebServicePort :: Unable to calculate 'WebServicePort', using default '8080'
13:06:58,070 WARN [AbstractServerConfig] getWebServicePort :: Unable to calculate 'WebServicePort', using default '8080'
13:06:58,071 WARN [AbstractServerConfig] getWebServicePort :: Unable to calculate 'WebServicePort', using default '8080'
13:06:58,138 ERROR [MainDeployer] start :: Could not start deployment: file:/opt/jboss-4.2.2.GA/server/default/tmp/deploy/tmp34585xxxxxxxxx.ear-contents/xxxxx-Services.war
java.lang.NullPointerException
at org.jboss.wsf.stack.jbws.WSDLFilePublisher.getPublishLocation(WSDLFilePublisher.java:303)
at org.jboss.wsf.stack.jbws.WSDLFilePublisher.publishWsdlFiles(WSDLFilePublisher.java:103)
at org.jboss.wsf.stack.jbws.PublishContractDeploymentAspect.create(PublishContractDeploymentAspect.java:52)
at org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl.deploy(DeploymentAspectManagerImpl.java:115)
at org.jboss.wsf.container.jboss42.ArchiveDeployerHook.deploy(ArchiveDeployerHook.java:97) 
...

Мое приложение использует JWS, который в соответствии с этой ошибкой:

https://jira.jboss.org/jira/browse/JBWS-1943

Предлагает этот обходной путь:

JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"

(https://developer.jboss.org/wiki/JBossWS-FAQ#jive_content_id_How_to_use_JDK_JMX_JConsole_with_JBossWS)

Однако я попробовал это, но затем выдает следующее исключение при попытке развернуть файл sar в моем ухе, который содержит только класс, реализующий Schedulable для пары запланированных заданий, которые требуются моему приложению:

Caused by: java.lang.NullPointerException
at EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap.hash(ConcurrentReaderHashMap.java:298)
at EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap.get(ConcurrentReaderHashMap.java:410)
at org.jboss.mx.server.registry.BasicMBeanRegistry.getMBeanMap(BasicMBeanRegistry.java:959)
at org.jboss.mx.server.registry.BasicMBeanRegistry.contains(BasicMBeanRegistry.java:577)

Любые предложения о том, куда идти отсюда?

EDIT:

Я также попробовал следующий вариант:

JAVA_OPTS="$JAVA_OPTS -DmbipropertyFile=../server/default/conf/mbi.properties  -DpropertyFile=../server/default/conf/mdate.properties -Dwicket.configuration=DEVELOPMENT"
JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"

Я использую JDK 1.6.0_01-b06

Ответы [ 5 ]

2 голосов
/ 25 сентября 2008

Честно говоря, я никогда не пробовал этот подход удаленного доступа. Но если и ваша клиентская машина, и сервер оказываются Linux-боксами или похожими * nixes с SSH, вы можете ssh -XCA на сервер и запустить JConsole на сервере и включить отображение GUI ваш клиентский компьютер с переадресацией X-порта. JConsole, работающая локально с серверной JVM, которую вы хотите отслеживать , должна не иметь проблем с подключением.

Лично я считаю, что это хитрый трюк, но я понимаю, что он не действительно решает проблему удаленного подключения JConsole через JWS.

0 голосов
/ 06 мая 2009

Была похожая проблема, но с JBoss Seam: взгляните на JBSEAM-4029 . В качестве одного из обходных путей предлагается переопределить класс, попадающий в NPE - в случае Шама JBossClusterMonitor.

Бьюсь об заклад, код JWS сталкивается с точно такой же проблемой, т. Е. В какой-то момент вызывается MBeanServerFactory.findMBeanServer(null). Трассировка стека должна показать, какой именно класс это делает.

0 голосов
/ 15 апреля 2009

Я не знаю, связано ли это, но JBoss имеет тенденцию перенаправлять на себя. Если вы подключаетесь к хосту, скажем, jboss.localdomain: 3873, и хотите подключиться к ejb, JBoss может найти собственное имя хоста и перенаправить на адрес, который он получает оттуда. Если у вас есть общедоступное имя хоста, он может найти его вместо этого (скажем, jboss.publicdomain.com) и попросить клиента повторно подключиться к jboss.publicdomain.com:1099. В зависимости от вашего DNS, это может быть или не быть доступным адресом от вашего клиента.

Существуют различные варианты этой проблемы, и в качестве бонуса иногда срабатывает первоначальная «проверка соединения», поэтому клиентское приложение развертывается, но позже не удается подключиться.

0 голосов
/ 15 апреля 2009

Я не уверен, есть ли конкретная причина, по которой вы пытаетесь использовать WS для доступа к серверу mbean, но с помощью JConsole вы можете напрямую обращаться к удаленной JVM. Для этого используйте «service: jmx: rmi: /// jndi / rmi: // : / jmxrmi» (где - это машина, к которой вы пытаетесь подключиться, и равно 11099) как удаленный процесс.

Я использовал это для подключения к любой JVM 1.6, которая предоставляет сервер Mbean (JBoss, ActiveMQ и т. Д.).

0 голосов
/ 07 января 2009

Первое, что я хотел бы сделать, это удалить обе директории / tmp и / work в JBoss / default и заново развернуть WAR. Если этого не произойдет, я бы обновил JDK, чтобы использовать более новую версию 1.6. 1.6.0_01 довольно старый.

...