如何将无状态EJB方法公开为MBean(在Jboss上)?

问题描述 投票:1回答:2

我有一个无状态EJB(3),它使用内部缓存,每24小时自动刷新一次。我想公开一个MBean方法,以便能够通过Jboss 4.2上的JMX控制台强制缓存过期甚至缓存重新加载此EJB。

有人可以分享如何编码这种情况的例子吗?在创建自己的bean时,我对JMX完全不熟悉。

我应该创建一个调用我的EJB的MBean,还是可以通过在EJB本身上使用注释将特定的EJB方法公开为Mbean接口?

EJB看起来像这样:

@Stateless
@Local(BusinessCalendar.class)
public class BusinessCalendarBean implements BusinessCalendar {

    synchronized private LocalDateKitCalculatorsFactory getCalculatorFactory() {

        LocalDateKitCalculatorsFactory ldkc = (LocalDateKitCalculatorsFactory) CacheService.get(CACHE_KEY);

        if (ldkc == null) {
            ldkc = getCalculatorFactory();
            CacheService.put(CACHE_KEY, ldkc);
        }

        return ldkc;

    }

    public function expireCache() {
         // I would like to expose this as JMX managed method
    }

    ...

}
java ejb-3.0 jmx
2个回答
0
投票

更新:

这对于WildFly 10 +,jBOSS EAP 6.x或7.x肯定有效。但我怀疑这些机制不再是专有的,并且在其他应用服务器中应该非常相似。

当JavaEE 6标准化单例时,JBoss特定注释@Service / @Management被删除。 MBean(总是单个,以便所有JMX客户端在应用程序范围内看到相同的一致JMX数据)成为通过JMX公开的EE6 + Singleton,如下所示:

  • 定义一个名称以“... MXBean”结尾的接口(必修)
  • 创建一个实现此接口的@Singleton和@Startup类
  • 定义@PostConstruct和@PreDestroy方法来注册/取消注册MBean

注册/取消注册代码如下:

objectName = new javax.management.ObjectName("com.acme.example.jmx:type=" + this.getClass().getName());
platformMBeanServer = java.lang.management.ManagementFactory.getPlatformMBeanServer();
platformMBeanServer.registerMBean(this, objectName);

“... MXBean”界面中定义的getter / setter变为JMX属性,其他方法映射到JMX Specifications“lexical design patterns”下指定的操作


© www.soinside.com 2019 - 2024. All rights reserved.