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

4 respostas
P

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

A

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.

P

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?

A

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.

P

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