我正在尝试使用JBoss EAP 6.1配置JMX,为此我在JBoss中添加了jmx-console.war并将jboss-service.xml放入我的应用程序中。我正在尝试加载属性文件,并希望将其注册到JMX。 JMX显示所有系统bean但没有加载我的应用程序的bean。这个东西在AS版本的JBoss中工作。有没有其他方法使用JBoss EAP配置JMX?我用Google搜索了所有组合但没有找到合适的答案。我的jboss-service.xml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- JBoss Server Configuration -->
<!-- ===================================================================== -->
<server>
<mbean code="com.asd.store.util.mbean.SystemConfig"
name="com.asd.store.util.mbean:service=jmx-common">
<constructor>
<arg type="java.lang.String" value="store-properties.xml"/>
<arg type="java.lang.String" value="${jboss.server.home.dir}/conf"/>
</constructor>
</mbean>
</server>
答案 0 :(得分:0)
JBoss AS 7.x做的略有不同。
这是一篇关于'如何在JBoss AS7上创建SAR'的好文章: http://middlewaremagic.com/jboss/?p=366
您可以使用jconsole
来查看JBoss和您的MBean,例如: JBOSS_HOME/bin/jconsole.sh
并查看MBeans选项卡。我想你的jmx-console.war也可以。
您的MBean似乎没有得到应用程序的实例化和正确注册。
注册MBean的方法很少,请参阅上面的文章了解一种可能的方法。
以下是使用@Singleton,@ Startup EJB bean创建和注册MBean的另一种方法: - 制作你的MBean @Singleton,@ Startup EJB - 在@PostConstruct生命周期方法中注册您的MBean - 在@PreDestroy生命周期方法中取消注册MBean
这是一个跟踪当前用户数,最大用户数,性能等的MBean示例...
MBean接口,例如MonitoringResourceMXBean.java
:
package examples.mymonitoring;
public interface MonitoringResourceMXBean {
// current user count
long getCurrentUsers();
void countUserUp();
void countUserDown();
// maximum user count
long getMaximumUsers();
void setMaximumUsers(long max);
// request count
long getRequests();
long countRequest();
// maximum duration of request
long getMaximumWait();
void reportWait(long wait);
}
MBean实现,例如
package examples.mymonitoring;
import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@Singleton
@Startup
public class MonitoringResource implements MonitoringResourceMXBean {
private MBeanServer platformMBeanServer;
private ObjectName objectName = null;
private long maximumUsers = 100;
private AtomicLong requestCount = new AtomicLong(0);
private AtomicLong currentUsers = new AtomicLong(0);
private long maximumWait = 0;
@PostConstruct
public void registerInJMX() {
try {
objectName = new ObjectName("MyMonitoring:type=" + this.getClass().getName());
platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
platformMBeanServer.registerMBean(this, objectName);
} catch (Exception e) {
throw new IllegalStateException("Problem during registration of Monitoring into JMX:" + e);
}
}
@PreDestroy
public void unregisterFromJMX() {
try {
platformMBeanServer.unregisterMBean(this.objectName);
} catch (Exception e) {
throw new IllegalStateException("Problem during unregistration of Monitoring into JMX:" + e);
}
}
@Override
public long getCurrentUsers() {
return this.currentUsers.get();
}
@Override
public void countUserUp() {
this.currentUsers.incrementAndGet();
}
@Override
public void countUserDown() {
this.currentUsers.decrementAndGet();
}
@Override
public long getMaximumWait() {
return this.maximumWait;
}
@Override
public long getMaximumUsers() {
return this.maximumUsers;
}
@Override
public void setMaximumUsers(long max) {
this.maximumUsers = max;
}
@Override
public void reportWait(long wait) {
if ( wait > maximumWait ) maximumWait = wait;
}
@Override
public long getRequests() {
return this.requestCount.get();
}
@Override
public long countRequest() {
return this.requestCount.incrementAndGet();
}
}
希望这个例子有所帮助。
干杯!