【问题标题】:JMX configuration on JBoss EAP 6.1JBoss EAP 6.1 上的 JMX 配置
【发布时间】:2013-08-25 00:52:12
【问题描述】:

我正在尝试使用 JBoss EAP 6.1 配置 JMX,为此我在我的 JBoss 中添加了 jmx-console.war 并将 jboss-service.xml 放入我的应用程序中。我正在尝试加载属性文件并希望将其注册到 JMX。 JMX 显示所有系统 bean,但不加载我的应用程序的 bean。这件事在 JBoss 的 AS 版本中工作。有没有其他方法可以用 JBoss EAP 配置 JMX?我用谷歌搜索了所有的组合,但没有找到任何合适的答案。我的 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>

【问题讨论】:

    标签: deployment jboss jmx jboss6.x


    【解决方案1】:

    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(); 
        }
    
    }
    

    希望示例有所帮助。

    干杯!

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      相关资源
      最近更新 更多