Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用simplejmx发布的JmxResource不会出现在JConsole中_Java_Spring_Jmx_Jconsole_Simplejmx - Fatal编程技术网

Java 使用simplejmx发布的JmxResource不会出现在JConsole中

Java 使用simplejmx发布的JmxResource不会出现在JConsole中,java,spring,jmx,jconsole,simplejmx,Java,Spring,Jmx,Jconsole,Simplejmx,我正在使用simplejmx发布我的JMX资源 我得到了jmx config.xml <bean id="beanPublisher" class="com.j256.simplejmx.spring.BeanPublisher"> <property name="jmxServer" ref="jmxServer" /> </bean> <bean id="jmxServer" class="com.j256.simplejmx.server

我正在使用
simplejmx
发布我的
JMX资源

我得到了
jmx config.xml

<bean id="beanPublisher" class="com.j256.simplejmx.spring.BeanPublisher">
    <property name="jmxServer" ref="jmxServer" />
</bean>

<bean id="jmxServer" class="com.j256.simplejmx.server.JmxServer"
    init-method="start" destroy-method="stop">
    <property name="registryPort" value="8123" />
</bean>
我创建了一个简单的类

package com.mypckg.jmx;

import com.j256.simplejmx.common.JmxAttributeField;
import com.j256.simplejmx.common.JmxResource;

@JmxResource(description = "Blah1", domainName = "Blah2", beanName = "Blah3")
public class DummyJMX {

    @JmxAttributeField(description = "Blah4")
    private int var = 3;
}
我正在启动
JConsole
,我正在选择
JBoss
应用程序,我将进入
MBeans
。这就是我所看到的:

*

可能我的
DummyJMX
类还没有发布(或者我就是找不到它)

关于哪一步我忘了

先谢谢你


编辑:


编辑:

@安德烈·斯特凡

使用您的链接时出现错误:

@灰色的

使用
localhost:8123
时出现错误:

可能我的DummyJMX类还没有发布(或者我就是找不到它)

当您使用
JmxServer
registryPort
配置时,它将不会显示在Jconsole下的“本地进程”列表中。它可以通过
localhost:8123
作为“远程进程”访问。如果您在Linux机器上,您可以使用
netstat-an | grep LISTEN
查看应用程序正在侦听的端口。如果列表中没有看到8123,那么可能它已经配置了RMI服务器

如果您想使用平台mbean服务器,它确实显示为本地进程,那么请使用最近(2014年4月)发布的版本1.9中的新setter或构造函数。不幸的是,SimpleJMX无法以编程方式注册自身,因此它会显示在进程列表中——JVM导出的不是这些代码

<bean id="jmxServer" class="com.j256.simplejmx.server.JmxServer"
    init-method="start" destroy-method="stop">
    <property name="usePlatformMBeanServer" value="true" />
</bean>

使用远程进程选项在JConsole中尝试以下url:
服务:jmx:rmi:///jndi/rmi://localhost:8123/jmxrmi


这与我在评论中提供的有点不同。

最后,我使用
JConsole
连接到我的
jmxbean

很可能,我在使用
simplejmx
开始工作时做了一些错误的事情

我没有改变很多事情。我保留了
jmx config
文件,并且仍然使用
simplejmx
1.8版本

我可以轻松地在本地连接到这个bean
——我不知道为什么我之前不能这样做。您能告诉我,为什么您认为它不应该是一个
本地过程

下面,您可以看到我的
jmxbean
出现在
JConsole
中:


我没有使用j256 jmx服务器,但由于在创建服务器时指定了一个端口,您是否应该将JConsole连接到JBoss以外的其他设备上?@andrestefan我甚至几乎可以肯定,您是对的,但是……当我的JBoss服务器关闭时,我可以在JConsole中选择两件事,当我运行服务器时,只有一个了。我在问题中添加了一个屏幕截图。请不要选择本地进程,而是尝试使用远程进程。将其用作JMX URL:service:JMX:rmi://jndi/rmi://localhost:8123/jmxrmiHi,我试过了,但不起作用。我编辑了我的帖子并粘贴了一个打印屏幕。我检查了这个URL的语法,看起来不错。嗨,我想保持这种方式。我尝试了
localhost:8123
,但它给了我一个错误。我编辑了我的帖子。当我尝试使用
usePlatformMBeanServer
时,它给了我一个错误
[…]org.springframework.beans.factory.BeanCreationException:创建名为“beanPublisher”的bean时出错[…]bean属性“setUsePlatformMBeanServer”不可写或具有无效的setter方法。setter的参数类型是否与getter的返回类型匹配?
。我把sipmle jmx的版本改成了
1.9
我不懂这个@GirlyGirl。我发布的代码对我有用。您确定正在使用1.9吗?请注意,该属性不是
setUsePlatformMBeanServer
,而是
usePlatformMBeanServer
。这就是问题所在吗?我不明白,为什么我要粘贴在这里
setUsePlatformMBeanServer
。我用了你的代码。当然,字段
usePlatformMBeanServer
有一个错误<代码>Bean属性“usePlatformMBeanServer”不可写或具有无效的setter方法。setter的参数类型是否与getter的返回类型匹配?
我检查了目录
\standalone\deployments\myproject.war\WEB-INF\lib
,我可以看到2个lib:
simplejmx-1.8
simplejmx-1.9
。我在Eclipse中执行了
projectclean
Maven clean
。没有更改,两个版本仍然存在于lib目录中。您需要1.9才能使用
usePlatformMBeanServer
@GirlyGirl。谢谢。它给出了同样的错误。你认为这可能是
/
的问题吗?我正在Windows上工作,如果它改变了一些东西。我提供的URL在一个简单的Spring项目中为我工作,该项目使用您的精确代码和配置。在我将这个bean添加到我的配置中之后,我可以在JConsole中看到这个bean:
(我假设您的配置中有这个bean)。在我的代码中,这个bean
dummy
被注释。我只想设置我的服务器并验证我是否能够连接到
JConsole
。我取消了它的注释。但是,我无法连接到
JConsole
。两个不太聪明的问题:1。代理是否有问题?2.我是否应该提供任何
用户名/密码
?在文档中,它只在特殊情况下使用。现在我认为它可能与JBoss有关。。。但不确定是什么。您可以在独立项目中尝试相同的代码和配置,而不是在.war和JBoss之外。这取决于具体情况。简单地说,我的问题是:
如何使它工作
。最后,它作为一个本地进程工作,您的答案建议使用远程进程。我不明白为什么一开始它不起作用。如果你有任何想法,这里什么是正确的答案,请毫不犹豫地回答我的问题
<bean id="jmxServer" class="com.j256.simplejmx.server.JmxServer"
    init-method="start" destroy-method="stop">
    <property name="usePlatformMBeanServer" value="true" />
</bean>