2016-12-16 7 views
1

私は、 'CompilingClassLoader'を持つライブラリを使用しているWebアプリケーションを持っていて、いつ誰かがコードを編集したためにリロードすると、毎回新しいクラスローダーが作成されます。それが起こるとき、私は書いてい休止プラグインで、次のコードはhibernate 5とJPAとエンティティクラスローダーを動的に設定する

@Singleton 
@Provides 
public EntityManagerFactory providesSessionFactory() throws IOException { 
    log.info("Loading Hibernate. ENTITY classloader="+entityClassLoader+" hibernate classloader="+this.getClass().getClassLoader()); 
    Map<String, Object> properties = new HashMap<>(); 
    properties.put("hibernate.classLoader.application", entityClassLoader); 
    EntityManagerFactory factory = Persistence.createEntityManagerFactory(persistenceUnit, properties); 
    log.info("Done loading Hibernate"); 
    return factory; 
} 

を実行している私は「hibernate.classLoader.applicationは」代わりの目的に反している(persistence.xmlで定義されなければならないと思うので、問題が発生しますこれは開発者がコードを変更するたびに発生します)。

基本的に、私たちはCompilingClassLoaderが変化し続ける開発モードを持っています(それは本当に速いのですばらしいですが)。しかし、私は今、これを休止状態でどうやって行うのか分かりません。何らかのThreadLocalまたはThread.current.setContextClassLoader()に何らかの方法で設定する方法がありますか?

おかげで、 ディーン

答えて

1

これは

Collection<ClassLoader> classLoaders = new ArrayList<>(); 
    classLoaders.add(entityClassLoader); 
    Map<String, Object> properties = new HashMap<>(); 
    properties.put(AvailableSettings.CLASSLOADERS, classLoaders); 

    EntityManagerFactory factory = Persistence.createEntityManagerFactory(persistenceUnit, properties); 
を働くことになりました
関連する問題