2013-08-22 54 views
3

我想用JBoss EAP 6.1配置JMX,为此我在JBoss中添加了jmx-console.war,并将jboss-service.xml放入我的应用程序中。我试图加载一个属性文件,并希望使用JMX注册它。 JMX显示所有系统bean,但不加载我的应用程序的bean。这个东西在JBoss的AS版本中工作。有没有其他的配置JBoss EAP的JMX的方法?我搜索了所有的组合,但没有找到任何合适的答案。我的jboss-service.xml如下所示:JBoss EAP 6.1上的JMX配置

<?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

JBoss AS 7.x的确略有不同。

下面是关于“如何在JBoss AS7创建特区”一个漂亮的文章: http://middlewaremagic.com/jboss/?p=366

你可以看到JBoss和您的MBean使用jconsole,例如JBOSS_HOME/bin/jconsole.sh并查看MBeans选项卡。我想你的jmx-console.war也会起作用。

看起来你的MBeans没有被你的应用程序实例化和正确注册。

有几种方法可以注册您的MBean,请参阅上面的文章中的一种可能的方法。

这里是您可以创建并注册使用@Singleton,@Startup EJB豆您的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(); 
    } 

} 

希望这个例子有所帮助。

干杯!