Minha dúvida é a seguinte: quando devo utilizar EJB em um projeto?
Eu uso EJBs 3.1 nas minhas Apps Web. Hoje está muito produtivo trabalhar com EJB. Simples anotações como @Stateless, @Local, @Remote. Eu os esponho como camada de Serviço e nele eu injeto EntityManager e meus Repositórios. Os Containers possuem um gerenciamento bem inteligente dos EJBs, quanto a pool de instancia, concorrencia, e segurança. Uma das vantagens que vejo é a possibilidade de componentização. Utilizando o JAAS, voce pode trabalhar facilmente com segurança, usando somente anotações. Voce pode acessar seus EJBs remotamente, caso queira só fazer um lookup. Ou sequiser pode expor como Webservice.
Não vejo utilidade em, por exemplo, em sites.
Se voce for desenvolver uma App Web com JEE, mande bala nos EJBs. Ou se for Desktop, pode combinar Swing + EJB.
Mas como sei se o projeto precisa utilizar ejb?
Eu acho que depende do projeto. Se você for fazer um projeto simples que não ve um crescimento dele onde ele vai ser a mesma coisa pra sempre. Não há necessidade de utilizar EJB’s.
Mas em projetos onde você ve que o projeto tende a crescer, é recomendavel a utilização de EJB’s.
Esse é meu ponto de vista, não quer dizer que isso seja a lei.
Teria como quantificar o crescimento do projeto? Que dimensões pode tomar?
Infelizmente não sei te dizer. Aqui por exemplo eu estou fazendo um projeto que é um Tracker, onde controlaremos versões dos outros projetos, usuarios podem abrir chamados, serão designadas tarefas para os colaboradores através dele também. Por hora foi o que achamos de Casos de uso para o projeto, mas com visão de que essa é a versão 1.0 do projeto.
Então foi escolhido o uso de EJB.
Outra coisa que descobri pelas minhas “andanças” na internet é que caso você deseje uma “solução distribuida”.
Muito obrigado pela ajuda!!!
Um abraço, tudo de bom!!!
Eu penso que é uma decisão de arquitetura que voce vai adotar no seu sistema.
Voce vai criar componetes (EJBs) que são gerenciados pelo Container. Isso significa que voce nao precisa se preocupar com Transações, Ciclo de Vida, Segurança e Concorrencia.
Se voce estiver num ambiente JEE, pode se beneficiar dos EJBs. Usando junto com JPA, voce pode simplesmente injetar um EntityManager gerenciado pelo Container e deixar o mesmo cuidar das transações.
Algumas questoes como Segurança se destaca na escolha de EJB na sua arquitetura.
Se seu projeto precisa de Escalabilidade por exemplo, seria boa escolha.
Além disso ele pode trabalhar com Caching e Messagem Assincronica.
Questão interessante. Sabe quando eu uso EJB? Sempre.
Já foi o tempo que EJB era dificil e complicado. Lembro que quando eu comecei a trabalhar com J2EE, lá me meados de 1999, tinhamos que criar as interfaces, implementação, homes, depois tinha que gerar os stubs e skeletons… fazer deploy de uma aplicação somente com ferramentas, pois dava muito trabalho. Hoje em dia para você ter um EJB basta pegar uma simples classe que anotar com @Stateless/@Stateful. Muito se fala do Spring ser um container leve, mas e o EJB a partir do JEE5 não é a mesma coisa que uma classe do Spring? Ou seja, fazer um EJB é muito fácil.
EJB não é só para projetos grandes. Ele pode/deve ser usado em projetos grandes, mas não apenas neles. Existe a partir do JEE6 o EJB Light, que nada mais é que uma classe que você anota com @Stateless/@Stateful e @LocalBean. Dessa forma você não precisa ter uma interface, basta apenas a implementação; e você pode fazer o deploy em um simples war, não precisando que o seu projeto tenha um EAR e tenha um módulo apenas para as classes EJBs. Se você usar a stack completa do JEE você poderá injetar seus EJBs dentro de backing-beans, servlets e todo e qualquer bean managed.
O container EJB é muito inteligente, e sabe muito bem controlar o ciclo de vida do EJB. Ele saberá injetar todo e qualquer recurso sempre que precisar, ele saberá controlar as transações, fazer o controle de acesso através de @RollesAllowet/etc e inclusive se um dia o projeto crescrer, você pode apenas criar as interfaces remotas/locais e clusterizar facilmente o projeto.
Você pode também criar webservices, como já foi dito, bastando anotar seu Stateless/Stateful bean com @Webservice. Você pode consumir um serviço remoto bastanto injetar algum serviço no EJB (tem que criar os stubs do webservice via JAXB).
Mas para mim a maior vantagem é de você usar o core da plataforma. Eu gosto de usar as coisas que a API padrão fornece, exceto como no caso do JSF que eu não gosto. Dessa forma eu tenho a vantagem de fazer um EJB e poder usa-lo em qualquer appserver que eu quiser. Se meu cliente quiser usar um JBoss, vai funcionar. Se daqui há um ano ele quiser trocar para rodar em um Weblogic, basta fazer deploy lá e tudo vai estar funcionando.
Enfim, com EJB você pode ter um stack completo para sistemas grandes, e também um stack light para usar em projetos pequenos. Eu, particularmente, não abro mão de EJB para nada. Hoje os appservers estão com performance tão boa que a diferença entre rodar um Glassfish ou JBoss ante a um Tomcat ou Jetty é minima (quando bem configurados, claro).
[quote=garcia-jj]Questão interessante. Sabe quando eu uso EJB? Sempre.
Já foi o tempo que EJB era dificil e complicado. Lembro que quando eu comecei a trabalhar com J2EE, lá me meados de 1999, tinhamos que criar as interfaces, implementação, homes, depois tinha que gerar os stubs e skeletons… fazer deploy de uma aplicação somente com ferramentas, pois dava muito trabalho. Hoje em dia para você ter um EJB basta pegar uma simples classe que anotar com @Stateless/@Stateful. Muito se fala do Spring ser um container leve, mas e o EJB a partir do JEE5 não é a mesma coisa que uma classe do Spring? Ou seja, fazer um EJB é muito fácil.
EJB não é só para projetos grandes. Ele pode/deve ser usado em projetos grandes, mas não apenas neles. Existe a partir do JEE6 o EJB Light, que nada mais é que uma classe que você anota com @Stateless/@Stateful e @LocalBean. Dessa forma você não precisa ter uma interface, basta apenas a implementação; e você pode fazer o deploy em um simples war, não precisando que o seu projeto tenha um EAR e tenha um módulo apenas para as classes EJBs. Se você usar a stack completa do JEE você poderá injetar seus EJBs dentro de backing-beans, servlets e todo e qualquer bean managed.
O container EJB é muito inteligente, e sabe muito bem controlar o ciclo de vida do EJB. Ele saberá injetar todo e qualquer recurso sempre que precisar, ele saberá controlar as transações, fazer o controle de acesso através de @RollesAllowet/etc e inclusive se um dia o projeto crescrer, você pode apenas criar as interfaces remotas/locais e clusterizar facilmente o projeto.
Você pode também criar webservices, como já foi dito, bastando anotar seu Stateless/Stateful bean com @Webservice. Você pode consumir um serviço remoto bastanto injetar algum serviço no EJB (tem que criar os stubs do webservice via JAXB).
Mas para mim a maior vantagem é de você usar o core da plataforma. Eu gosto de usar as coisas que a API padrão fornece, exceto como no caso do JSF que eu não gosto. Dessa forma eu tenho a vantagem de fazer um EJB e poder usa-lo em qualquer appserver que eu quiser. Se meu cliente quiser usar um JBoss, vai funcionar. Se daqui há um ano ele quiser trocar para rodar em um Weblogic, basta fazer deploy lá e tudo vai estar funcionando.
Enfim, com EJB você pode ter um stack completo para sistemas grandes, e também um stack light para usar em projetos pequenos. Eu, particularmente, não abro mão de EJB para nada. Hoje os appservers estão com performance tão boa que a diferença entre rodar um Glassfish ou JBoss ante a um Tomcat ou Jetty é minima (quando bem configurados, claro). [/quote]
Falou tudo… ainda mais com Jboss 7 aí, que está super rápido.
O que muita gente questionava é que, quase tudo isso poderia ser feito utilizando spring, e rodar num Tomcat. Pois no Spring também tem a injeção de dependencia, Spring security que controla a segurança, serviços de mensagens, gerenciador de transações e outros. Assim como Seam framework. Mas pq não usar logo a especificação!? Eu prefiro!
Gostei bastante do EJB 3.1 com JSF2, CDI, Primefaces e JPA2.
na minha opinião a resposta para “quando utilizar?” é bem simples, quando der para utilizar (basta usar algum EJB container) e você não esteja usando algum concorrente para prover os serviços que ele provem (como o spring). Não que os concorrentes sejam melhores(pelo amor de deus, não afirmei nem neguei isso), mas sim que não precisa usar ambos, ou usa um ou outro, não tem por que usar os dois.
[quote=psyltrance]Falou tudo… ainda mais com Jboss 7 aí, que está super rápido.
O que muita gente questionava é que, quase tudo isso poderia ser feito utilizando spring, e rodar num Tomcat. Pois no Spring também tem a injeção de dependencia, Spring security que controla a segurança, serviços de mensagens, gerenciador de transações e outros. Assim como Seam framework. Mas pq não usar logo a especificação!? Eu prefiro!
Gostei bastante do EJB 3.1 com JSF2, CDI, Primefaces e JPA2[/quote]
EJBs são maravilhosos porem, na minha opinião até o momento, utilizar apenas se for necessário uma clusterização ou um controle mais rigoroso em cima de uma estrutura statefull.
É o velho papo do canhão para matar mosquito, em livros sobre processos àgeis sempre tem alguem dizendo: Utilize apenas o necessário para atender os requisitos do projeto. A maior parte dos projetos podem ser resolvidos com o Spring (ou algo similar) utilizando webserver ou não. Um AppServer dificilmente será mais otimizado que o Spring + Web Server. Logo de cara o App Server já possui um Web Server em seu interior sem falar nos outros containers.
Se configurar bem for desligar tudo quanto for recurso do App. Server então é melhor utilizar a parte que interessa fora, não vai perder tempo configurando coisas que não interessa; isso sem falar no uso de memória.
E a curva de aprendizado?
Onde trabalho tem uma aplicação swing feita (por uma equipe anterior - que não está mais aqui; adivinha o porque.) com EJB, leva uns 15 segundos para ser executada; fiz um similar com muito mais funcionalidades que executa em 5 segundos as vezes menos.
Saber qual solução é mais adequada para um problema não é uma tarefa simples.
flws
Não sei o quanto agradecer você por esse debate ! ! !
Tirou todas as minhas duvidas
Tentarei ultilizar EJB daqui em diante…
Posso montar um projeto ultilizando MAVEN + JBOSS + EJB + SPRING SECURITY + JSF + HIBERNATE 4 ???
[OFF]
Aonde eu consigo livros ou alunas didaticas sobre como ultilizar EJB e como montar a sua estrutura no SRC padronizada ???
Sempre usei o MVC design patter , agora vou pular um pouco para o EJB [/OFF]
Velho cuidado pra não sair misturando tudo sem saber o que são efetivamente… se voce faz essa pergunta é porque provavelmente não tem muita noção do papel de cada um no projeto. EJB+Spring? Pra que misturar 2 containers e aumentar o overhead de processamento? Escolha um ou outro, pelo menos é o que eu faria.
TiD, ele quis dizer “Spring security” que é equivalente ao JAAS na plataforma Java EE.
Mas teu pensamento está correto: para usar o Spring Security precisa do Spring core. Então neste caso é melhor adotar algo como EJB e JAAS ou Spring + Spring Security.
+1
Então to caindo fora do EJB , tentei fazer uns projetinhos ultilizando crud e sempre dava erro …
O EJB funciona assim :
-Eu tenho um EJB e um projeto e interligo os 2 ???
-nisso eu crio um projeto ejb e depois eu crio um projeto normal e interligo eles ???
http://uaihebert.com/aplicacao-web-completa-jsf-ejb-jpa-jaas/
Tentei fazer esse passo a passo , são tantas configurações que eu me perdir …
O tutor usa PostGree e eu uso Mysql …
Aii Cria um Project EJB e depois cria um Dynamic Web Project …
Você pode usar o EJB lite, onde tudo está em um único projeto WAR, ou o EJB full, que roda em projeto separado.
Dê uma lida na documentação, em especial no Java EE tutorial. É bem fácil de entender, e inclusive tem uns exemplos bem legais de aprender.
Sem qr ser muito comodo !
Vc tem alguns tutoriais basicos com EJB ???
Não sou tão leigo assim, Java EE eu sei ¬¬"
Só não sei implementar EJB, que agora todas empresas qrem
O Java EE tutorial é bem básico, tanto que não tem exemplos mais complexos. Qual a dificuldade que você teve?
Para usar um EJB basicamente basta anotar com @Stateless ou @Stateful e depois injeta-lo usando @EJB.
Talvex expondo suas dificuldades seja mais fácil te ajudar.
garcia jj,
Esse forum ja fechou [RESOLVIDO] …
Para nos não tomarmos um esporro , vamos conversar via e-mail ou algo do tipo !!!
O Ejb em si é so as annotations , blza e enqto ao Jboss com suas persistencias ???
Aii complica xD
Sempre usei tomcat e projetos normais do padrao desse link !
Olha o meu padrão de projeto >>>>http://www.guj.com.br/java/306539-como-transferir-mvc-para-ejb-resolvido