我有一个无状态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
}
...
}
答案 0 :(得分:0)
你看过在线JBoss配置指南了吗?这可能会有所帮助: http://www.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/4.2.0.cp08/html/Server_Configuration_Guide/EJB3_Services-Message_Driven_Beans.html
答案 1 :(得分:0)
更新:
这对于WildFly 10 +,jBOSS EAP 6.x或7.x肯定有效。但是我怀疑这些机制不再是专有的,并且在其他应用服务器中也将非常相似。
当JavaEE 6标准化Singletons时,删除了JBoss特定的注释@Service / @Management。一个MBean(总是一个单例,以便所有JMX客户端在应用程序范围内都能看到相同的一致JMX数据)成为通过JMX公开的EE6 +单例,如下所示:
注册/注销代码如下:
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在“词法设计模式”下指定的操作