I have a web app deployed as a ear file that contains a war file. The ear file is named "MyApp.ear" and the war file it contains is named "MyApp-war.war". I have the code below in application.xml. <?xml version="1.0"?> <application version="7" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"> <display-name>MyApp</display-name> <module> <web> <web-uri>MyApp-war.war</web-uri> <context-root>/MyApp</context-root> </web> </module> </application> With the above config, the app will deploy the first time, but if I restart TomEE the app will fail with the errors below. So, if it's a fresh first-time deployment, it works, otherwise it doesn't work. In the Tomcat Web Application Manger there is only one application listed, "/MyApp". 20-Apr-2022 13:08:03.349 INFO [Catalina-utility-2] org.apache.openejb.assembler.classic.Assembler.destroyApplication Undeploying app: D:\tomcat\apache-tomee-plume-8.0.10\webapps\MyApp 20-Apr-2022 13:08:03.535 SEVERE [Catalina-utility-2] org.apache.openejb.assembler.classic.Assembler.destroyApplication undeployException original cause java.lang.Exception: deployment not found: MyApp-war.Comp82524256 at org.apache.openejb.assembler.classic.Assembler.destroyApplication(Assembler.java:2378) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:1103) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:762) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:758) at org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(TomcatWebAppBuilder.java:2318) at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:142) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1162) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1365) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1369) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1347) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 20-Apr-2022 13:08:03.537 WARNING [Catalina-utility-2] org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost Error deploying application D:\tomcat\apache-tomee-plume-8.0.10\webapps\MyApp.ear org.apache.openejb.OpenEJBException: Creating application failed: D:\tomcat\apache-tomee-plume-8.0.10\webapps\MyApp: Child name [/MyApp] is not unique at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:1107) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:762) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:758) at org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(TomcatWebAppBuilder.java:2318) at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:142) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1162) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1365) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1369) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1347) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.IllegalArgumentException: Child name [/MyApp] is not unique at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:711) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696) at org.apache.tomee.catalina.TomcatWebAppBuilder.deployWar(TomcatWebAppBuilder.java:687) at org.apache.tomee.catalina.TomcatWebAppBuilder.deployWebApps(TomcatWebAppBuilder.java:614) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:1057) ... 17 more If I rename "MyApp.ear" to "MyApp-ear.ear", then everything works including restarting TomEE. In this case, the Tomcat Web Application Manger lists two applications, "/MyApp-ear" and "/MyApp". It seems TomEE gets confused when the ear file is named MyApp.ear with the implied context-root for the ear being "MyApp" and the context-root for the war file is also specified to be "MyApp" in application.xml. Can I name the ear file "MyApp.ear" and also have the context-root for the war file be "MyApp"? Is there a way to change the context-root for the ear file besides changing the ear filename? Thanks, Terry
