解决了从Glassfish迁移到TomEE的休眠问题。创建数据源,然后销毁

时间:2018-08-02 15:36:48

标签: java hibernate jpa glassfish tomee

我们已经遇到#22224 bug,试图将运行中的Hiberate 5应用程序从Glassfish 4迁移到Glassfish5。因此,我们正在尝试在其他JPA容器中进行部署。

TomEE 7就是这样的JPA容器,我们在团队中拥有Tomcat的经验。但是,Glassfish和TomEE之间的主要区别似乎是通过WAR中的XML文件而不是通过管理控制台来定义数据源。

我们尝试配置所述数据源的结果似乎是创建并链接到我们的应用程序,但是随后立即调用销毁数据源的操作,该操作失败并卸载了我们的应用程序。


resources.xml =

<?xml version='1.0' encoding='UTF-8'?>
 <resources>
  <Resource id="topazDS" type="javax.sql.DataSource">
    jdbcDriver = oracle.jdbc.OracleDriver
    jdbcUrl = jdbc:oracle:thin:@dacracot.net:1521:DCCDB
    password = password
    passwordCipher = PlainText
    userName = topaz
  </Resource>
 </resources>

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="topazDB" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>topazDS</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <shared-cache-mode>ALL</shared-cache-mode>
        <properties>
            <property name="hibernate.ejb.entitymanager_factory_name" value="topaz"/>
            <property name="hibernate.connection.release_mode" value="auto" />
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
            <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>
            <property name="hibernate.current_session_context_class" value="jta"/>
            <property name="hibernate.archive.autodetection" value="class"/>
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="false" />
            <property name="hibernate.use_sql_comments" value="false" />
            <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" />
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />
            <property name="hibernate.cache.provider_configuration_file_resource_path" value="hibernate-ehcache.xml" />
            <property name="hibernate.cache.use_second_level_cache" value="true" />
            <property name="hibernate.cache.use_query_cache" value="true" />
            <property name="hibernate.cache.generate_statistics" value="true" />
            <property name="hibernate.cache.use_structured_queries" value="false" />
            <property name="hibernate.cache.use_minimal_puts" value="false" />
            <property name="hibernate.max_fetch_depth" value="3" />
        </properties>
    </persistence-unit>
</persistence>

catalina.out =

