Я пытаюсь создать рабочую среду разработки, используя образ докера TomEE 8.0.4. Я упаковываю свой проект в войну со всеми зависимостями (теми, которые не поставляются с TomEE). Затем я копирую эту войну в каталог 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 не помогла. t помочь, и я не знаю, как продолжить.
Изменить: я поместил полный catalina.log после запуска контейнера и повторного развертывания приложения в pastebin, здесь. И тот же файл после выполнения некоторого запроса, пока страница с ошибкой не будет доставлена здесь.