Criando um Módulo Personalizado no JBoss AS 7.1.2 (JBoss EAP 6)

Postado em Atualizado em

Olá amigos,

Acredito que o post de hoje seja bem útil para todos inclusive para mim. Geralmente em nossos projetos utilizamos alguns frameworks como Spring, JSF, Struts, Hibernate e etc. Isso faz com que nossas aplicações fiquem gigantes por exemplo 50 MB, 100 MB. Eu já aplicações com até 200 MB, isso tudo por que no diretório WEB-INF/lib estavam todas as bibliotecas utilizadas no projeto. Em versões anteriores no JBoss poderíamos utilizar o diretório lib do profile ou common para armazenar as libs. Já no JBoss AS 7 é necessária a criação de  módulos para armazenar as bibliotecas do projeto e é sobre isso que vamos aprender.

Hoje conversei com um brother ai o Renato. Era sobre um problema em um projeto que utiliza Struts.  Pelo que entendi ele deseja remover as libs da aplicação e deixar tudo isso no JBoss.  Como eu nao entendo quase nada de Struts decidi não perder tempo e pegar uma aplicação ou tutorial da Web pronto:

http://www.mkyong.com/struts/struts-hello-world-example/

Esse projeto ai utiliza Struts 1.3.10 e para mim foi um bom case de testes e aprendizado. A aplicação original está aqui. Ela possui 1,5 MB é bem pequena mas já dá para testar. Quando realizamos o building com o maven as seguintes bibliotecas são baixadas:

  • antlr-2.7.2.jar
  • commons-beanutils-1.8.0.jar
  • commons-chain-1.2.jar
  • commons-digester-1.8.jar
  • commons-logging-1.0.4.jar
  • commons-validator-1.3.1.jar
  • oro-2.0.8.jar
  • struts-core-1.3.10.jar
  • struts-taglib-1.3.10.jar

Isso tudo ai em cima está no WEB-INF/lib da aplicação. O objetivo é colocar isso como um módulo do JBoss AS 7.

Crie a seguinte estrutura: JBOSS_HOME\modules\com\company\project\main :

Agora recorte todas as bibliotecas que estão no diretório WEB-INF/lib da aplicação de exemplo StrutsExample.war e cole no diretório JBOSS_HOME\modules\com\company\project\main :

Crei o arquivo module.xml no mesmo diretório onde estão as libs JBOSS_HOME\modules\com\company\project\main e adicione o conteúdo abaixo:

<module xmlns="urn:jboss:module:1.1" name="com.company.project">
 <resources>
   <resource-root path="antlr-2.7.2.jar"/>
   <resource-root path="commons-beanutils-1.8.0.jar"/>
   <resource-root path="commons-chain-1.2.jar"/>
   <resource-root path="commons-digester-1.8.jar"/>
   <resource-root path="commons-logging-1.0.4.jar"/>
   <resource-root path="commons-validator-1.3.1.jar"/>
   <resource-root path="oro-2.0.8.jar"/>
   <resource-root path="struts-core-1.3.10.jar"/>
   <resource-root path="struts-taglib-1.3.10.jar"/>
 </resources>

 <dependencies>
   <module name="sun.jdk"/>
   <module name="javax.api"/>
   <module name="javax.servlet.api"/>
   <module name="javax.servlet.jsp.api"/>
 </dependencies>
</module>

Pronto já adicionamos as nossas bibliotecas e declaramos as dependências.  O próximo passo é configurar o arquivo jboss-deployment-structure.xml no WEB-INF da nossa aplicação com o seguinte conteúdo:

<jboss-deployment-structure>
  <deployment>
     <exclusions>
        <module name="org.apache.log4j" />
     </exclusions>
     <dependencies>
        <module name="com.company.project"/>
     </dependencies>
  </deployment>
</jboss-deployment-structure>

Nesse arquivo nós “dizemos” ao JBoss que dependemos do módulo que nós criamos o com.company.project. 

Pronto!! Basicamente seria isso. Mas como a vida não é fácil, esse projeto ficou lançando a seguinte exception:

uri: http://struts.apache.org/tags-bean cannot be resolved in either web.xml or the jar files deployed with this application

Seguindo algumas dicas do tutorial eu abri a lib struts-taglib-1.3.10.jar extrai o arquivo struts-bean.tld e coloquei no WEB-INF da nossa aplicação StrutsExample.war depois editei o web.xml e adicionei a seguinte configuração:

<taglib>
   <taglib-uri>
      http://struts.apache.org/tags-bean
   </taglib-uri>
   <taglib-location>
      /WEB-INF/struts-bean.tld
   </taglib-location>
</taglib>

Agora sim🙂

A nossa migração está finalizada e aplicação está rodando perfeitamente. Eu realmente nao descobri ainda por que arquivo struts-bean.tld  não foi encontrado na lib struts-taglib-1.3.10.jar mas isso é um pequeno detalhe. O objetivo foi alcançado. Agora a nossa aplicação ficou com 12,7 KB. 

Vou deixar aqui a aplicação StrutsExample.war final.

Lembrando que o tema abordado aqui hoje não serve apenas para aplicações Struts mas sim para todas as  aplicações em que seja necesário a criação de módulos personalizados.

Espero que tenha ajudado.

Abraços

Referências:

5 comentários em “Criando um Módulo Personalizado no JBoss AS 7.1.2 (JBoss EAP 6)

    Renato disse:
    3 de outubro de 2012 às 8:32

    Mauricio,

    Muito bom…Ficou show…Vou fazer alguns testes e depois informo o resultado. Parabéns.

    Peres disse:
    9 de fevereiro de 2013 às 5:15

    Mauricio,

    Acho que você deve ser o “jmag” que o Atexexe menciona no meu post no guj.
    Estou testando uma aplicação http://www.guj.com.br/java/292719-existe-deploy-web-sem-datasource-no-jboss-as-7

    E gostaria de saber, se eu preciso fazer a mesma coisa que tu fez com o struts pra mim rodar?

      Mauricio Magnani Jr respondido:
      13 de fevereiro de 2013 às 2:18

      Oi Peres sou mesmo rsrs
      Entao cara eu dei uma olha nessa thread do GUJ… eu percebi que está acontecendo um conflito do hibernate na sua aplicação com o hibernate que está no JBoss.

      org.hibernate.dialect.MySQL5InnoDBDialect cannot be cast to org.hibernate.dialect.Dialect

      Temos duas opções podemos excluir o uso do hiberante do JBoss utilizando o arquivo jboss-deployment-structure.xml igual o ataxexe recomenodou. Isso é pra funcionar.

      Mas também faça o seguinte no seu pom.xml coloque o scope do hibernate como provided.

      4.1.9.Final

      org.hibernate
      hibernate-entitymanager
      ${hibernate.version}
      provided

      Testa e me diz se funcinou. Vou te ajudar a resolver isso😀

      Abs

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s