You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by "Cees Bos (JIRA)" <ji...@apache.org> on 2019/07/08 07:46:00 UTC

[jira] [Updated] (TOMEE-2564) Classpath with :: on Linux is cause an infinite loop on War deploy

     [ https://issues.apache.org/jira/browse/TOMEE-2564?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Cees Bos updated TOMEE-2564:
----------------------------
    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:
{code:java}
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){code}

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:/
 !TomEE_classpath_split.png! 

That you can see in TomEE_classpath_split2.png
 !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.



  was:
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:
{code:java}
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){code}

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.




> Classpath with :: on Linux is cause an infinite loop on War deploy
> ------------------------------------------------------------------
>
>                 Key: TOMEE-2564
>                 URL: https://issues.apache.org/jira/browse/TOMEE-2564
>             Project: TomEE
>          Issue Type: Bug
>          Components: TomEE Core Server
>    Affects Versions: 8.0.0-M3
>            Reporter: Cees Bos
>            Priority: Critical
>         Attachments: TomEE_classpath_split.png, TomEE_classpath_split2.png
>
>
> 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:
> {code:java}
> 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){code}
> 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:/
>  !TomEE_classpath_split.png! 
> That you can see in TomEE_classpath_split2.png
>  !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.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)