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 に答える