我正在尝试使用TomEE 8.0.4 docker image创建一个工作开发环境。我正在将我的项目打包成与所有依赖项(TomEE 未提供的依赖项)的战争。然后我将该战争复制到 docker 容器中的 webapps 目录中
docker cp app.war tomee-instance:/usr/local/tomee/webapps
这给了我这些日志:
tomee-instance | 14-Nov-2020 00:31:43.724 INFO [Catalina-utility-1] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Undeploying context [/app]
tomee-instance | 14-Nov-2020 00:31:43.743 WARNING [Catalina-utility-1] com.sun.faces.config.ConfigureListener.contextDestroyed Unexpected state during contextDestroyed: no ConfigManager instance in current ServletContext but one is expected to exist.
tomee-instance | 14-Nov-2020 00:31:43.765 INFO [Catalina-utility-1] org.apache.openejb.assembler.classic.Assembler.destroyApplication Undeploying app: /usr/local/tomee/webapps/app
tomee-instance | 14-Nov-2020 00:31:43.773 INFO [Catalina-utility-1] org.apache.openejb.assembler.classic.Assembler.doResourceDestruction Closing DataSource: app/appDS
tomee-instance | 14-Nov-2020 00:31:43.900 WARNING [Catalina-utility-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [app] registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
tomee-instance | 14-Nov-2020 00:31:43.911 INFO [Catalina-utility-1] jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke Deploying web application archive [/usr/local/tomee/webapps/app.war]
tomee-instance | 14-Nov-2020 00:31:43.911 INFO [Catalina-utility-1] org.apache.tomee.catalina.TomcatWebAppBuilder.init ------------------------- localhost -> /app
tomee-instance | 14-Nov-2020 00:31:43.913 INFO [Catalina-utility-1] org.apache.openejb.util.JarExtractor.extract Extracting jar: /usr/local/tomee/webapps/app.war
tomee-instance | 14-Nov-2020 00:31:43.938 INFO [Catalina-utility-1] org.apache.openejb.util.JarExtractor.extract Extracted path: /usr/local/tomee/webapps/app
tomee-instance | 14-Nov-2020 00:31:43.941 WARNING [Catalina-utility-1] org.apache.tomcat.util.digester.SetPropertiesRule.begin Match [Context] failed to set property [cachingAllowed] to [false]
tomee-instance | 14-Nov-2020 00:31:44.119 INFO [Catalina-utility-1] org.apache.openejb.config.ConfigurationFactory.configureApplication Configuring enterprise application: /usr/local/tomee/webapps/app
tomee-instance | 14-Nov-2020 00:31:44.237 INFO [Catalina-utility-1] org.apache.openejb.config.ConfigurationFactory.configureService Configuring Service(id=app/appDS, type=Resource, provider-id=Default JDBC Database)
tomee-instance | 14-Nov-2020 00:31:44.237 INFO [Catalina-utility-1] org.apache.openejb.assembler.classic.Assembler.createRecipe Creating Resource(id=app/appDS)
tomee-instance | 14-Nov-2020 00:31:44.382 INFO [Catalina-utility-1] org.apache.openejb.config.AutoConfig.processResourceRef Auto-linking resource-ref 'openejb/Resource/app/appDS' in bean app.Comp1660470862 to Resource(id=app/appDS)
tomee-instance | 14-Nov-2020 00:31:44.382 INFO [Catalina-utility-1] org.apache.openejb.config.AutoConfig.processResourceRef Auto-linking resource-ref 'openejb/Resource/appDS' in bean app.Comp1660470862 to Resource(id=app/appDS)
tomee-instance | 14-Nov-2020 00:31:44.383 INFO [Catalina-utility-1] org.apache.openejb.config.AutoConfig.deploy Configuring PersistenceUnit(name=app-pu, provider=org.eclipse.persistence.jpa.PersistenceProvider)
tomee-instance | 14-Nov-2020 00:31:44.384 INFO [Catalina-utility-1] org.apache.openejb.config.AutoConfig.setJtaDataSource Adjusting PersistenceUnit app-pu <jta-data-source> to Resource ID 'app/appDS' from 'null'
tomee-instance | 14-Nov-2020 00:31:44.384 INFO [Catalina-utility-1] org.apache.openejb.config.AutoConfig.setNonJtaDataSource Adjusting PersistenceUnit app-pu <non-jta-data-source> to Resource ID 'app/appDSNonJta' from 'null'
tomee-instance | 14-Nov-2020 00:31:44.387 INFO [Catalina-utility-1] org.apache.openejb.config.AppInfoBuilder.build Enterprise application "/usr/local/tomee/webapps/app" loaded.
tomee-instance | 14-Nov-2020 00:31:44.387 INFO [Catalina-utility-1] org.apache.openejb.assembler.classic.Assembler.createApplication Assembling app: /usr/local/tomee/webapps/app
然后我的模型的每个类都有一个例外,与此相同:
tomee-instance | 14-Nov-2020 00:31:44.394 INFO [Catalina-utility-1] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load [com.example.base.core.model.IdEntity_]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
tomee-instance | java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [com.example.base.core.model.IdEntity_]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
tomee-instance | at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)
tomee-instance | at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1373)
tomee-instance | at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1226)
tomee-instance | at org.apache.tomee.catalina.TomEEWebappClassLoader.loadClass(TomEEWebappClassLoader.java:209)
tomee-instance | at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
tomee-instance | at java.base/java.lang.Class.forName0(Native Method)
tomee-instance | at java.base/java.lang.Class.forName(Unknown Source)
tomee-instance | at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToClass(ConversionManager.java:461)
tomee-instance | at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:159)
tomee-instance | at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:225)
tomee-instance | at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.preInitializeCanonicalMetamodel(EntityManagerSetupImpl.java:3966)
tomee-instance | at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactoryImpl(PersistenceProvider.java:384)
tomee-instance | at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:316)
tomee-instance | at org.apache.openejb.assembler.classic.EntityManagerFactoryCallable.call(EntityManagerFactoryCallable.java:112)
tomee-instance | at org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createDelegate(ReloadableEntityManagerFactory.java:134)
tomee-instance | at org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.<init>(ReloadableEntityManagerFactory.java:105)
tomee-instance | at org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:157)
tomee-instance | at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:924)
tomee-instance | at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:759)
tomee-instance | at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1309)
tomee-instance | at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1131)
tomee-instance | at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:134)
tomee-instance | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
tomee-instance | at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5044)
tomee-instance | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
tomee-instance | at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
tomee-instance | at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
tomee-instance | at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
tomee-instance | at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
tomee-instance | at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848)
tomee-instance | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
tomee-instance | at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
tomee-instance | at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
tomee-instance | at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
tomee-instance | at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)
tomee-instance | at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
tomee-instance | at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1620)
tomee-instance | at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:305)
tomee-instance | at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
tomee-instance | at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1151)
tomee-instance | at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1353)
tomee-instance | at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357)
tomee-instance | at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1335)
tomee-instance | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
tomee-instance | at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
tomee-instance | at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
tomee-instance | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
tomee-instance | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
tomee-instance | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
tomee-instance | at java.base/java.lang.Thread.run(Unknown Source)
然后,如果我尝试使用浏览器访问该应用程序,我有这个:
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [java.lang.ref.PhantomReference]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
这只是一个示例,因为有时我会遇到此异常,但是当它尝试加载 PostgreSQL 相关类时。
如果我重新启动容器(出于时间考虑,我试图避免这种情况),则不会出现错误,并且应用程序按预期工作。
该应用程序context.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/app" antiResourceLocking="false" cachingAllowed="false" reloadable="true" override="true" privileged="true" />
该项目是一个简单的 JAX-RS 服务,既没有 EJB,也没有像 Spring 这样的框架。
如果我感到绝望,我很抱歉,但TomEE 文档没有帮助,我不知道如何继续。
编辑:在容器启动后,我已经将完整的catalina.log放在了 pastebin 中,并在此处重新部署了应用程序。和同一个文件,在完成一些请求之后,直到一个错误页面被传递到这里。