Tomcat: possível excluir jarros durante a implantação do aplicativo?

8

Por padrão, o Tomcat impede que os webapps carreguem vários .jars que fazem parte da distribuição do Tomcat (por exemplo, o servlet e as APIs JSP) - é possível configurar outros para também serem excluídos?

Se isso não puder ser feito apenas com a configuração, o Tomcat fornece algum ponto de extensão para validação de recursos?

Quero usar bibliotecas de log compartilhadas e preciso garantir que um aplicativo incorreto não atrapalhe a configuração.

Exemplo

É a isso que estou me referindo (no log de inicialização do Tomcat):

Oct 1, 2011 5:53:40 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\tomcat\myapp\WEB-INF\lib\servlet-api.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2.
Offending class: javax/servlet/Servlet.class
Dmitri
fonte
Eu não acho que o tomcat Exclua qualquer coisa como tal, apenas uma questão de sequência de carregamento de classe, que jar vem primeiro no caminho de classe. Você pode ser depois disso. stackoverflow.com/questions/267953/managing-libraries-in-tomcat
@ Shahzeb: eu adicionei um exemplo. Não se trata realmente de como os diferentes carregadores de classe interagem - quero poder validar os recursos que os webapps tentam carregar.
Dmitri

Respostas:

6

Você verifica / filtra quais aplicativos da Web carregam usando um carregador personalizado que se estende org.apache.catalina.loader.WebappClassLoaderconforme mencionado na documentação do Tomcat .

Confira a implementação do Tomcat (7.0.19) do padrãoWebAppClassLoader que implementa a filtragemjavax.servlet.Servlet para começar. Provavelmente é suficiente substituir essa classe e colocar mais algumas entradas nos protected String[]campos triggerse packageTriggers.

Philipp Reichart
fonte
1
Naturalmente, o seu costume WebappClassLoaderdeve entrar em seu próprio JAR no TOMCAT_HOME/liblonge de seus aplicativos web, apenas para indicar o :) óbvio
Philipp Reichart