2016-12-16 8 views
1

У меня есть веб-приложение, использующее библиотеку с «CompilingClassLoader», и когда она перезагружается (поскольку кто-то редактировал код), каждый раз создается новый загрузчик классов. Когда это произойдет, следующий код в спящем плагин Я пишу выполняется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 OR в 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^