gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:58:03 25 4
gpt4 key购买 nike

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

有人可以分享一个关于如何编写此场景的示例吗?当谈到创建我自己的 bean 时,我对 JMX 完全陌生。

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

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 标准化单例时,JBoss 特定注释 @Service/@Management 已被删除。 MBean(始终是单例,以便所有 JMX 客户端在应用程序范围内看到相同的一致 JMX 数据)成为通过 JMX 公开的 EE6+ 单例,如下所示:

  • 定义一个名称以“...MXBean”结尾的接口(interface)(强制)
  • 创建一个实现此接口(interface)的 @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”接口(interface)中定义的 getter/setter 成为 JMX 属性,其他方法映射到 JMX Specifications 中指定的操作。在“词法设计模式”下​​

关于java - 如何将无状态 EJB 方法公开为 MBean(在 Jboss 上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2221594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com