Tomcat embarcado e classpath do contexto

3 respostas
D

Pessoal,
Estou fazendo uma aplicação e me deparei com o seguinte problema:
Possuo o tomcat embarcado na minha aplicação e ele é inicializado de um executável. Para este executável existe uma pasta chamada ./libs, que ficam os seus .jars.
Ao inicializar o tomcat embarcado, ele faz o deploy de uma app em ./webserver/webapps/…
Meu contexto inicializado pelo tomcat possui algumas classes no seu diretório de libs (${contexto}/WEB-INF/lib), que também tem em uma lib do ./libs (utilizado para funcionamento da aplicação e do tomcat). Porém, quando eu chamo uma jsp que possua uma chamada para uma classe que esta contida tanto no diretório de lib do contexto(${contexto}/WEB-INF/lib), quando no diretório de lib do núcleo da aplicação(./libs), ele da prioridade a esse .jar do núcleo da aplicação(./lib)… Quando isso acontece, se esta classe chamar uma outra classe que só contenha no ${contexto}/WEB-INF/lib, ela não será encontrada(classNotFound)…

Eu gostaria de saber se tem como, na inicialização do tomcat embarcado, eu fazer com que o contexto não enxergue o classpath do tomcat(./libs), só utilizando as proprias classes e libs (${contexto}/WEB-INF/lib), ou, mesmo que eu enxerge, da prioridade à libs do contexto?

3 Respostas

cassioso

Um amigo aqui está passando por uma situação bem parecida. Ele já deu uma olhada nos parâmetros passados na inicialização, arquivos de configuração, cogitou mudar para winstone, mas até agora sem sucesso.

Ao invés de tentar fazer com que a aplicação não enxergue o classpath como vc sugeriu, ele está tentando redirecionar o classpath do tomcat (para sua aplicação) do ./lib para o …/WEB-INF/lib.

nextuser

pera ai eu nuam entendi muito bemmm..... vc tem sua app que foi adicionada no tomcat por algo assim

host = embedded.createHost("localhost", getPath() + "/webapps");
engine.addChild(host);

Context appCtx = embedded.createContext("/EHRLocal", getPath() + "/webapps/EHRLocal");
appCtx.setPrivileged(true);
host.addChild(appCtx);

se sua app que está completa no caso na pasta EHRLocal vai funcionar tudo perfeitamente....

não entendi o rolo com a outra pasta lib que tem classes que não tem nada com o tomcat emb...

D

Essa pasta ./lib não tem a ver com o tomcat, pq ela contém a lib do núcleo da aplicação. Porém, é no núcleo da aplicação que eu inicializo o tomcat, ou seja, ele termina sendo instanciado com estas libs no classpath.
Meu contexto ta completo sim, mas tem algumas classes que, além de ter na lib dele(WEB-INF/lib), tem na lib do núcleo da aplicação(./lib). O estranho é que se meu jsp vai usar uma classe que tenha nos dois lugares, ele “da preferencia” à do ./lib… Como se ela estivesse sobrescrevendo a do WEB-INF…
O que eu precisava, era retirar da visão do contexto essas libs… ou da prioridade às libs do WEB-INF…
Eu acho que estas libs que estão no classpath do núcleo, estão sendo observadas como às que ficam no common/lib do tomcat 5.5 não embarcado…

Criado 9 de março de 2010
Ultima resposta 9 de mar. de 2010
Respostas 3
Participantes 3