java - 启用 jmxremote 的 JBoss 4.2.2 上的 JBossWS 中的 NPE

标签 java jboss jmx jconsole jbossws

我正在尝试设置 JBoss 4.2.2 和 JConsole 以进行远程监控。根据我在网上找到的许多操作方法,您需要通过在 run.conf 中设置以下选项来启用 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 文件时抛出以下异常,该文件只包含一个类,该类为我的应用程序需要的几个计划作业实现了 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)

关于从这里到哪里去有什么建议吗?

编辑:

我还尝试了以下变体:

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

最佳答案

老实说,我从未尝试过这种远程处理方法。但是,如果您的客户端机器和服务器碰巧都是 linux boxes 或类似的 *nixes with SSH,那么您可以ssh -XCA 到服务器并启动 JConsole 在服务器上 并使用 X 端口转发在您的客户端计算机上显示 GUI。在本地运行到您要监视的服务器 JVM 的 JConsole 应该没有任何连接问题。

我个人认为这是一个绝妙的技巧,但我意识到它不能真正解决让 JConsole 通过 JWS 远程连接的问题。

关于java - 启用 jmxremote 的 JBoss 4.2.2 上的 JBossWS 中的 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/129746/

相关文章:

Java - 来自错误消息的信息

jakarta-ee - 无法像测试 JSF ViewScoped 托管 bean 那样测试 CDI ViewScoped bean

java - 如何将引用的项目部署到 JBoss 上?

java - 使用自定义 JAAS 登录模块启动 JMX 代理,将 login() 设置为始终返回 true

java - MBeans操作错误Weblogic

java - 如何将 MouseListener 添加到 JList 模型

java - 具有水平滚动的嵌套 RecyclerView

java - 在 JBoss 7 beta 上部署 Spring 3 + Hibernate 应用程序;未找到带注释的 Bean

java - 无法远程连接到 JMX?

java - HtmlUnit 中切换窗口