02-Aug-2018 08:01:59.702 INFO [localhost-startStop-1] sun.reflect.DelegatingMethodAccessorImpl.invoke Deploying web application archive [/Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz.war]
02-Aug-2018 08:01:59.708 INFO [localhost-startStop-1] org.apache.tomee.catalina.TomcatWebAppBuilder.init ------------------------- localhost -> /topaz
02-Aug-2018 08:01:59.710 INFO [localhost-startStop-1] org.apache.openejb.util.JarExtractor.extract Extracting jar: /Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz.war
02-Aug-2018 08:02:01.019 INFO [localhost-startStop-1] org.apache.openejb.util.JarExtractor.extract Extracted path: /Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz
02-Aug-2018 08:02:01.039 WARNING [localhost-startStop-1] org.apache.catalina.startup.SetContextPropertiesRule.begin [SetContextPropertiesRule]{Context} Setting property 'antiJARLocking' to 'true' did not find a matching property.
02-Aug-2018 08:02:09.714 INFO [localhost-startStop-1] org.apache.openejb.config.ConfigurationFactory.configureApplication Configuring enterprise application: /Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz
02-Aug-2018 08:02:11.513 INFO [localhost-startStop-1] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=topaz/topazDS, type=Resource, provider-id=Default JDBC Database)
02-Aug-2018 08:02:11.518 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=topaz/topazDS)
02-Aug-2018 08:02:12.986 INFO [localhost-startStop-1] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
02-Aug-2018 08:02:12.986 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.createContainer Auto-creating a container for bean topaz.Comp1690781744: Container(type=MANAGED, id=Default Managed Container)
02-Aug-2018 08:02:12.987 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Container(id=Default Managed Container)
02-Aug-2018 08:02:12.998 INFO [localhost-startStop-1] org.apache.openejb.core.managed.SimplePassivater.init Using directory /Users/dacracot/Desktop/TopazDev/tomee/temp for stateful session passivation
02-Aug-2018 08:02:13.017 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.processResourceRef Auto-linking resource-ref 'jdbc/topaz' in bean topaz.Comp1690781744 to Resource(id=topazDS)
02-Aug-2018 08:02:13.017 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.processResourceRef Auto-linking resource-ref 'openejb/Resource/topaz/topazDS' in bean topaz.Comp1690781744 to Resource(id=topaz/topazDS)
02-Aug-2018 08:02:13.018 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.processResourceRef Auto-linking resource-ref 'openejb/Resource/topazDS' in bean topaz.Comp1690781744 to Resource(id=topaz/topazDS)
02-Aug-2018 08:02:13.018 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.deploy Configuring PersistenceUnit(name=topazDB, provider=org.hibernate.jpa.HibernatePersistenceProvider)
02-Aug-2018 08:02:13.019 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.logAutoCreateResource Auto-creating a Resource with id 'topaz/topazDSNonJta' of type 'DataSource for 'topazDB'.
02-Aug-2018 08:02:13.019 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.deploy Configuring Service(id=topaz/topazDSNonJta, type=Resource, provider-id=topaz/topazDS)
02-Aug-2018 08:02:13.019 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=topaz/topazDSNonJta)
02-Aug-2018 08:02:13.691 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.setJtaDataSource Adjusting PersistenceUnit topazDB <jta-data-source> to Resource ID 'topaz/topazDS' from 'topazDS'
02-Aug-2018 08:02:13.691 INFO [localhost-startStop-1] org.apache.openejb.config.AutoConfig.setNonJtaDataSource Adjusting PersistenceUnit topazDB <non-jta-data-source> to Resource ID 'topaz/topazDSNonJta' from 'null'
02-Aug-2018 08:02:13.705 INFO [localhost-startStop-1] org.apache.openejb.util.OptionsLog.info Using 'javax.persistence.provider=org.hibernate.ejb.HibernatePersistence'
02-Aug-2018 08:02:13.729 INFO [localhost-startStop-1] org.apache.openejb.config.AppInfoBuilder.build Enterprise application "/Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz" loaded.
02-Aug-2018 08:02:13.734 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.createApplication Assembling app: /Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz
02-Aug-2018 08:02:13.761 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createDelegate PersistenceUnit(name=topazDB, provider=org.hibernate.ejb.HibernatePersistence) - provider time 1ms
02-Aug-2018 08:02:13.761 INFO [localhost-startStop-1] org.apache.openejb.assembler.classic.Assembler.destroyApplication Undeploying app: /Users/dacracot/Desktop/TopazDev/apache-tomee-plume-7.0.5/webapps/topaz
02-Aug-2018 08:02:13.765 SEVERE [localhost-startStop-1] sun.reflect.NativeMethodAccessorImpl.invoke ContainerBase.removeChild: destroy: 
 org.apache.catalina.LifecycleException: An invalid Lifecycle transition was attempted ([before_destroy]) for component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/topaz]] in state [STARTING_PREP]
    at org.apache.catalina.util.LifecycleBase.invalidTransition(LifecycleBase.java:402)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:856)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.undeploy(TomcatWebAppBuilder.java:1651)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.undeploy(TomcatWebAppBuilder.java:1631)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.undeployWebApps(TomcatWebAppBuilder.java:764)
    at org.apache.openejb.assembler.classic.Assembler.destroyApplication(Assembler.java:2374)
    at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:1092)
    at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:757)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1303)
    at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1125)
    at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:133)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

2 个答案:

答案 0 :(得分:0)

在resources.xml上为TomEE定义数据源对我没有用。尝试在conf / tomee.xml中定义它

答案 1 :(得分:0)

您添加到tomee的哪个版本的休眠状态?也许要确保它与TomEE提供的JPA规范保持一致(例如,您不要对JPA 2.1 API使用JPA 2.2隐含)。另外,在某些版本中,休眠在其CDI和JPA之间的生命周期中有一个鸡蛋问题,因此您需要将数据源设置为惰性(在其定义/属性中为Lazy = true)。

也许还检查了日志/文件夹,您应该得到错误原因的更精确的原因,在这里看来应用程序部署已还原,但未在“输出”日志中出现但应该在日志文件中出现了问题

罗曼