O Terror do EJB

Bom primeiro feliz natal para todos!

Deixa primeiro eu esclarecer as coisas, estou arquitetando as conexões ao um grande banco de dados, e para isso devo usar Hibernate, e paralelo a ele devo usar o EJB, e aqui entra um grande buraco negro no meu entendimento, estudei muiiito EJB esses últimos meses, mas ainda nem entendi muito bem a sua utilidade, o que dificulta bastante o andar das coisas.

O problema atual é JBOSS, criei um ant para compilar e fazer o deploy das minhas classes, ainda que eu não tenha entendido como eu faria aquilo sem o ant, mas sim o ant faz o deploy e o JBOSS reconhece, mas todos os lookup que eu realizo retornam o erro:

javax.naming.NameNotFoundException: myEjb not bound

Tentei com vários EJBs diferentes, e todos retornam o mesmo erro só mudando o nome do EJB que não Bound.

(Muito)Grato à aqueles que me ajudarem.

PS: Estudei tambem o Spring, mas (apesar de não guardar gosto pelo EJB) escolhi pelo EJB.

você criou o jndi.properties no seu diretório src do seu cliente?

Ele deve estar +ou- assim:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

Feliz Natal Pra Voce TB Cara…

Bom Primeira Coisa…eu nao expertise em EJB , ,as acho q posso te ajudar .,onde ele disse que nao consegue dar lookup certo ??

bom…primeiro onde esta seu ejb???

em que pasta do jboss eles estao???

[quote=Figuera]Bom primeiro feliz natal para todos!

Deixa primeiro eu esclarecer as coisas, estou arquitetando as conexões ao um grande banco de dados, e para isso devo usar Hibernate, e paralelo a ele devo usar o EJB, e aqui entra um grande buraco negro no meu entendimento, estudei muiiito EJB esses últimos meses, mas ainda nem entendi muito bem a sua utilidade, o que dificulta bastante o andar das coisas.

O problema atual é JBOSS, criei um ant para compilar e fazer o deploy das minhas classes, ainda que eu não tenha entendido como eu faria aquilo sem o ant, mas sim o ant faz o deploy e o JBOSS reconhece, mas todos os lookup que eu realizo retornam o erro:

javax.naming.NameNotFoundException: myEjb not bound

Tentei com vários EJBs diferentes, e todos retornam o mesmo erro só mudando o nome do EJB que não Bound.

(Muito)Grato à aqueles que me ajudarem.

PS: Estudei tambem o Spring, mas (apesar de não guardar gosto pelo EJB) escolhi pelo EJB.[/quote]

Fazer o deploy no JBoss é muito simples, crie o jar e copie para a pasta de servidor ({JBoss}/server/default por exemplo)
É isso que o ant faz.
Agora, é preciso configurar as coisas direito como os arquivos descritores. Como vc não falou que versão do JBoss nem do EJB usa não dá para dizer muito. EJB exige alguma configuração e o uso correto de JNDI para recuperar os objetos.

A vantagem do EJB é ser um padrão que divide as tarefas de servidor em partes: o Entity Beans ( que na versão 3 usam JPA : esqueça Hibernate) e os (StateFull/Stateless) SessionBeans que servem para criar algoritmos que fazem coisas usandos os entityBeans; E tem outros serviços como o MessageBean, mas os Entiy e os Session são os principais.

procure informações no www.jboss.org sobre como configurar o jboss

JBoos não é simples no primeiro uso, com o tempo vc se habitua.

Bom,

Primeiro gosto bastante do Hibernate, porque ele não deve ser mais usado?

Estou usando EJB 3.0 e JBOSS 4.2.2.

O endereço no JBOSS deveria ser : myEjb/PacoteCursoBean/local.

A parte de fazer deploy eu entendi, achei bem simples, mas como se cria o arquivo *.ejb na pasta jar?

Boa Noite de Natal.

Consegui arrumar o problema do JBOSS, no fim era apenas um erro no processo de deploy, mas como sempre cada erro resolvido me traz mas 3 novas dúvidas:

  • A mais antiga, como se cria o arquivo *.ejb3 que será copiado para a pasta deploy do JBOSS, eu copiei um ant que cria ela mas não entendi como funciona.

  • Agora o mais critico, estou seguindo um tutorial, faz o seguinte:

InitialContext ctx = getInitialContext();
PacoteCursoRemote pacote = (PacoteCursoRemote) ctx.lookup("myEjb/PacoteCursoBean/remote");	

PacoteCursoRemote é um interface, que implementa os metodos do PacoteCursoBean, qual seria a diferença se eu chamasse simplesmente:

PacoteCursoBean pacote = new PacoteCursoBean();

Testei com os 2, e o metodo retorno o mesmo resultadado, chamando o metodo sem EJB é indiscutivelmente mais simples, porém o que muda com eu usando o EJB? (PacoteCursoBean é um Session Bean Stateful)

Fui claro?

ao contrário né?

PacoteCursoBean implementa a interface PacoteCursoRemote

bom… eu acho q a diferença é digamos a “abordagem” da coisa:

quando vc instancia o PacoteCursoBean, vc torna a sua classe dependente da implementação…

qdo vc faz lookup a sua classe fica independente da implementação, ficando a cargo do JBOSS achar a implementação disponível…

e geralmente, qdo vc trabalha com interfaces + implementações… o q vc quer é justamente isso: independencia em relação à implementação escolhida!

além disso, se o Session Bean tem akeles recursos injetados por annotations (EntityManager e outros Beans), acho q eles só funcionam (só são injetados) qdo usa o lookup… mas talvez tenha jeito de funcionar sem o lookup, ou seja, a grande vantagem é mesmo o q falei no início…

mas tb não sou nenhum expert… só li alguns livros e gosto de pesquisar…

abraços e feliz natal :smiley: