9 Replies Latest reply on Oct 31, 2013 11:50 AM by paulohbmelo

    Mudar context-root de EJB no JBoss 7/EAP 6.1

    paulohbmelo

      Fala aí pessoal, blz?

       

      Estou fazendo a migração de um EJB (versão 3 que estava no 4.2.3) para o EAP 6.1 porém, estou tendo um problema com o JNDI-name da "criança". Pelo que pesquisei, a especificação Java EE 6 fala que o nome do contexto (context-root) deve ser o nome do arquivo sem a extensão porém, no jboss uma forma de alterar isso em aplicações web, é colocar o context-root no arquivo jboss-web.xml. Porém estou fazendo deploy de um EAR que contém um ejb e, como esse EAR (e também o EJB) são gerados pelo maven, os mesmo vem com o versionamento etc. Nada mais do que correto. Mas.... Como acabei de dizer acima, o JBoss segue a especificação e sobe o EAR e o EJB com o seus nomes completos. Daí pensei: "bom eu altero o context-root deles e pronto!" Foi onde comecei a pesquisar e não achei nada que funcione. Achei um post de um colega porém, acredito que a solução dele só funcione para WebService sob EJB pois, fiz o teste e não funcionou, segue o post: http://whirlysworld.blogspot.com.br/2012/03/jboss-as-7-how-to-set-context-root-for.html

       

      Então, gostaria de saber dos senhores, se já passaram por algo semelhante e como resolveram. Se puderem ajudar agradeço.

       

      Obs.: O componente EJB está funcionando e se eu colocar o nome sugerido pelo JBoss (nome completo, com versionamento etc.) funciona numa boa.

       

      Obrigado!

        • 1. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
          luan.cestari

          Oi Paulo,

           

          Acredito que não necessariamente o contexto web que você está alterando deve estar ligado com o nome que irá lá no JNDI name (por isso ocorre o erro ). Para você seria muito complicado alterar o nome do arquivo?  Você usa maven?

           

          Atenciosamente,

          Luan

          1 of 1 people found this helpful
          • 2. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
            paulohbmelo

            Olá Luan, obrigado pela resposta!

             

            Sim usamos o maven e inclusive já fiz uns testes com o finalName porém, como usamos o Hudson para fazer deploy, acaba que ele pega a dependência do ear (no caso o ejb) no .m2 para fazer o deploy. Daí pega com a versão. Mas estou achando estranho não ter como fazer isso pois, nas versões anteriores tinha como fazer com o jboss.xml se não me engno.

             

             

            Paz e bem!

            • 3. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
              mauriciomag

              Oi Paulo tudo bom?

               

              Dentro de myapp.ear/META-INF/application.xml faça algo como abaixo:

               

                 <module>

                    <web>

                       <web-uri>myapp.war</web-uri>

                       <context-root>/meucontexto</context-root>

                    </web>

                 </module>

               

              Abraços

              • 4. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
                paulohbmelo

                Olá Maurício!

                 

                Mas isso muda o context-root do war e não do EJB. Nesse caso nem war eu tenho em meu EAR. Preciso mudar o context-root do EJB.

                 

                Mas obrigado pela resposta.

                • 5. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
                  mauriciomag

                  Desculpe entendi errado.... to num correria geral... eu vou reler a questão e dar uma resposta se encontrar ainda hoje mais a noite.

                   

                  Abs

                  • 6. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
                    fabioqb

                    Tá na mão.

                     

                    <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-ear-plugin</artifactId>
                      <version>2.8</version>
                      <configuration>
                      <defaultJavaBundleDir>lib</defaultJavaBundleDir>
                      <fileNameMapping>no-version-for-ejb</fileNameMapping>
                      <modules>
                      <ejbModule>
                      <groupId>br.com.seuGroupID</groupId>
                      <artifactId>seu-ejb</artifactId>
                      </ejbModule>
                      </modules>
                      </configuration>
                    </plugin>
                    
                    • 7. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
                      paulohbmelo

                      Olá Fábio, isso mesmo!! Funcionou redondo! Obrigado!

                       

                      É uma pena não ter isso no JBoss (pelo menos não achei) mas, pelo menos tem uma alternativa com o Maven.

                       

                      Ah! O valor da entrada fileNameMapping é no-version (os outros valores são standard e full). Depois corrige na sua resposta.


                      Obrigado pessoal!

                      • 8. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
                        fabioqb

                        Outra maneira SIMPLES é, coloca a tag abaixo logo no início da tag <build>

                         

                        <finalName>seu_artefato_final</finalName>

                         

                        Se o projeto for WAR, vai gerar um arquivo seu_artefato_final.war

                         

                        Se o projeto for EJB, vai gerar um arquivo seu_artefato_final.jar

                        • 9. Re: Mudar context-root de EJB no JBoss 7/EAP 6.1
                          paulohbmelo

                          Olá Fábio!

                           

                          Só que nesse caso não funciona. O que tenho é um EJB dentro de um EAR. E quando o EAR está sendo cronstruído, ele pega o EJB do .m2 (onde está com o nome completo) e não do target (onde o finalName gera o arquivo sem a versão). Esse atributo fileNameMapping foi criado justamente para isso. Então, vc pode escolher com o nome completo - full - (nome com artfact id, group id e version) ou standard (como precisei).


                          O finalName realmente funciona porém, não aplica às dependências.