Configurando o Módulo do Spring Framework no JBoss AS 7.1.2(JBoss EAP 6)

Postado em Atualizado em

Olá amigos,

Atualmente estou trabalhando com Spring Framework 3 em um projeto bem legal.  Por motivos arquiteturiais resolvemos utilizar o Spring ao invés do JavaEE 6. Sendo assim a nossa aplicação possui todas as bibliotecas no diretório WEB-INF/lib  gerando um .war gigante prejudicando o deploy,  pois nós utilizamos o Jenkins para integração contínua, então ao gerarmos o building do projeto o .war é deployado no JBoss AS 7 automaticamente. Conversando o time chegamos a conclusão de que a melhor maneira de resolver isso é a criação de um módulo do Spring no JBoss com todas as bibliotecas que estamos utilizando.

O primeiro passo é baixar a versão do Spring utilizada, que no nosso caso é a 3.1.

Eu baixei o último release: spring-framework-3.1.2.RELEASE.zip

Devemos criar a estrutura de diretórios no JBoss que armazenará as libs do Spring.  A seguinte estrutura deve ser criada:

JBOSS_HOME\modules\org\springframework\spring\main

Copie todas as bibliotecas do Spring que serão utilizadas para esse diretório.

Agora no mesmo diretório JBOSS_HOME\modules\org\springframework\spring\main crie o arquivo  module.xml e e insira as bibliotecas e suas dependências como abaixo:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring">
 <resources>
   <resource-root path="org.springframework.aop-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.asm-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.aspects-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.beans-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.context.support-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.context-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.core-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.expression-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.instrument.tomcat-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.instrument-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.jdbc-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.jms-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.orm-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.oxm-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.test-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.transaction-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web.portlet-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web.servlet-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web.struts-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web-3.1.2.RELEASE.jar"/>

   <!-- Insert resources here -->
 </resources>

 <dependencies>
   <module name="javax.api"/>
   <module name="javax.jms.api"/>
   <module name="javax.annotation.api"/>
   <module name="javax.servlet.api"/>
   <module name="org.apache.commons.logging"/>
   <module name="org.jboss.vfs"/>
 </dependencies>
</module>

No WEB-INF da aplicação crie o arquivo jboss-deployment-structure.xml e declare a dependência do módulo do Spring.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="org.springframework.spring" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

Realize o deploy da aplicação e verifique se tudo está funcionando corretamente.

Espero que tenha ajudado.

Abraços

