2

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

1 に答える 1

1

JBoss AS 7.x ではこれが少し異なります。

「JBoss AS7 で SAR を作成する方法」に関するすばらしい記事は次のとおりです: http://middlewaremagic.com/jboss/?p=366

jconsoleたとえば、[MBeans] タブを使用して JBoss と MBeans を確認できJBOSS_HOME/bin/jconsole.shます。jmx-console.war も機能すると思います。

アプリケーションによって MBean が適切にインスタンス化および登録されていないようです。

MBean を登録する方法はいくつかあります。考えられる方法の 1 つについては、上記の記事を参照してください。

@Singleton、@Startup EJB Bean を使用して 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(); 
    }

}

例が役立つことを願っています。

乾杯!

于 2014-01-26T21:41:55.983 に答える