¿Cómo se puede establecer un WebAppClassLoader costumbre en el embarcadero a través de configuración?
-
02-10-2019 - |
Pregunta
Estoy intentando configurar un embarcadero (6.x) WebAppContext con una subclase personalizada de WebAppClassLoader . En el código (Scala), es simplemente esto:
val context = new WebAppContext()
val cwacl = new CustomWebAppClassLoader(context)
context.setClassLoader(cwacl)
...
Esto funciona bien cuando la incrustación de embarcadero. En la producción, sin embargo, sólo desplegar un archivo de la guerra a una instancia de amarre independiente, así que no hay oportunidad de cosas configurar en código como este.
No se puede encontrar la manera de hacer lo mismo a través de los archivos de configuración del muelle. Cualquier ayuda es apreciada.
Bono: ¿Cómo se configura experto-embarcadero-plugin utilizar el CustomWebAppClassLoader:)
Solución
You could use the context config files. There are examples in the contexts/
directory.
This would be something along these lines:
<Configure id="mycontext1" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="classLoader">
<New class="f.q.n.CustomWebAppClassLoader">
<Arg><Ref id="mycontext1"/></Arg></New>
</Set>
</Configure>
(See the Jetty XML Syntax configuration reference for more details.)
Otros consejos
As an alternative to using a context config file, you can set the classloader attributes in the pom.xml file, for jetty >= 8.x e.g. not scanning any class within WEB-INF for faster startup:
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<webApp>
<webInfIncludeJarPattern>^$</webInfIncludeJarPattern>
</webApp>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
</plugin>
</plugins>
Reference: Jetty plugin webapp configuration