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。上的持久性提供程序。我的问题是,当我部署包含持久性单元的应用程序时,实体管理器工厂是...