EntityManagerFactory和数据库模式(持久性提供程序:Hibernate 5.3.7)在Weblogic 12.2.1.3上初始化了两次。

问题描述 投票:0回答:1
我使用

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()

是否在激活持久性单元时再次重新初始化实体管理器工厂。

我进行了很多搜索,但是到目前为止,还没有找到任何设置可以对自举行为进行微调。

有人知道如何避免重复的数据库模式初始化吗?

((我有一个相当大的架构和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>

我非常感谢您的任何想法或评论!

我正在使用Hibernate 5.3.7.Final作为Weblogic 12.2.1.3。上的持久性提供程序。我的问题是,当我部署包含持久性单元的应用程序时,实体管理器工厂是...

java hibernate web-deployment weblogic12c persistence.xml
1个回答
0
投票
遇到了完全相同的问题。我能想到的唯一建议是不要在模块中使用CDI,因为代码似乎表明,只有在启用CDI的模块中,它才会重新初始化持久性单元。

© www.soinside.com 2019 - 2024. All rights reserved.