Tem como usar classe do Módulo EJB no Módulo Web usando injeção?

4 respostas
paulork

Explicando melhor o titulo:

Tenho um módulo EJB (jar separado), tenho um módulo java normal (jar separado) e tenho um módulo web (war separado).

- ejb.jar:

  - Teste.java (Teste extends ITeste / @Stateless)

- interfaces.jar:

  - ITeste.java (Interface anotada como @Local)

- app.war:

  - TesteController.java (ITeste ejbTeste = serviceLocator.get(ITeste.class) / ou / Teste teste = (Teste) serviceLocator.get(ITeste.class));

esse aí acima é meu cenário, tem como eu usar injeção via @EJB ou @Inject (cdi) para ter esse bean no meu controller em vez de usar o Service Locator? Ou só via lookup mesmo?

Já vi muito falando em “ejb-jar.xml”… já vi gente dizendo pra usar EJB dentro do pacote WAR (que não é o caso, pois quero ele justamente fora para poder dar deploy/redeploy sem restartar a aplicação web)… vai aparecer assim na lista de aplicações do Glassfish:

glassfish:
[i]- ejb

  • app[/i]

já vi gente dizendo que funciona só com anotação (@EJB ou @Inject) se usando EJB 3.1 ou +… e por aí vai… mas o fato que não estou conseguindo usar de forma diferente do que exposto acima…

E aí, tem como usar injeção nesse caso? Sim: como? Não: porquê?

Abraço

4 Respostas

AnjoVingador

Eu uso quase essa estrutura, só tirando o interfaces.jar, com EJB3.1 e funciona perfeitamente com a anotação @EJB, mas funcionaria com a @Inject também.

paulork

E onde estou errando?

Também pensei que deveria funcionar, mas sem interfaces? como as classes do seu projeto web tem conhecimento das classse no seu projeto ejb? vc adiciona o projeto ejb no projeto web como biblioteca?

você teve que adicionar algum lib extra (mais atualizada talvez) pra funcionar? tipo, weld, ou fazer alguma configuração extra no glassfish?

AnjoVingador

As interfaces existem só não estão separadas em outro jar. Estão no jar do ejb. Eu uso o CDI junto com o projeto, no servidor wildfly, mas acredito que deva funcionar no glassfish também.

paulork

Hmm, então na verdade você adiciona o Pacote EJB (jar com EJB e interfaces) como biblioteca no projeto web e implanta ambos no Wildfly… se você olhar no Wildfly o que está implantado aparece algo assim:

  • projeto web (nome qualquer)
  • projeto ejb (nome qualquer)

e se precisar, vc consegue fazer undeploy/redeploy somento do pacote EJB, mantendo o projeto web? é isso?

Criado 6 de julho de 2015
Ultima resposta 25 de ago. de 2015
Respostas 4
Participantes 2