使拖统计数据在boss4.2.1
-
05-07-2019 - |
题
我已经进入休眠状态。generate_statistics=true和现在需要注册的mbean所以我可以看到的统计数据在jms控制台。我似乎无法得到任何地方,这似乎并不喜欢它应该是这样的一个困难的问题。也许是我让事情过于复杂的,但在任何情况下到目前为止,我已经试过:
- 我复制EhCacheProvider并把它化的一个扩展版本的管理器,其重载init()以及称为ManagementService.registerMBeans(...)之后的初始化。代码都跑收到的实际调用registerMBeans(...),这将导致供应商初始化失败与一般性错误(不幸的是,我没有把它写下来.) 这种做法的动机是中使用的方法 这种产品网页上浏览的性能演练。
- 我创造了自己的下列步骤:一个启动的方法,跑了类似的代码 这个例子的注册里的jms mbean.一切似乎能正常工作和我的下列步骤:显示在jms控制台,但没有对网。sf。里.
- 因为我已经升级里1.5(我们使用1.3,不知道,如果特boss4.2.1或者只是一些我们选择了我们自己)和改变使用SingletonEhCacheProvider,并试图只手抓住的统计数据,而不是处理与下列步骤:注册。它还没有真正了任何更好;如果我呼叫getInstance()管理器,返回仅有的副本StandardQueryCache,但boss日志显示,许多其他的高速缓存已经被初始化(一个用于每个缓存的实体,在我们的申请。)
编辑:嗯,我已经想出了一件事...连接通过JConsole并揭示的统计数据mbean。我猜ManagementFactory.getPlatformMBeanServer()不会给你同样的下列步骤:服务器作为boss使用。无论如何,它看起来像我遇到一个类似的问题,因为当我试图收集的统计数据手动,因为我得到的所有零甚至后点击通过我的应用程序。
解决方案 2
解决。因为我没看到所有的高速缓存于我的实体,我怀疑我是不是得到正确的它的实例。我开始了这一行(见的例jms登记的代码链接我提供的问题):
SessionFactory sf = (new Configuration()).configure().buildSessionFactory();
最终的结果是缓存管理,我最终有了一个新的实例并不是一个自持久性上下文。所以我试图重构为:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myPersistenceUnit");
return ((EntityManagerFactoryImpl)emf).getSessionFactory();
但是,这只是举一个例外(我不记得确切的案文;一些效果,"不能初始持久性环境。") 所以没有其他选择,我增加了一个无国籍豆(UtilMgr)到我的应用程序,让持久性注射正确的它.这是豆:
import javax.ejb.Stateless;
import javax.persistence.PersistenceUnit;
import net.sf.ehcache.CacheManager;
import org.hibernate.SessionFactory;
@Stateless
public class UtilMgrBean implements UtilMgr {
// NOTE: rename as necessary
@PersistenceUnit(unitName = "myPersistenceCtx")
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return this.sessionFactory;
}
public CacheManager getCacheManager() {
return CacheManager.getInstance(); // NOTE: assumes SingletonEhCacheProvider
}
}
这里的修正码从前面提到的演练:
try {
// NOTE: lookupBean is a utility method in our app we use for jndi lookups.
// replace as necessary for your application.
UtilMgr utilMgr = (UtilMgr)Manager.lookupBean("UtilMgrBean", UtilMgr.class);
SessionFactory sf = utilMgr.getSessionFactory();
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
// NOTE: replace myAppName as necessary
ObjectName on = new ObjectName("Hibernate:type=statistics,application=myAppName");
// Enable Hibernate JMX Statistics
StatisticsService statsMBean = new StatisticsService();
statsMBean.setSessionFactory(sf);
statsMBean.setStatisticsEnabled(true);
mbs.registerMBean(statsMBean, on);
CacheManager cacheMgr = utilMgr.getCacheManager();
ManagementService.registerMBeans(cacheMgr, mbs, true, true, true, true);
} catch(Throwable t) {
throw new RuntimeException(t);
}
你也可以使用这个getCacheManager()方法的UtilMgr如果你想检索的统计数据手动(这是什么我可能会做的事.) 你可以找到更多的信息,关于如何使用使用缓存和统计的对象 在这里的代码样本。
如果任何人都可以填补我在上一种静态的查找本届会议的工厂,而无需为创造这些额外的会议豆,我听到它。
其他提示
答案给予上述假定SingletonEhcacheProvider正在使用和它还需要utilmgr豆,这种其他解决方案使用的启动豆和不作单独的假设
@Name("hibernateStatistics")
@Scope(ScopeType.APPLICATION)
@Startup
public class HibernateUtils {
@In
private EntityManager entityManager;
@Create
public void onStartup() {
if (entityManager != null) {
try {
//lookup the jboss mbean server
MBeanServer beanServer = org.jboss.mx.util.MBeanServerLocator.locateJBoss();
StatisticsService mBean = new StatisticsService();
ObjectName objectName = new ObjectName("Hibernate:type=statistics,application=<application-name>");
try{
beanServer.unregisterMBean(objectName);
}catch(Exception exc) {
//no problems, as unregister is not important
}
SessionFactory sessionFactory = ((HibernateSessionProxy) entityManager.getDelegate()).getSessionFactory();
mBean.setSessionFactory(sessionFactory);
beanServer.registerMBean(mBean, objectName);
if (sessionFactory instanceof SessionFactoryImplementor ){
CacheProvider cacheProvider = ((SessionFactoryImplementor)sessionFactory).getSettings().getCacheProvider();
if (cacheProvider instanceof EhCacheProvider) {
try{
Field field = EhCacheProvider.class.getDeclaredField("manager");
field.setAccessible(true);
CacheManager cacheMgr = (CacheManager) field.get(cacheProvider);
ManagementService.registerMBeans(cacheMgr, beanServer, true, true, true, true);
}catch(Exception exc) {
//do nothing
exc.printStackTrace();
}
}
}
} catch (Exception e) {
throw new RuntimeException("The persistence context " + entityManager.toString() + "is not properly configured.", e);
}
}
}
}
我们使用MbeanServerLocator为boss下列步骤:将第二列步骤:服务器环境中的喜欢linux。