24 comentários em “Configurando o Módulo do Spring Framework no JBoss AS 7.1.2(JBoss EAP 6)

    kwejk - www.nixingnixiu.com disse:
    15 de fevereiro de 2013 às 13:27

    I usually do not leave a response, but I browsed a few responses here Configurando o Módulo do Spring Framework no
    JBoss AS 7.1.2(JBoss EAP 6) | JBossDivers. I do have a couple
    of questions for you if you do not mind. Is it
    just me or does it look as if like a few of the responses appear as if they are coming from brain dead people?
    😛 And, if you are posting at other online sites, I’d like to keep up with you. Would you make a list of every one of all your social pages like your linkedin profile, Facebook page or twitter feed?

    Mauricio Magnani Jr respondido:
    15 de fevereiro de 2013 às 14:30

    Hey I am glad to help you. You can send me the questions most insane possible if I will be able to answer will be awesome.
    You can send email to the email: magnani.blackbird @ gmail.com. Sorry for my english I’m still learning😀

    My Linkedin: http://www.linkedin.com/pub/mauricio-magnani-jr/38/26b/46a

    Kind Regards

    william gueiros disse:
    26 de fevereiro de 2013 às 19:11

    mas no caso eu teria que deixar de utilizar meu maven

      Mauricio Magnani Jr respondido:
      26 de fevereiro de 2013 às 19:52

      Acredito que algo do tipo (provided) funcione. Veja:

      org.springframework
      spring-context
      ${spring.version}
      provided
      </dependency

      Abs

        william gueiros disse:
        27 de fevereiro de 2013 às 10:41

        sim eu fiz isso ele retorna um erro dizendo que é necessario levantar o spring como modulo como vc fez…😦 acho que mataram o maven

        se eu necessito apenas das anotation seria necessario colocar este modulos?

        william gueiros disse:
        27 de fevereiro de 2013 às 10:44

        sim eu fiz isso ele retorna um erro dizendo que é necessario levantar o spring como modulo como vc fez…😦 acho que mataram o maven

        module name=”javax.api”/
        module name=”javax.jms.api”/
        module name=”javax.servlet.api”/

        se eu necessito apenas das anotation seria necessario colocar este modulos?

    william gueiros disse:
    27 de fevereiro de 2013 às 10:43

    sim eu fiz isso ele retorna um erro dizendo que é necessario levantar o spring como modulo como vc fez… acho que mataram o maven

    module name=”javax.api”/
    module name=”javax.jms.api”/
    module name=”javax.servlet.api”/

    se eu necessito apenas das anotation seria necessario colocar este modulos?

    william gueiros disse:
    28 de fevereiro de 2013 às 11:48

    pessoal fica a dica para quem esta passando por este processo
    existe um projeto que ajuda e muito a criar os modulos

    http://www.jboss.org/snowdrop

    tentei adaptalo para o spring 3.2 com sucesso mas apareciam alguns WAR a mais…
    entao parti para utilizar a estrutura como sugerida e deu certo..
    infelizmente rodei a aplicacao como sugerido neste artigo e algumas vezes o jboss ficava louco e subia minha aplicacao com inumeros erros…

    Espero ter ajudado a todos…

      Mauricio Magnani Jr respondido:
      1 de março de 2013 às 17:41

      Oi William vlw cara pela dica…. tenho ctza de que vai ajudar muito gente!

      Abs

    william gueiros disse:
    11 de março de 2013 às 15:12

    vamos la novamente.. consegui fazer o spring 3.2 funcionar como no POST mas o module.xml tive que aticar o JSF como dependente para conseguir que o spring.web funcionasse corretamente…

    module xmlns=”urn:jboss:module:1.0″ name=”org.springframework.spring”
    resources

    resource-root path=”aopalliance.jar”
    resource-root path=”aspectjrt.jar”
    resource-root path=”aspectjweaver.jar”
    resource-root path=”spring-beans-3.2.1.RELEASE.jar”
    resource-root path=”spring-context-3.2.1.RELEASE.jar”
    resource-root path=”spring-core-3.2.1.RELEASE.jar”
    resource-root path=”spring-orm-3.2.1.RELEASE.jar”
    resource-root path=”spring-web-3.2.1.RELEASE.jar”
    resource-root path=”spring-expression-3.2.1.RELEASE.jar”
    resource-root path=”spring-tx-3.2.1.RELEASE.jar”
    resource-root path=”spring-oxm-3.2.1.RELEASE.jar”

    resources
    dependencies

    module name=”javax.el.api”
    module name=”org.jboss.vfs”
    module name=”javax.annotation.api”
    module name=”org.apache.commons.logging”
    module name=”javax.servlet.api”
    module name=”javax.api”

    /dependencies

    ja o meu arquivo jboss-deployment-structure.xml tive que adicionar o JSF…ficando assim…

    jboss-deployment-structure
    deployment
    dependencies
    module name=”org.springframework.spring” /

    module name=”ch.qos.cal10n”/
    module name=”com.google.guava”/
    module name=”javax.enterprise.api”/
    module name=”javax.ejb.api”/
    module name=”javax.faces.api”/
    module name=”javax.interceptor.api”/
    module name=”javax.persistence.api”/
    module name=”javax.servlet.jsp.api”/
    module name=”javax.transaction.api”/
    module name=”org.javassist”/
    module name=”org.jboss.jandex”/
    module name=”org.jboss.staxmapper”/
    module name=”org.jboss.as.controller”/
    module name=”org.jboss.as.ee”/
    module name=”org.jboss.as.ejb3″/
    module name=”org.apache.commons.logging”/
    module name=”org.jboss.as.jpa”/
    module name=”org.jboss.as.naming”/
    module name=”org.jboss.as.server”/
    module name=”org.jboss.as.transactions”/
    module name=”org.jboss.as.web”/
    module name=”org.jboss.logging”/
    module name=”org.jboss.metadata”/
    module name=”org.jboss.modules”/
    module name=”org.jboss.msc”/
    module name=”org.slf4j”/
    module name=”org.slf4j.ext”/

    /dependencies
    /deployment
    /jboss-deployment-structure

    so esta dando um WAN

    15:06:12,760 WARN *org.jboss.as.ee* (MSC service thread 1-2) JBAS011006: Not installing optional component org.springframework.web.context.request.async.StandardServletAsyncWebRequest due to exception: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011054: Could not find default constructor for class org.springframework.web.context.request.async.StandardServletAsyncWebRequest
    at org.jboss.as.ee.component.ComponentDescription$DefaultComponentConfigurator.configure(ComponentDescription.java:606)
    at org.jboss.as.ee.component.deployers.EEModuleConfigurationProcessor.deploy(EEModuleConfigurationProcessor.java:81)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_10]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_10]
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_10]

    ja procurei muito como resolver este problema e nao acho a solucao…
    por acaso vc ja viu este WAN???

      Mauricio Magnani Jr respondido:
      11 de março de 2013 às 16:12

      Sim estou tendo o mesmo WARN… dei uma pesquisada na comunidade me disseram que era para ignorar… hehehe mas ainda nao sei ao certo o que está causando isso!!!

      16:12:09,613 WARN [org.jboss.as.ee] (MSC service thread 1-8) JBAS011006: Not installing optional component org.springframework.web.context.request.async.StandardServletAsyncWebRequest due to exception: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011054: Could not find default constructor for class org.springframework.web.context.request.async.StandardServletAsyncWebRequest
      at org.jboss.as.ee.component.ComponentDescription$DefaultComponentConfigurator.configure(ComponentDescription.java:606)
      at org.jboss.as.ee.component.deployers.EEModuleConfigurationProcessor.deploy(EEModuleConfigurationProcessor.java:81)

      Estamos juntos nessa hahaha!

      Abs

    marcelo disse:
    2 de abril de 2013 às 15:18

    Testei ambos os métodos e não consegui fazer funcionar com o spring 3.0.7, seguem meus arquivos de configuração.

    module.xml

    jboss-deployment-structrue.xml

    Estou sempre com o erro:

    SAXParseException; lineNumber: 4; columnNumber: 128; cvc-elt.1: Cannot find the declaration of element ‘beans’.

      Mauricio Magnani Jr respondido:
      2 de abril de 2013 às 16:51

      E ai Marcelo… coloca os aquivos ai em algum lugar para eu poder dar uma olhada…
      pode ser no http://pastebin.com/

      infelizmente aqui nos comentário não conseguimos colocar .xml:/

      Abs

        marcelo disse:
        2 de abril de 2013 às 17:00

        Fala Mauricio. Cara, testei com seu exemplo e depois testei com o exemplo do amigo acima. Este é o jboss-deployment http://pastebin.com/6kb2NL0x. Usei este módulo do spring http://pastebin.com/aMmdmTVZ criado devidamente dentro da pasta module do jboss as 7.1.1.Final. Testei também com o xml module do colega acima e a mesma coisa ocorreu. Sempre ele dá o mesmo erro Caused by: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 132; cvc-elt.1: Cannot find the declaration of element ‘beans’. É neste arquivo q ele aponta erro http://pastebin.com/3jQHYgRg. Estou tentando eliminar estes jars de dentro de minha aplicação usando module mas está difícil. Dá pra me ajudar?

        Mauricio Magnani Jr respondido:
        2 de abril de 2013 às 17:15

        OK Aparentemente é isso mesmo mas olhando assim é mais dificil.. rsrs

        Vou testar hoje a noite em casa!

        Abs

        Mauricio Magnani Jr respondido:
        2 de abril de 2013 às 18:37

        A mais uma coisas… Qual a versão do JBoss? Quero testar com a mesma versão que vc está utilizando!

        marcelo disse:
        2 de abril de 2013 às 18:45

        Jboss 7.1.1.Final

        Mauricio Magnani Jr respondido:
        2 de abril de 2013 às 22:04

        E ai Marcelo blz?

        Cara testei aqui e nao consegui simular esse problema😦

        Voce poderia criar um .war qualquer para eu poder terstar… nem precisa ter código apenas os arquivos de configuração….

        Abs

    marcelo disse:
    3 de abril de 2013 às 8:45

    Te enviei por email um projeto de testes já que por aqui não dá.

    Artur Galeno disse:
    1 de agosto de 2013 às 16:40

    Pessoal realizei os procedimentos mas estou com um erro “No bean named ‘springSecurityFilterChain’ is defined”. Alguém sabe a que esse erro está relacionado?

    E a título de informação, por quê o diretório tem que ser exatamente ..\spring\main?

    Obrigado

      Marcelo Daniel Sales disse:
      19 de agosto de 2013 às 8:18

      Arthur, posta como você está configurando os módulos e o stack trace das exceções que estás tendo. Com relação ao nome do diretório você pode usar o que você desejar, apenas lembre-se que esta estrutura impactará no nome do módulo no final.

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