EntityManagerFactory и схема БД (поставщик сохраняемости: Hibernate 5.3.7) дважды инициализируются в Weblogic 12.2.1.3. - PullRequest
0 голосов
/ 18 декабря 2018

Я использую Hibernate 5.3.7.Final в качестве поставщика постоянных данных для Weblogic 12.2.1.3.

Моя проблема заключается в том, что при развертывании приложения, котороесодержит модуль персистентности, фабрика менеджера сущностей дважды инициализируется Weblogic.

Сначала в приложении фаза подготовки , а затем снова в приложении фаза активации .В результате вся моя схема БД инициализируется дважды ( hibernate.hbm2ddl.auto = create ).

Я прикрепил соответствующие части цепочек вызовов методов обоихфаза.

Первая (подготовительная фаза):

HibernatePersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo, Map) line: 141    
BasePersistenceUnitInfo.initializeEntityManagerFactory(boolean, BeanManager) line: 614  
BasePersistenceUnitInfo.init() line: 202    
BaseJPAIntegrationProvider.createPersistenceUnitInfo(PersistenceUnitBean, Object, GenericClassLoader, String, URL, URL, String, ApplicationContextInternal) line: 54    
ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).storeDescriptors(Map, Map) line: 422 
ModulePersistenceUnitRegistry(AbstractPersistenceUnitRegistry).loadPersistenceDescriptors(boolean) line: 128    
ModulePersistenceUnitRegistry.<init>(GenericClassLoader, ApplicationContextInternal, Module, boolean) line: 56  
WebAppInternalModuleExtension$PersistenceExtension.setupPersistenceUnitRegistry() line: 197 
WebAppInternalModuleExtension$PersistenceExtension.access$300(WebAppInternalModuleExtension$PersistenceExtension) line: 118 
WebAppInternalModuleExtension.prePrepare() line: 56 
ExtensibleModuleWrapper$PrepareStateChange.next(ExtensibleModuleWrapper$DrivenObject) line: 293 
ExtensibleModuleWrapper$PrepareStateChange.next(Object) line: 285   
StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 45  
ExtensibleModuleWrapper.prepare() line: 109

Вторая (активирующая фаза):

HibernatePersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo, Map) line: 141    
BasePersistenceUnitInfo.initializeEntityManagerFactory(boolean, BeanManager) line: 614  
BasePersistenceUnitInfo.reInitEntityManagerFactoryPerhaps() line: 785   
BasePersistenceUnitInfo.activate(Context) line: 750 
WebAppInternalModuleExtension$PersistenceExtension.activatePersistenceUnit() line: 160  
WebAppInternalModuleExtension$PersistenceExtension.access$700(WebAppInternalModuleExtension$PersistenceExtension) line: 118 
WebAppInternalModuleExtension.postActivate() line: 81   
ExtensibleModuleWrapper$ActivateStateChange.next(ExtensibleModuleWrapper$DrivenObject) line: 321    
ExtensibleModuleWrapper$ActivateStateChange.next(Object) line: 313  
StateMachineDriver<StateMachine>.nextState(StateChange<StateMachine>, StateMachine[]) line: 45  
ExtensibleModuleWrapper.activate() line: 121

Я думаю, что Weblogic принимает решение в методе

BasePersistenceUnitInfo.reInitEntityManagerFactoryPerhaps()

повторную инициализацию фабрики диспетчера сущностей после активации модуля персистентности.

Я много искал,но пока не нашел никаких настроек, чтобы как-то точно настроить это поведение при начальной загрузке.

У кого-нибудь есть идеи, как избежать инициализации дублирующейся схемы БД?

(IУ меня довольно большая схема и import.sql, поэтому этот процесс занимает много времени.)

Вот мой файл persistence.xml для справки:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="abPersistenceUnit" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>jdbc/abDS</jta-data-source>

        <jar-file>ab.jar</jar-file>
        <jar-file>lib/cd.jar</jar-file>

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
            <property name="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl.auto}" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.default_schema" value="${hibernate.default_schema}" />
            <property name="hibernate.cache.second_level_cache" value="false" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.order_inserts" value="true" />
            <property name="hibernate.order_updates" value="true" />
            <property name="hibernate.jdbc.batch_versioned_data" value="true" />
            <property name="hibernate.search.autoregister_listeners" value="false" />
            <property name="hibernate.current_session_context_class" value="jta" />
            <property name="hibernate.transaction.coordinator_class" value="jta" />
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />
            <property name="hibernate.id.new_generator_mappings" value="true" />
        </properties>
    </persistence-unit>
</persistence>

Я очень ценю любые мысли или комментарии!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...