| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/10/2011 20:54:57
|
vitorh.campos
HelloWorld
![[Avatar]](/images/avatar/2f01807ad5d67de3e46e244252dd55e5.jpg)
Membro desde: 04/01/2007 15:03:01
Mensagens: 10
Localização: Vitória/ES
Offline
|
Olá,
Após muitos anos trabalhando com Delphi e banco de dados Oracle (PL/SQL), a empresa onde trabalho (uma empresa de médio porte do ramo automotivo) resolveu partir para o desenvolvimento web, em Java. Além dos motivos de sempre (falta de programadores Delphi no mercado, solução do problema de atualização de sistemas, possibilidade de execução em dispositivos móveis, etc), a empresa comprou a solução de portal Oracle WebCenter, que roda no servidor de aplicação WebLogic (que é Java).
Como um dos analistas de sistemas da empresa, e o único que conhece melhor a plataforma Java (fiz uma pós-graduação em Tecnologias Java), fui designado a definir as metodologias e ferramentas de desenvolvimento na nova linguagem.
Uma das minhas principais dúvidas é em relação ao uso de EJB (mais especificamente, session beans): nossos sistemas são bastante integrados uns aos outros, e comumente usamos as mesmas tabelas e compartilhamos código entre eles. Ao meu ver, seria um caso intessante de uso de Session Beans, já que as diversas aplicações poderiam usar uma única fonte de código, sem ter que me preocupar com código repetido em diversos projetos (e para piorar, com versões diferentes).
Então a dúvida é: vale a pena usar Session Beans para manter as regras de negócio, é melhor mantê-los nas próprias aplicações ou ainda, mantê-lo em um JAR, como se fosse uma library, sendo consumida pelas aplicações)? Atualmente as aplicações rodarão todas em apenas um servidor, mas é possível que passemos a trabalhar em cluster, caso o volume de acessos aumente muito.
Grato.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2011 08:42:55
|
erickfm8
GUJ Master
Membro desde: 06/10/2009 19:29:12
Mensagens: 1396
Offline
|
Bom dia.
Como assim
Então a dúvida é: vale a pena usar Session Beans para manter as regras de negócio, é melhor mantê-los nas próprias aplicações
EJB É APLICAÇÃO JAVA.
Existem 3 tipos de EJB.
Session Bean - é o tipo mais simples de EJB, pode ter estado (stateful) ou não ter (stateless)
Para aplicação no geral usa stateless
Entity Bean - mapeam tabelas de um banco de dados relacional através de um arquivo de mapeamento. Na prática cada objeto entity representa uma linha de uma tabela. Existe uma linguagem de query específica para buscar entitys chamada EQL, deve ser usado em conjunto com stateless
MDB - são consumidores assincronos de mensagens de filas / tópicos JMS as vezes precisamos usa-lo no meu ver é o mais complicado
EM FIM
O que EU geralmente faço é criar o modulo EAR (negocio -EJB) e disponibilizar para outros sistemas..
This message was edited 1 time. Last update was at 30/10/2011 08:44:21
|
Bacharel em Sistema de Informação
SCJP - Sun Certified Java Programmer
OCWCD - Oracle Certified Web Component Developer (Estudando..) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2011 09:02:10
|
vitorh.campos
HelloWorld
![[Avatar]](/images/avatar/2f01807ad5d67de3e46e244252dd55e5.jpg)
Membro desde: 04/01/2007 15:03:01
Mensagens: 10
Localização: Vitória/ES
Offline
|
Olá,
Como assim
Então a dúvida é: vale a pena usar Session Beans para manter as regras de negócio, é melhor mantê-los nas próprias aplicações
Acho que me expressei mal. O que eu quis dizer foi: vale a pena manter as regras de negócio em Session Beans e fazer as chamadas nas aplicações, ou é não usar Session Beans manter as regras dentro de cada uma dessas aplicações? Ou há alguma outra maneira de se compartilhar código entre aplicações?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2011 09:04:35
|
erickfm8
GUJ Master
Membro desde: 06/10/2009 19:29:12
Mensagens: 1396
Offline
|
Session Beans é pra isso...
Principalmente se tem muitas aplicaçoes distribuidas
EJB 3 ESTÁ MUITO LEGAL
This message was edited 1 time. Last update was at 30/10/2011 09:05:13
|
Bacharel em Sistema de Informação
SCJP - Sun Certified Java Programmer
OCWCD - Oracle Certified Web Component Developer (Estudando..) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2011 11:36:34
|
jrtm
Debugger
Membro desde: 03/12/2007 11:45:09
Mensagens: 62
Offline
|
Use EJB.
Existem muitos recursos ao qual no futuro vc posso precisar.
Principalmente que sua aplicação deve ser escalavel.
flw!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2011 18:32:31
|
Sergio Lopes
Moderador
![[Avatar]](/images/avatar/8232e119d8f59aa83050a741631803a6.jpg)
Membro desde: 17/11/2003 00:22:10
Mensagens: 1368
Localização: São Paulo - SP
Offline
|
Se você quer apenas compartilhar lógica semelhante entre as aplicações, não use EJB, use um JAR comum pra todo mundo. É 50x mais fácil que usar EJB. O único problema é ter que copiar a última versão do JAR pra cada projeto sempre; mas esse problema você teria com EJB também, copiando o JAR das interfaces remotas.
Se você quer integrar com vários sistemas, incluindo mobile e possivelmente outras linguagens (você citou Delphi), não use EJB. EJB é puro Java e te limita bastante em possibilidades de integração. Use integração via Web, preferencialmente REST e serviços simples - mas até SOAP e JAX-WS já ajudaria.
Se você vai rodar tudo numa mesma máquina, não faça uma arquitetura baseada em remotabilidade logo de cara. Usar EJB aqui (e ate Web Service) vai adicionar muita complexidade logo no início, o que vai te atrasar muito.
Fazendo uma arquitetura 100% Web (usando, por exemplo, REST para integração) você consegue escalar facilmente no dia que sua demanda subir. E isso deixando as coisas relativamente simples no início.
PS. Estou falando "mal" de EJB no sentido que entendi aqui no post, de usar para integração remota. Usar como container local com EJB Lite, CDI e coisas do gênero é uma ideia que me agrada. Só tenho problemas com EJBs remotos
|
Sérgio Lopes - twitter: @sergio_caelum - blog pessoal: sergiolopes.org
Curso Java | Apostilas Java | Arquitetura Java | Curso Rails |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2011 11:34:02
|
jrtm
Debugger
Membro desde: 03/12/2007 11:45:09
Mensagens: 62
Offline
|
Com certeza o que o Sergio Lopes escreveu faz sentido. Sempre é dito para não se matar uma mosca com um tiro de canhão.
Deve-se verificar a necessidade de cada cenario para não sofrer com a curva do aprendizado sem necessidade. Mesmo a equipe adquirindo conhecimento, o que está em jogo é o projeto.
Mesmo o EJB 3 sendo mais facil de usar e enxuto, no começo vc irá "apanhar" um pouco para aprender e compreender algumas tecnologias.
Mas para cenários corporativos, onde varias aplicações acessam o mesmo conteúdo fica um pouco inviável a utilização do jar negocial embutido na aplicação.
É a minha opinião.
flw!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2011 13:32:54
|
andre2k2
JavaEvangelist
Membro desde: 27/03/2007 14:54:31
Mensagens: 353
Offline
|
vitorh.campos wrote:Olá,
Como assim
Então a dúvida é: vale a pena usar Session Beans para manter as regras de negócio, é melhor mantê-los nas próprias aplicações
Acho que me expressei mal. O que eu quis dizer foi: vale a pena manter as regras de negócio em Session Beans e fazer as chamadas nas aplicações, ou é não usar Session Beans manter as regras dentro de cada uma dessas aplicações? Ou há alguma outra maneira de se compartilhar código entre aplicações?
Vitor tenha certeza: use EJBs sim!
Seu caso pelo que descreveu é um caso classico de uso de EJBs. Eles te proporcionarão muitos beneficios. Pelo que vi você conhece, sabe para que servem, sabe aplicar, mas só está inseguro em usar. Então vá em frente. Separe sua logica de negócio em beans.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2011 11:33:32
|
xdraculax
Java Ninja
Membro desde: 12/01/2009 16:12:54
Mensagens: 286
Offline
|
Eu prefiro não encher o projeto de complexidade logo de cara tentando adivinhar o futuro ou por empolgação tecnológica.
Faz um projeto sem interfaces remotas e evolua de acordo com a necessidade; ou você correrá o risco de perder tempo resolvendo problemas que não existem, e os que existirem, ficarão sem solução.
|
-Atenha-se a resolver o problema, e não criticar opiniões.
-Você percebe que está programando d+, quando está escrevendo identado!
-Não precisa estar certo, basta acreditar. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2011 11:50:31
|
vargas
JavaTeenager
Membro desde: 08/10/2011 13:21:59
Mensagens: 150
Offline
|
Acho que a dúvida dele não é se deve ou não usar EJB, e sim o lugar das regras de negocio que na minha opinião não devem ficar nos EJBs (ou seja lá o que vc vier a usar no servidor), mas sim classes java comum que são distribuídas em pacotes jar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2011 11:54:36
|
andre2k2
JavaEvangelist
Membro desde: 27/03/2007 14:54:31
Mensagens: 353
Offline
|
vargas wrote:Acho que a dúvida dele não é se deve ou não usar EJB, e sim o lugar das regras de negocio que na minha opinião não devem ficar nos EJBs (ou seja lá o que vc vier a usar no servidor), mas sim classes java comum que são distribuídas em pacotes jar.
Bem, se essa é a dúvida então eu ainda acho que EJBs são melhores. Distribuir jars é um inferno, vocês sabem. Quando se tem 3 ou mais sistemas pra manter isso começa a ficar inviável se você tem manutenções praticamente toda semana. Pelo problema que eles explicou, creio que o uso de EJBs inicialmente já irá impedi-lo de cair em problema como distribuição de jars, o famoso jar hell!!!
O que o xdraculax comentou é muito interessante. É importante resolver os problemas que você tem agora. Mas, xdraculax, acho que pelo que ele explicou já é o caso de usar interfaces remotas sim. Ele mencionou o uso das entidades de negocio por vários sistemas. A não ser que eu tenha entendido errado...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/11/2011 12:28:03
|
vargas
JavaTeenager
Membro desde: 08/10/2011 13:21:59
Mensagens: 150
Offline
|
andre2k2 wrote:
Bem, se essa é a dúvida então eu ainda acho que EJBs são melhores. Distribuir jars é um inferno, vocês sabem. Quando se tem 3 ou mais sistemas pra manter isso começa a ficar inviável se você tem manutenções praticamente toda semana. Pelo problema que eles explicou, creio que o uso de EJBs inicialmente já irá impedi-lo de cair em problema como distribuição de jars, o famoso jar hell!!!
Sem dúvida. Estava me referindo a distribuição entre equipes, não entre sistemas. Por exemplo, a equipe de desenvolvimento "distribui" o jar que contém as regras de negócio para a equipe de deploy colocar em produção.
Para distribuir entre sistemas, sinceramente, ninguém da a mínima o que vc usa, existem centenas de configurações, frameworks, EJB é uma.
This message was edited 2 times. Last update was at 07/11/2011 12:31:29
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2011 12:49:30
|
vitorh.campos
HelloWorld
![[Avatar]](/images/avatar/2f01807ad5d67de3e46e244252dd55e5.jpg)
Membro desde: 04/01/2007 15:03:01
Mensagens: 10
Localização: Vitória/ES
Offline
|
Bom, fiz meus testes usando EJB3 e descobri algo que me incomodou bastante: para se usar a interface @Local (pelo menos no WebLogic), todas as aplicações deveriam ficar no mesmo EAR, já que a característica do WebLogic é de manter cada aplicação em um classloader separado (pelo menos foi o que eu entendi da documentação dele). O ruim de se fazer isso, pelo menos no meu ponto de vista, é que tudo ficaria em um lugar só, ou seja, daqui a uns 5 anos, por exemplo, a empresa teria um único arquivo EAR gigantesco que, caso desse algum problema no redeploy da aplicação (ou coisa parecida), todas as aplicações parariam de uma vez só.
Também fiz testes usando JARs separados: não sei se eu fiz alguma besteira ou se faltou configurar alguma coisa, mas não consigo acessar um JAR separado no servidor (o WebLogic chama de Shared Library): quando faço referência às classes do JAR, o servidor lança a exceção ClassNotFoundException. Só consegui resolver colocando os JARs dentro do próprio projeto web (ou seja, dentro do WAR). Mesmo assim, tive problemas com o Hibernate: ele não consegue entender que as classes estão dentro do JAR.
Então, fica minha pergunta: existe alguma forma de se resolver esse problema dos JARs ou terei que usar EJBs com @Remote?
Grato.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/12/2011 18:08:27
|
Andre Brito
JWizard
Membro desde: 21/07/2007 17:44:31
Mensagens: 2485
Localização: Paraná
Offline
|
vitorh.campos wrote:Bom, fiz meus testes usando EJB3 e descobri algo que me incomodou bastante: para se usar a interface @Local (pelo menos no WebLogic), todas as aplicações deveriam ficar no mesmo EAR, já que a característica do WebLogic é de manter cada aplicação em um classloader separado (pelo menos foi o que eu entendi da documentação dele). O ruim de se fazer isso, pelo menos no meu ponto de vista, é que tudo ficaria em um lugar só, ou seja, daqui a uns 5 anos, por exemplo, a empresa teria um único arquivo EAR gigantesco que, caso desse algum problema no redeploy da aplicação (ou coisa parecida), todas as aplicações parariam de uma vez só.
Também fiz testes usando JARs separados: não sei se eu fiz alguma besteira ou se faltou configurar alguma coisa, mas não consigo acessar um JAR separado no servidor (o WebLogic chama de Shared Library): quando faço referência às classes do JAR, o servidor lança a exceção ClassNotFoundException. Só consegui resolver colocando os JARs dentro do próprio projeto web (ou seja, dentro do WAR). Mesmo assim, tive problemas com o Hibernate: ele não consegue entender que as classes estão dentro do JAR.
Então, fica minha pergunta: existe alguma forma de se resolver esse problema dos JARs ou terei que usar EJBs com @Remote?
Grato.
Esse problema não é tanto dos EJBs, mas sim da configuração do seu servidor. Não sei no servidor que você está usando, mas no JBoss tem uma pasta que vai todos os jars usados na aplicação (/server/default/lib, para a configuração default). No WebLobic deve ter alguma coisa parecida.
Respondendo a sua pergunta inicial, se é projeto web eu não usaria EJBs, mas sim VRaptor, que, além de ser um framework de fácil utilização, já permite o consumo de serviços usando REST (o que tornam as coisas mais simples). Ou Spring.
|
Como organizar o GUJ.
Meu Twitter.
Meu blog.
Future proofing means making code easy to change, not trying to anticipate every possible way your code might need to change. |
|
|
 |
|
|