Java weblogic重新启动的应用程序启动失败,第二次成功。(使用不同的openjpa metada)

Java weblogic重新启动的应用程序启动失败,第二次成功。(使用不同的openjpa metada),java,classloader,openjpa,weblogic-10.x,Java,Classloader,Openjpa,Weblogic 10.x,很难描述案件,所以下面是我的调查结果: 环境: java 1.6 weblogic-10.3.6.0 openjpa-1.1.0 春季-3.2 一个persistence.xml中有两个持久性单元A和R 案例: 将war文件部署到weblogic成功 在管理控制台中停止应用程序 尝试启动应用程序-失败 尝试重新开始-成功了! 堆栈跟踪 weblogic.application.ModuleException: :org.apache.openjpa.persistence.ArgumentExc

很难描述案件,所以下面是我的调查结果:

环境:

java 1.6 weblogic-10.3.6.0 openjpa-1.1.0 春季-3.2 一个persistence.xml中有两个持久性单元A和R 案例:

将war文件部署到weblogic成功 在管理控制台中停止应用程序 尝试启动应用程序-失败 尝试重新开始-成功了! 堆栈跟踪

weblogic.application.ModuleException: :org.apache.openjpa.persistence.ArgumentException:Table "ACTION_COMMENT" given for "......ActionComment" does not exist.
at org.apache.openjpa.jdbc.meta.MappingInfo.createTable(MappingInfo.java:470)
at org.apache.openjpa.jdbc.meta.ClassMappingInfo.getTable(ClassMappingInfo.java:229)
at org.apache.openjpa.jdbc.meta.strats.FullClassStrategy.map(FullClassStrategy.java:71)
at org.apache.openjpa.jdbc.meta.ClassMapping.setStrategy(ClassMapping.java:381)
at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:55)
at org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:318)
at org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:667)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:549)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:248)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:219)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:187)
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:121)
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:310)
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:190)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:445)
在成功的情况下,此代码块toRedefine集合的结果为空,代码位于AbstractBrokerFactory的第310行以下 //将ManagedClassSubasser放入循环中 ManagedClassSubclasser.prepareUnenhancedClasses _conf、toRedefine、envLoader没有任何效果

需求量

对于第一次重新启动失败的情况,PersistenceCapable.class.isAssignableFromcls返回false,而all方法返回true。 对于第二次重新启动成功案例,PersistenceCapable.class.isAssignableFromcls返回true,而all方法返回false。 在cls ActionComment类中,getClassLoader调用的结果

故障案例:

result = {weblogic.utils.classloaders.ChangeAwareClassLoader@26293}"weblogic.utils.classloaders.ChangeAwareClassLoader@fa3e780 finder: weblogic.utils.classloaders.CodeGenClassFinder@4ce80175 annotation: svwi@svwi-2.9.1-SHAPSHOT.war"
成功案例

result = {weblogic.utils.classloaders.ChangeAwareClassLoader@29327}"weblogic.utils.classloaders.ChangeAwareClassLoader@3932d2a2 finder: weblogic.utils.classloaders.CodeGenClassFinder@44e8cb1e annotation: svwi@svwi-2.9.1-SHAPSHOT.war"
有人能帮忙吗

更新 persistence.xml

<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="analysys" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl
    </provider>
    <jta-data-source>AnalysisDS</jta-data-source>

    <class>.....Rule</class>
      ...other classes..

    <properties>
        <property name="openjpa.ManagedRuntime" value="org.apache.openjpa.ee.JNDIManagedRuntime" />
        <property name="openjpa.Log" value="SQL=TRACE"/>
        <property name="openjpa.ConnectionFactoryProperties"
            value="PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=72" />

         <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
        <property name="openjpa.DetachState"
            value="loaded(DetachedStateField=true, DetachedStateManager=true)" />
        <property name="openjpa.IgnoreChanges" value="true" />
         <property name="openjpa.jdbc.DBDictionary" value="oracle"/>
    </properties>

</persistence-unit>

<persistence-unit name="reaction" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl
    </provider>
    <jta-data-source>ReactionDS</jta-data-source>

    <class>.....ActionComment</class>
    ...other classes..

    <properties>
        <property name="openjpa.ManagedRuntime" value="org.apache.openjpa.ee.JNDIManagedRuntime" />
        <property name="openjpa.Log" value="SQL=TRACE"/>
        <property name="openjpa.ConnectionFactoryProperties"
            value="PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=72" />
         <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
        <property name="openjpa.DetachState"
            value="loaded(DetachedStateField=true, DetachedStateManager=true)" />
        <property name="openjpa.IgnoreChanges" value="true" />
         <property name="openjpa.jdbc.DBDictionary" value="oracle"/>
    </properties>

</persistence-unit>

张贴persistence.xml文件的内容。显然,这应该作为错误报告提交给OpenJPA错误跟踪系统。
result = {weblogic.utils.classloaders.ChangeAwareClassLoader@29327}"weblogic.utils.classloaders.ChangeAwareClassLoader@3932d2a2 finder: weblogic.utils.classloaders.CodeGenClassFinder@44e8cb1e annotation: svwi@svwi-2.9.1-SHAPSHOT.war"
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="analysys" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl
    </provider>
    <jta-data-source>AnalysisDS</jta-data-source>

    <class>.....Rule</class>
      ...other classes..

    <properties>
        <property name="openjpa.ManagedRuntime" value="org.apache.openjpa.ee.JNDIManagedRuntime" />
        <property name="openjpa.Log" value="SQL=TRACE"/>
        <property name="openjpa.ConnectionFactoryProperties"
            value="PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=72" />

         <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
        <property name="openjpa.DetachState"
            value="loaded(DetachedStateField=true, DetachedStateManager=true)" />
        <property name="openjpa.IgnoreChanges" value="true" />
         <property name="openjpa.jdbc.DBDictionary" value="oracle"/>
    </properties>

</persistence-unit>

<persistence-unit name="reaction" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl
    </provider>
    <jta-data-source>ReactionDS</jta-data-source>

    <class>.....ActionComment</class>
    ...other classes..

    <properties>
        <property name="openjpa.ManagedRuntime" value="org.apache.openjpa.ee.JNDIManagedRuntime" />
        <property name="openjpa.Log" value="SQL=TRACE"/>
        <property name="openjpa.ConnectionFactoryProperties"
            value="PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=72" />
         <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
        <property name="openjpa.DetachState"
            value="loaded(DetachedStateField=true, DetachedStateManager=true)" />
        <property name="openjpa.IgnoreChanges" value="true" />
         <property name="openjpa.jdbc.DBDictionary" value="oracle"/>
    </properties>

</persistence-unit>