JBoss EAP 6.x ClassLoading Isolation

Sem dúvida que Servidores JEE que se prezem são mais robustos, mesmo para simples aplicações WAR. Assim, se o Classloading Isolation é trabalhoso, vale a pena o esforço.

JBossAS7ClassloadingAssim como acontece muito nos Servidores de Aplicação JEE como o  IBM WebSphere ou no Oracle WebLogic, o Classloading Isolation no JBoss EAP não é tão simples em alguns casos. Claro que o nosso desejo é sempre gerarmos um EAR/WAR “limpo” de arquivos de configurações, que rode em qualquer servidor de aplicação. Geralmente temos desistido e voltado para o bom e velho Apache Tomcat, o que não é ruim quando precisamos rodar apenas arquivos WAR. Creio que não temos muitos problemas com o Tomcat porque ele não possui (em seu ambiente) muitas APIs ou Frameworks que poderiam provocar conflitos com as utilizadas pelas aplicações. Mas é fato que nem sempre iremos produzir somente pacotes WAR. E quando precisarmos de Segurança, Escalabilidade, Transação e outros tantos serviços presentes na especificação JEE? Sem dúvida que Servidores de Aplicação JEE que se prezem são mais robustos, mesmo para simples aplicações WAR. Assim, se o Classloading Isolation é trabalhoso, vale a pena o esforço (até certo ponto, obviamente).

À medida que eu encontrar problemas e soluções de Classloading Isolation no JBoss, vou atualizando este post. Descrevo abaixo alguns problemas e soluções:

1) Isolando bibliotecas do EAP 6.x para utilizar as que estão definidas na aplicação

Basicamente, basta configurar o arquivo /WEB-INF/jboss-deployment-structure.xml. No exemplo abaixo, a versão do SL4J utilizada pelo EAP é excluída do classloading, para que seja utilizada a versão definida na aplicação:

post 1-1

Esta é a configuração básica de isolamento e deve funcionar na maioria dos casos. Entretanto, para determinadas APIs, o isolamento não é tão simples, como é o caso do JSF (Java Server Faces) e JPA (Java Persistence API).

Continue lendo “JBoss EAP 6.x ClassLoading Isolation”