EJB em desuso ... em detrimento dos Pojos? ainda não entendi!
27 respostas
S
sandeco
Olá pessoal
Lendo algumas mensagens aqui no fórum… o pessoal fala que o EJB está em desuso… porém comprei um livro sobre Patterns o “Core J2EE Patterns” que fala bastante do EJB e suas implementações.
Já ouvi falar aqui no fórum sobre POJOS (Plain Old Java Objetc) e em outro livro que comprei o “Hibernate in action” fala muito dele
Vi em algumas mensagens do fórum e que os POJOs estariam subtituindo o EJB…
Pois bem… alguém pode dar uma luz…
… qual a diferença entre eles?.. eles tem alguma coisa a ver com o outro?.. quem está em desuso ou… em que casos são usados
Ajudem-me sobre este tópico… pois quero direcionar meu estudo daqui para frente.
Um grande abraço a todos
ps… se não quiserem escrever podem direcionar links… agradeço
O Core J2EE Patterns eh um livro antigasso, da epoca em que a comunidade Java achava bonito ser complicado.
Se quiser estudar alguma coisa util daqui pra frente, faca uma cerimoniazinha pra queimar o seu Core J2EE Patterns, e aprenda Hibernate e JPA.
S
sandeco
CV …
Hibernate eu já aprendi… legal demais… mas o que é JPA?
S
saoj
+1
A pergunta é porque vc precisa de EJB? Provavelmente não precisa… No passado, porque algumas empresas queriam vender application servers de milhares de dólares por processador e consultorias que queriam vender projetos de milhares de dólares é que ele foi enfiado goela abaixo da comunidade Java. Lamentável…
S
sandeco
ah…
Também li neste feriado de carnaval … o DDD em inglês… muito bom… mas pena que não tinha exemplos
em códigos para exemplificar
S
sandeco
exemplos para exemplificar… que redundância meu Deus
S
sandeco
Pois é … e tem um pessoal aqui no fórum que
Está recomendando o livro sobre Enterprise JavaBeans 3
sandeco, quando for acrescentar algo a sua resposta e ela foi a ultima do post, edite ela. Evite o flood.
Att,
Renan
S
saoj
Mas EJB continua sendo desnecessário na maioria dos casos.
E se vc quer chamadas remotas, use web services via HTTP = REST, ou xFire ou até mesmo SOAP.
Application server é um contra-senso, na minha opinião. Mas tem gente que acha que eles são fundamentais e “abstraem” complexidade.
A complexidade que eles abstraem não é mais complexidade a um par de anos e a maneira com que eles abstraem é péssima.
Minha opinião pessoal, ok?
Alguém me corrija se há outras opções, mas eu só usaria EJB para mensagens assíncronas. Não porque eu acho bom, mas porque a complexidade de desenvolver o seu próprio queue de mensagens é realmente grande!
D
danieldestro
Eu pensava assim até EJB 2.1 Com a versão 3.0 e agora 3.1 eu uso e recomendo.
Fora que hoje, com a nova especificação, EJB são “praticamente” POJOS. Facilita.
S
saoj
Eu acho que o conceito EJB em si é desnecessário! O que vc ganha com ele?
Só consigo imaginar duas coisas: cluster (vide Terracota e JGroups) e mensagens assíncronas (vide ???)
São poucos os sistemas que justitifcam o uso de chamadas remotas (sistemas distribuídos) e ainda mais raros os sistemas que justificam o uso mensagens assíncronas. Existem mas são a exceção e não a regra!
D
danieldestro
Hoje estou em um grande projeto onde sem EJB seria “praticamente impossível”.
S
saoj
Hoje estou em um grande projeto onde sem EJB seria “praticamente impossível”.
Deve ser um projeto especial (exceção e não a regra).
Mas por curiosidade, o que vc utiliza nele que não poderia ter sem EJB ? Mensagens assíncronas? Cluster? Chamadas remotas?
Tirando o cluster, porque vc precisa de mensagens assincronas e chamadas remotas? Deve ser um sistemas realmente distribuído e que precisa realmente ser distribuído. Então se vc estiver utilizando mensagens assíncronas tudo bem. Cluster, talvez. Chamadas remotas não sei…
D
danieldestro
Sistema distribuído. Hoje (ainda não implantamos em produção) estamos com apenas uma instância rodando os sistemas, mas há previsão de distribuir por nós/clusters.
Fora que o modelo de desenvolvimento fez com quem EJB fosse uma solução viável. São 5 empresas fazendo partes do mesmo sistema. Não faria sentido nenhuma usar WebServices para comunicar um pedaço com outro.
S
saoj
Demorei algum tempo para entender o que é realmente um sistema distribuído. Acredito que um sistema distribuído é um sistema onde vários módulos independentes (ou outros sistemas) estão distribuídos em máquinas diferentes e precisam conversar entre si. Vc pode fazer essa conversa com mensagens assínconras ou chamadas remotas.
É esse o seu caso?
Quando vc falou do cluster, eu entendi que vc quer colocar o seu sistema (apenas um) em cluster com fail-over.
Essas “partes” do sistema vão rodar independentemente em máquinas diferentes e precisarão se comunicar entre si? Caso positivo então vc tem verdadeiramente um sistema distribuído.
A questão, interessante pelo menos pra mim, é que algumas vezes um sistema possui várias partes independentes, mas ele não precisa ser necessariamente distribuído. Eu só penso em distribuído quando eu penso assim: “Quero esse sistema rodando, separadamente e independentemente desse outro aqui.”
A
Adolfo_Rodrigues
saoj:
A questão, interessante pelo menos pra mim, é que algumas vezes um sistema possui várias partes independentes, mas ele não precisa ser necessariamente distribuído. Eu só penso em distribuído quando eu penso assim: “Quero esse sistema rodando, separadamente e independentemente desse outro aqui.”
Sérgio, eu já trabalhei num projeto em que a camada de apresentação e a camada de negócios de um mesmo sistema rodavam em máquinas separadas. Tinha esse requisito (acho que por questões de segurança da empresa), eram dois pacotes diferentes, rodando em máquinas diferentes. Acredito que seja mais um caso em que chamadas remotas se fazem uma boa opção.
S
saoj
Adolfo Rodrigues:
saoj:
A questão, interessante pelo menos pra mim, é que algumas vezes um sistema possui várias partes independentes, mas ele não precisa ser necessariamente distribuído. Eu só penso em distribuído quando eu penso assim: “Quero esse sistema rodando, separadamente e independentemente desse outro aqui.”
Sérgio, eu já trabalhei num projeto em que a camada de apresentação e a camada de negócios de um mesmo sistema rodavam em máquinas separadas. Tinha esse requisito (acho que por questões de segurança da empresa), eram dois pacotes diferentes, rodando em máquinas diferentes. Acredito que seja mais um caso em que chamadas remotas se fazem uma boa opção.
Verdade, mas vc usou EJB só pra isso? Eu acharia melhor usar RMI. Ou não?
A
Adolfo_Rodrigues
saoj:
Adolfo Rodrigues:
saoj:
A questão, interessante pelo menos pra mim, é que algumas vezes um sistema possui várias partes independentes, mas ele não precisa ser necessariamente distribuído. Eu só penso em distribuído quando eu penso assim: “Quero esse sistema rodando, separadamente e independentemente desse outro aqui.”
Sérgio, eu já trabalhei num projeto em que a camada de apresentação e a camada de negócios de um mesmo sistema rodavam em máquinas separadas. Tinha esse requisito (acho que por questões de segurança da empresa), eram dois pacotes diferentes, rodando em máquinas diferentes. Acredito que seja mais um caso em que chamadas remotas se fazem uma boa opção.
Verdade, mas vc usou EJB só pra isso? Eu acharia melhor usar RMI. Ou não?
O projeto era .NET, Sérgio, então nem tinha como usar EJB. Citei o projeto só para mostrar mais um caso em que chamadas remotas são uma boa pedida. E eu não tive nenhuma influência nas decisões arquiteturais. Era bem iniciante, inexperiente e trabalhava numa empresa de “3 letrinhas”. Só tinha visto sistemas construídos com EJB e, prum cara terminando a faculdade e sem qualquer experiência anterior na área, acreditava que só existia essa forma de se fazer uma boa aplicação. Se você pesquisar as minhas mensagens aqui no GUJ, vai ver que eu recomendei EJB prum monte de gente, só porque sabia que era possível fazer o que precisavam com esta tecnologia. Graças ao pessoal mais experiente aqui do GUJ e aos livros que tenho lido, hoje penso como você: são poucos os casos em que o uso de EJB é justificável. Em muitos casos, é possível ter arquiteturas mais simples e atender os requisitos.
D
danieldestro
Sim. Exatamente!
Existe, obviamente, uma interdependência entre cada componente, mas existem componentes independentes (camadas mais baixas) e as camadas adjacentes usam estes componentes e assim segue até a view.
Hoje, como eu disse, estão todos no mesmo balaio (app server/container/jvm), mas logo devem se espalhar fisicamente e não precisaremos mudar uma linha de código sequer.
E sobre RMI em detrimento ao EJB. Porque vou escreve algo já feito? Padrões! Ajudam muito na hora de trocar o pessoal (turn over) e continuar a manutenção no “mesmo ritmo”.
Olha o TCO (Total Cosf of Ownership) ai.
D
danieldestro
Só adicionando uma informação. Cada grupo de funcionalidade do meu sistema, eu chamei de serviço. Então tenho uma arquitetura “SOA”, feita com EJBs.
WebServices seriam inapropriados demais, então optamos por EJB mesmo. Fora a questão de controle transacional etc.
Os antigos EJB 2.0 realmente acrescentavam uma complexidade, na maioria das vezes desncesárias para projetos, porém agora com a nova especificação EJB 3.0 os próprios ejb’s agora são POJOs; veja os exemplos.
@RemotepublicinterfaceBankingService{publicvoiddeposit(intaccountId,floatamount);publicvoidwithdraw(intaccountId,floatamount);publicfloatgetBalance(intaccountId);publlicvoiddoServiceLogout();}@StatefulpublicclassBankingServiceBeanimplementsBankingService{publicvoiddeposit(intaccountId,floatamount){//Business logic to deposit the specified amount and update the balance}publicvoidwithdraw(intaccountId,floatamount){//Business logic to withdraw the desired amount and update the balance}publicfloatgetBalance(intaccountId){//Business logic to get the current balance}@RemovepublicvoiddoServiceLogout(){//Service completion and logout logic}}
Você pode notar que não é mais necessário estender ou implementar nenhuma classe e/ou inteface, vc precisa somente utilizar as devidas anotações;
Eu tb recomendo, especialmente EJB 3 + JPA; Mistura “explosiva”; hehehehehehe
E que tal SEAM + EJB3 + JPA!!!
As coisas melhoraram muito, só acho uma pena que JEE 5 ainda seja pouco utilizado pelas empresas a meu ver.
J
JMan
Hoje estou em um grande projeto onde sem EJB seria “praticamente impossível”.
Deve ser um projeto especial (exceção e não a regra).
Mas por curiosidade, o que vc utiliza nele que não poderia ter sem EJB ? Mensagens assíncronas? Cluster? Chamadas remotas?
Tirando o cluster, porque vc precisa de mensagens assincronas e chamadas remotas? Deve ser um sistemas realmente distribuído e que precisa realmente ser distribuído. Então se vc estiver utilizando mensagens assíncronas tudo bem. Cluster, talvez. Chamadas remotas não sei…
Depende, eu hoje, mesmo que não seja preciso trabalhar em um ambiente distribuido, ou com serviços de messageria mas for necessário um controle robusto de transações, segurança (declarativa) usaria EJB 3; principalmente pela facilidade e por ser uma especifcação.