解决从Glassfish迁移到TomEE的Hibernate问题.数据源先创建,然后销毁



我们在尝试将一个正在运行的Hiberate 5应用程序从Glassfish 4迁移到Glassfish 5时遇到了#22224错误。因此,我们正在尝试在其他JPA容器中进行部署。

TomEE7就是这样一个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)

您向tomee添加了哪个版本的hibernate?也许可以确保它与TomEE提供的JPA规范保持一致(例如,JPA 2.1 API不使用JPA 2.2 impl(。此外,在某些版本中,hibernate在CDI和JPA之间的生命周期中有一个鸡蛋错误,因此您可能需要将数据源设置为lazy(在其定义/属性中lazy=true(。

也许还可以检查日志/文件夹,您应该得到错误的更准确原因。原因在这里,应用程序部署似乎被恢复了。原因是一个问题没有出现在"输出"日志中,但应该出现在日志文件中。

罗曼

最新更新