Uploaded image for project: 'TomEE'
  1. TomEE
  2. TOMEE-2564

Classpath with :: on Linux is cause an infinite loop on War deploy

    XMLWordPrintableJSON

Details

    Description

      We faced an infinite loop on deploying a war. 
      I was able to debug the issue and found the cause.

      This is the bottom of the stacktrace:

      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2059)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsFile(OpenEJBContextConfig.java:634)
      at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:2002)
      at org.apache.catalina.startup.OpenEJBContextConfig.processAnnotationsUrl(OpenEJBContextConfig.java:650)
      at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1952)
      at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1156)
      at org.apache.catalina.startup.OpenEJBContextConfig.webConfig(OpenEJBContextConfig.java:411)
      at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765)
      - locked <0x0000000749921aa8> (a org.apache.catalina.startup.OpenEJBContextConfig)
      at org.apache.catalina.startup.OpenEJBContextConfig.configureStart(OpenEJBContextConfig.java:124)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5007)
      - locked <0x00000007499211b0> (a org.apache.catalina.core.StandardContext)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
      - locked <0x00000007499211b0> (a org.apache.catalina.core.StandardContext)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1858)
      at java.util.concurrent.Executors$RunnableAdapter.call(java.base@11/Executors.java:515)
      at java.util.concurrent.FutureTask.run(java.base@11/FutureTask.java:264)
      at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
      at java.util.concurrent.AbstractExecutorService.submit(java.base@11/AbstractExecutorService.java:118)
      at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:772)
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426)
      at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1629)
      at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:304)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
      at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1176)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1398)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1402)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1370)
      at java.lang.Thread.run(java.base@11/Thread.java:834)

      The problem is the place were the fragments are determined to scan.
      That is done in org.apache.tomee.loader.TomEEJarScanner#scan.

      In our case the classpath contains ::
      In setenv.sh we had a line like this:
      export CLASSPATH=/opt/tomee-8mp/lib/ojdbc8.jar:${CLASSPATH}
      But if CLASSPATH originally resolves to null, then it is empty.

      In attachment TomEE_classpath_split.png you can see that due to the split the 'jar' variable resolves to "".
      With the conversion to URL is results in file:/

      That you can see in TomEE_classpath_split2.png

      During War deployment is scans the complete file system (that is a security risk, it can include whatever stuff now).
      Somehow on our server there was at some place a symlink to root, so it comes an a infinite loop.

      Attachments

        1. TomEE_classpath_split.png
          55 kB
          Cees Bos
        2. TomEE_classpath_split2.png
          99 kB
          Cees Bos

        Issue Links

          Activity

            People

              cbos Cees Bos
              cbos Cees Bos
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: