0

任何人都可以帮助我为什么应用程序服务器上会出现以下错误消息。我正在尝试使用 Terracotta 设置 EHCache。请提出任何线索,为什么会出现此消息。

[DEBUG][08/05/12 13:50:19.648][CacheByAmitNode8081] Running mbean initializer task for ehcache hibernate...
[DEBUG][08/05/12 13:50:19.766][CacheByAmitNode8081] Successfully registered bean
[ERROR][08/05/12 13:50:19.805][CacheByAmitNode8081] Error locating Hibernate Session Factory
java.lang.NullPointerException
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:36)
    at sun.reflect.UnsafeQualifiedObjectFieldAccessorImpl.get(UnsafeQualifiedObjectFieldAccessorImpl.java:20)
    at java.lang.reflect.Field.get(Field.java:358)
    at org.hibernate.cache.ehcache.management.impl.ProviderMBeanRegistrationHelper$RegisterMBeansTask.locateSessionFactory(ProviderMBeanRegistrationHelper.java:152)
    at org.hibernate.cache.ehcache.management.impl.ProviderMBeanRegistrationHelper$RegisterMBeansTask.run(ProviderMBeanRegistrationHelper.java:117)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
[DEBUG][08/05/12 13:50:19.815][CacheByAmitNode8081] SessionFactory is probably still being initialized... waiting for it to complete before enabling hibernate statistics monitoring via JMX
4

1 回答 1

2

我今天遇到了同样的问题。这似乎是由第 152 行的 ProviderMBeanRegistrationHelper 类中的错误引起的

Map map = (Map) instancesField.get( null );

在第 146 和 147 行,我们有

Class factoryType = SessionFactoryRegistry.class;
Field instancesField = getField( factoryType, "sessionFactoryMap" );

所以我们知道 instanceField 是 SessionFactoryRegistry 类的实例中的一个字段,它恰好有一个可以从类中静态获取的实例

SessionFactoryRegistry.INSTANCE

总之,我将第 152 行修改如下

Map map = (Map) instancesField.get( SessionFactoryRegistry.INSTANCE );

编译并替换了hibernate-ehcache jar文件中的类,异常消失了。我将就此提出问题。

于 2012-06-12T16:38:23.427 回答