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

Java 如何将无状态EJB方法公开为MBean(在Jboss上)?,java,ejb-3.0,jmx,Java,Ejb 3.0,Jmx,我有一个无状态EJB(3),它使用内部缓存,每24小时自动刷新一次。我想公开一个MBean方法,以便能够通过JBoss4.2上的JMX控制台强制该EJB上的缓存过期,甚至缓存重新加载 有人可以分享一个如何编写此场景的示例吗?当涉及到创建我自己的bean时,我对JMX是完全陌生的 我应该创建一个调用EJB的MBean,还是可以通过使用EJB本身上的注释将特定EJB方法公开为MBean接口 EJB如下所示: @Stateless @Local(BusinessCalendar.class) publ

我有一个无状态EJB(3),它使用内部缓存,每24小时自动刷新一次。我想公开一个MBean方法,以便能够通过JBoss4.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
    }

    ...

}

你看过在线JBoss配置指南了吗?这可能会有所帮助:

更新:

这当然适用于WildFly 10+、jBOSS EAP 6.x或7.x。但我怀疑这些机制不再是专有的,在其他应用程序服务器上也会起到类似的作用

JavaEE6标准化单例时,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属性,其他方法将映射到“词汇设计模式”下指定的操作。

您提供的链接是关于MDB而不是JMX MBeans的。但我在浏览JBoss网站时发现了这一点:我可能会使用@Service,尽管这是架构上的改变,并通过使用JBoss类而不是标准的JMX引入了供应商锁定。@Michal,很高兴你找到了帮助你前进的东西,即使我帮不了你多少忙:-)