繁体   English   中英

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

[英]How to expose a Stateless EJB method as MBean (on Jboss)?

我有一个使用内部缓存的无状态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
    }

    ...

}

更新:

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

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

  • 定义一个名称以“ ... 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规范中 “词法设计模式”下​​指定的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM