5

I have a Tomcat 8.5.32 configured to use DCEVM with

JAVA_OPTS="-Xms512m -Dcatalina.home=$CATALINA_HOME -XXaltjvm=dcevm -javaagent:/usr/share/tomcat/lib/hotswap-agent-1.3.0.jar=autoHotswap=true"

The classes to be dynamically reloaded are specified in $CATALINA_HOME/conf/Catalina/localhost/mycontext.xml so that Tomcat reloads them directly from the .class files regenerated automatically by Eclipse.

<Context docBase="~/workspace/myapp/myapp-web/src/main/webapp">
<Resources>
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/vagrant/workspace/myapp/myapp-models/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/vagrant/workspace/myapp/myapp-services/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/vagrant/workspace/clocial/myapp-web/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/vagrant/workspace/myapp/myapp-web/target/lib" internalPath="/" webAppMount="/WEB-INF/lib" />
  </Resources>
</Context>

This works but the context takes over two minutes to be loaded by Tomcat because there are over a hundred directories.

By setting org.apache.catalina.startup.ContextConfig.level = FINE at conf/logging.properties I got an trace telling that most of the time is presumably spent searching for annotations.

Is there a way to tell Tomcat not to look for annotations at certain directories so that only the ones which actually contain classes with annotations are scanned?

I´ve been reading the source code of ContextConfig, and there seem to be some exclusion rules but I can´t understand them.

Here is a catalina.out excerpt:

12:39:32.992 INFO org.apache.catalina.startup.HostConfig.deployDescriptor Deploying configuration descriptor [/usr/share/tomcat/conf/Catalina/localhost/mycontext.xml]
12:39:33.092 FINE org.apache.catalina.startup.ContextConfig.init ContextConfig: Initializing
12:39:33.093 FINE org.apache.catalina.startup.ContextConfig.processContextConfig Processing context [/clocial] configuration file [file:/usr/share/tomcat/conf/context.xml]
12:39:33.123 FINE org.apache.catalina.startup.ContextConfig.processContextConfig Successfully processed context [/clocial] configuration file [file:/usr/share/tomcat/conf/context.xml]
12:39:33.123 FINE org.apache.catalina.startup.ContextConfig.processContextConfig Processing context [/clocial] configuration file [file:/usr/share/tomcat/conf/Catalina/localhost/mycontext.xml]
12:39:33.140 FINE org.apache.catalina.startup.ContextConfig.processContextConfig Successfully processed context [/clocial] configuration file [file:/usr/share/tomcat/conf/Catalina/localhost/mycontext.xml]
12:39:47.640 FINE org.apache.catalina.startup.ContextConfig.configureStart ContextConfig: Processing START
12:39:47.641 FINE org.apache.catalina.startup.ContextConfig.configureStart Context [/clocial] will parse web.xml and web-fragment.xml files with validation:[false] and namespaceAware:[false]
12:39:58.524 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource Scanning web application directory for class files with annotations [file:/vagrant/workspace/myapp/myapp-models/target/classes/com/]
12:40:00.594 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource Scanning web application directory for class files with annotations [file:/vagrant/workspace/myapp/myapp-models/target/classes/com/mypackage/]
12:40:00.768 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource Scanning web application directory for class files with annotations [file:/vagrant/workspace/myapp/myapp-models/target/classes/com/mypackage/blob/]
12:40:00.867 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource Scanning web application directory for class files with annotations [file:/vagrant/workspace/myapp/myapp-models/target/classes/com/mypackage/blob/tables/]
12:40:00.968 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource Scanning web application directory for class files with annotations [file:/vagrant/workspace/myapp/myapp-models/target/classes/com/mypackage/blob/test/]
...
another hundred directories
...
12:41:07.051 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource Scanning web application directory for class files with annotations [file:/vagrant/workspace/myapp/myapp-web/target/classes/com/mypackage/mymodel/]
12:41:07.104 FINE org.apache.catalina.startup.ContextConfig.processAnnotationsFile Scanning directory for class files with annotations [/usr/share/tomcat/lib]
12:41:07.142 FINE org.apache.catalina.startup.ContextConfig.authenticatorConfig Configured an authenticator for method [NONE]
Serg M Ten
  • 5,568
  • 4
  • 25
  • 48
  • 1
    I only know the JarScanFilter but I fear this won't help you. https://tomcat.apache.org/tomcat-8.0-doc/config/jar-scan-filter.html https://wiki.apache.org/tomcat/HowTo/FasterStartUp – Selaron Oct 18 '18 at 14:47
  • Yes. I already added a lot of JARs to tomcat.util.scan.StandardJarScanFilter.jarsToSkip in catalina.properties That was another issue. It seems that the DCEVM configuration is full of caveats. – Serg M Ten Oct 18 '18 at 14:51
  • I stuck at same issue, Do you have any solution? – TwTw Dec 30 '21 at 07:47

0 Answers0