2008-09-24 7 views
3

원격 모니터링을 위해 JBoss 4.2.2 및 JConsole을 설정하려고합니다. 웹에서이 작업을 수행하는 방법에 대한 많은 정보가 있으므로 run.conf에서 다음 옵션을 설정하여 jmxremote를 활성화해야합니다. (나는 다른 두 OPTS 인증을 사용하지 실현)JBoss에서 JBossWS의 NPE with jmxremote가 활성화 된

다음과 같은 예외 결과
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 파일을 배포하는 동안 그 다음 예외가 발생하지만 그 :

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) 

여기에서 어디로 가야할까요?

편집 :

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

솔직히이 원격 접근을 해본 적이
+0

문제는 JBoss 4.2.3에서 수정되었습니다. – Jeremy

답변

2

을 사용하고 있습니다 :

은 또한 다음과 같은 변화를 시도했다. 그러나 클라이언트 시스템과 서버가 둘 다 Linux 상자 또는 SSH와 유사한 * nixes 일 경우 서버에 ssh -XCA을 입력하고 서버에서 시작하여 서버에서 GUI 컴퓨터에 X 포트가있는 GUI 디스플레이가 표시되도록하십시오 전송. 을 모니터링하려는 서버 JVM에 로컬로 실행되는 JConsole은 연결에 문제가없는이어야합니다.

개인적으로는 멋진 트릭이라고 생각하지만 은 실제로으로 JWS를 통해 원격으로 연결하는 문제를 해결합니다.

+0

나는 이것을 시도해 보았습니다. 그러나 JConsole은 리소스를 많이 사용하기 때문에 실행을 위해 유용해야합니다. 또한 X 포워딩은 그래프/업데이트로 인해 매우 고통 스럽기 때문에 어쨌든 사용하기가 거의 불가능합니다. – Jeremy

0

내가해야 할 일은 JBoss/default에서/tmp와/work 디렉토리를 모두 삭제하고 WAR를 재배포하는 것입니다. 그렇지 않으면 JDK를 업그레이드하여 1.6의 최신 버전을 사용합니다. 1.6.0_01은 꽤 오래되었습니다.

0

WS를 사용하여 mbean 서버에 액세스하려는 특별한 이유가 있는지는 잘 모르겠지만 JConsole을 사용하면 원격 JVM에 직접 액세스 할 수 있습니다. 이 사용 수행하려면 "JMX : 서비스를 RMI : /// JNDI/RMI를 : // < 원격 기계 > : < 포트 >/jmxrmi"(< 원격 기계 > 당신이와 < 포트에 연결을 시도하는 어떤 기계입니다 >은 11099)를 원격 프로세스로 사용하십시오.

저는이 기능을 사용하여 mbean 서버 (JBoss, ActiveMQ 등)를 노출하는 1.6 JVM에 연결했습니다.

+0

질문을 잘못 읽었습니다. WS를 사용하여 mbean 서버에 액세스하지 않습니다. 응용 프로그램에서 WS를 사용하고 있습니다. – Jeremy

0

이것이 관련이 있는지 모르겠지만 JBoss는 자신에게 리디렉션되는 경향이 있습니다. 호스트에 연결하는 경우 jboss.localdomain : 3873이라고 말하면 ejb에 연결하려면 JBoss가 자체 호스트 이름을 검색하여 거기에서 가져 오는 주소로 리디렉션 할 수 있습니다. 공용 호스트 이름을 사용하는 경우 대신 jboss.publicdomain.com을 찾아 클라이언트에 jboss.publicdomain.com:1099에 다시 연결하라고 지시 할 수 있습니다. DNS에 따라 클라이언트에서 도달 할 수있는 주소 일 수도 그렇지 않을 수도 있습니다.

이 문제의 다양한 변형이 있으며 보너스로 초기 연결 확인이 작동하는 경우가 있으므로 클라이언트 응용 프로그램이 배포되지만 나중에 연결할 때 실패합니다.

0

JBoss Seam과 비슷한 문제가 있지만 JBSEAM-4029을 살펴보십시오. 해결 방법 중 하나는 NPE로 실행되는 클래스를 재정의하는 것입니다. Seam의 경우에는 JBossClusterMonitor입니다.

JWS 코드가 똑같은 문제로 실행되고 있습니다. 즉, 특정 시점에 MBeanServerFactory.findMBeanServer(null)을 호출해야합니다. 스택 트레이스는 정확히 어떤 클래스가이를 수행하는지 밝혀야합니다.