| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 11:23:03
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
Boa tarde pessoal!
Por gentileza, eu estou com uma dúvida cruel e gostaria da ajuda de vocês.
1ª Parte
Eu estou utlizando EJB no meu TCC. O projeto consiste em Gerenciar os setores de Agricultura, Pesca e Pecuária, pois bem, eu criei 3 módulos: Agricultura, Pesca e Pecuária e os deixei com a responsabilidade de Persistência, apenas.
Eu estou utlizando JPA, portanto, cada CRUD, e vale lembrar que eu utilizei Generics, jah que os meus módulos não estão com os Entities, possui um EntityManager. - Estou utilizando GLASSFISH, pool de conexões, etc...
2ª parte
Eu criei um Web Project que conterá, os meus MB's (JSF 2), os Entities, validações, conversões, etc. Ou seja, nas minhas classes JSF, eu vou injetar um @EJB, para acessar os meus métodos de persistência, que como eu jah disse, estarão contidos nos respectivos módulos EJB.
Eu gostaria de saber de vocês, se esse raciocínio esta correto, em termos de padrão e arquitetura, utilizando-se EJB? E se eh uma boa pratica deixar os módulos apenas com a responsabilidade de tratar a parte da persistência se pensarmos em escalabilidade e reaproveitamento?
Apenas com a intenção de ilustrar a minha dúvida:
===========================================
EJB ========= EJB ====== EJB ======== Web Project
Agricultura === Pesca ===== Pecuaria ==== APP
CRUD ======= CRUD ====== CRUD ====== Entities+JSF
===========================================
Eu não sei se eu fui muito claro na minha questão, qualquer palpite eh bem vindo.
Desde jah, eu agradeço!
[]'s
This message was edited 1 time. Last update was at 21/11/2011 11:23:35
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 11:37:50
|
maior_abandonado
JWizard
![[Avatar]](/images/avatar/0d7c463832b871c20405a6c9296b5517.jpg)
Membro desde: 03/09/2007 11:30:08
Mensagens: 2694
Localização: sp
Offline
|
uma coisa que eu faço é deixar as entidades e o arquivo de configuração do jpa (persistence.xml) em um outro projeto a parte... os outros referenciando este.
Para os cruds enxergarem as entidades do jpa você fez como? deixou seus projetos de ejb referenciando o de web ?
|
espero ter ajudado...
falando nisso, caso seu problema tenha sido resolvido, edite o seu primeiro post e coloque um [RESOLVIDO] no titulo do tópico.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 11:43:05
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
maior_abandonado wrote:uma coisa que eu faço é deixar as entidades e o arquivo de configuração do jpa (persistence.xml) em um outro projeto a parte... os outros referenciando este.
Para os cruds enxergarem as entidades do jpa você fez como? deixou seus projetos de ejb referenciando o de web ?
Oi amigo,
Eu deixei as entidades e o persistence.xml do JPA no meu projeto web. Nos cruds, que estão nos módulos, eu utilizei generics . O que ce acha?
Valeu a força!
[]'s
Um dos módulos:
This message was edited 1 time. Last update was at 21/11/2011 11:47:47
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 11:56:55
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
cara,
um padrão bacana, que vc pode seguir seria o MVC, aonde ficaria assim
Model - camada responsavel pela sua regra de negocio, enttidade e persistencia. eu utilizo em meus projetos patterns, DAO (aonde eu faço um classe basica com todos as necessidades para a persistencia), Facade (responsavel pela regra de negocio), entity (classe que espelham seu banco e contem as anotações para mapeamento do JPA)
View - camada aonde possui todas seus xhtml, css, js, imagens e etc.
Controller - camada responsavel por fazer a ligação da sua camada de visão com a camada de model, nela se faz as validações, conversões e etc.
espero ter te ajudado
t+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 12:15:07
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
alissonvla wrote:cara,
um padrão bacana, que vc pode seguir seria o MVC, aonde ficaria assim
Model - camada responsavel pela sua regra de negocio, enttidade e persistencia. eu utilizo em meus projetos patterns, DAO (aonde eu faço um classe basica com todos as necessidades para a persistencia), Facade (responsavel pela regra de negocio), entity (classe que espelham seu banco e contem as anotações para mapeamento do JPA)
View - camada aonde possui todas seus xhtml, css, js, imagens e etc.
Controller - camada responsavel por fazer a ligação da sua camada de visão com a camada de model, nela se faz as validações, conversões e etc.
espero ter te ajudado
t+
Beleza, alissonvla?
Pelo que eu estou entendendo os módulos EJB substituíram o DAO, portanto, vocês acham que o EJB e o MVC podem andar de mãos dadas? Ou não, eu teria que sacar fora o EJB, se eu quisesse adotar o MVC?
[]'s
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 12:49:29
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
cara, foi mau, esqueci de te falar em cima,
seu facade seria o ejb, vc teria algo assim
xhtml - controller (@ManagedBean) - facade (@Ejb) - DAO (vc injeta o @@PersistenceContext uma unica vez na classe base)
segue um exemplo do base dao
t+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 16:51:20
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
alissonvla,
Desculpe se eu estou sendo chato. Me corrija se eu estiver errado, por favor.
Eu terei apenas um DAO na minha aplicação e N Session Beans, que no caso, serão os meus Facades, certo?
Por exemplo, eu terei 3 sessions beans e poderei injetar em cada um deles o meu DAO, como foi feito aqui, correto?
Soh mais uma dúvida, como eu havia comentado mais acima, as minha classes de entidade do JPA, bem como, o meu arquivo persistence.xml, estão no meu Projeto Web, isso estaria correto, de acordo com seu raciocínio posto ai?
Mais uma vez, obrigado!
[]'s
This message was edited 1 time. Last update was at 21/11/2011 16:55:10
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 17:04:42
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
vc vai ter um DAO, por entidade que vc que vc necessite persistir.
vc vai ter um Facade, por entidade, como se diz "Forte", no seu sistema.
vc vai ter um Controller, por caso de uso.
dessa forma fica bem divido e facil de se trabalhar.
segue uma classe dao que utiliza a classe basedao que eu te passei.
como vc vai ta usando Jee 6 vc pode fazer tudo no projeto web, ficou facilitou, nao necessita ter varios projetos.
t+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 20:38:38
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
alissonvla wrote:vc vai ter um DAO, por entidade que vc que vc necessite persistir.
vc vai ter um Facade, por entidade, como se diz "Forte", no seu sistema.
vc vai ter um Controller, por caso de uso.
dessa forma fica bem divido e facil de se trabalhar.
segue uma classe dao que utiliza a classe basedao que eu te passei.
como vc vai ta usando Jee 6 vc pode fazer tudo no projeto web, ficou facilitou, nao necessita ter varios projetos.
t+
Por gentileza, velhinho, voce poderia postar um exemplo do Facade?
Obrigado!
[]'s
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/11/2011 21:08:45
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
cara,
vou te passar um exemplo do meu sistema, so que eu CDI, entao meu facade é controller tbm.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2011 07:15:05
|
maior_abandonado
JWizard
![[Avatar]](/images/avatar/0d7c463832b871c20405a6c9296b5517.jpg)
Membro desde: 03/09/2007 11:30:08
Mensagens: 2694
Localização: sp
Offline
|
getAdicted wrote:
maior_abandonado wrote:uma coisa que eu faço é deixar as entidades e o arquivo de configuração do jpa (persistence.xml) em um outro projeto a parte... os outros referenciando este.
Para os cruds enxergarem as entidades do jpa você fez como? deixou seus projetos de ejb referenciando o de web ?
Oi amigo,
Eu deixei as entidades e o persistence.xml do JPA no meu projeto web. Nos cruds, que estão nos módulos, eu utilizei generics  . O que ce acha?
Valeu a força!
[]'s
Um dos módulos:
eu me arrisco a dizer que isso é uma questão um pouco polemica, vai bastante da opinião da pessoa, vai também dos requisitos encontrados... tem aquela questão dos repositórios e daos, há os que dizem (muitas vezes papagaios de piratas, as vezes alguns argumentos fundamentados aparecem) simplesmente "não use EJB"... enfim.
a minha opinião, pelo que tenho de experiência, é que é bom um dao genérico, mas normalmente você também vai precisar de daos específicos (que eu costumo fazer herdando o genérico)... vi l que você criou um findBySql (dei uma olhada bem básica, só um pouco nas assinaturas dos métodos), isso deixa de certa forma deixa mais abstrato você criaria sua sql em outro lugar e passa para o dao, mas eu tenho a opinião de que os comandos sql também deveriam ser criados em daos (normalmente isso cai nos específicos que falei), e o modelo simplesmente chamaria esse dao, classes de negocio do modelo não deveriam criar comandos sql na minha opinião.
Outra coisa também, nada impede de você deixar os daos em session beans, é funcional, mas o comumente usado é você deixar toda sua camada de modelo no session bean e injetar o dao no modelo, o dao poderia ser um session bean também injetado no modelo que é outro session bean, esse sim chamado no controle, ou melhor ainda, você pode construir fachadas destes modelos para serem chamadas pelos controles (da uma pesquisadinha em façade session bean).
A forma que eu faço é deixar os seus beans do jpa em um projeto a parte por que os uso tanto no modelo como nas telas da view por exemplo, se tiver tabelas na view que costumam ser list<algum objeto, normalmente estes beans> para usa-los em todos os projetos, tanto nos ejbs quanto na aplicação web/desktop que acessar o ejb.
bom... eu não estou dizendo que essa é a forma correta de se fazer, mas é a forma que eu faço, amanhã posso aprender com outra pessoa (ou até sozinho quem sabe) outra forma melhor.
|
espero ter ajudado...
falando nisso, caso seu problema tenha sido resolvido, edite o seu primeiro post e coloque um [RESOLVIDO] no titulo do tópico.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2011 08:26:36
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
Olá!
A meu ver existem alguns problemas na divisão de responsabilidades. O projeto Web está fazendo muito mais coisas do que deveria, como: armazenar entidades, implementar as regras de negócio, e até mesmo montar queries SQL.
Analise cuidadosamente as sugestões apresentadas ao longo do tópico, elas vão melhorar bastante a arquitetura de seu projeto.
E procure observar os seguintes princípios:
- Os DAOs são os únicos responsáveis pela persistência. Nenhum outro componente deve ter conhecimento da estrutura do banco de dados ou das consultas envolvidas.
- Classes de negócio devem fornecer operações completas, quer dizer, a View não deve executar as regras de negócio e chamar os EJBs apenas para persistência.
- A view é apenas a apresentação. Sua responsabilidade se restringe a fazer interface com o usuário, receber seus inputs, validar e acionar outras classes para execução das operações de negócio.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2011 11:45:27
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
Obrigado pelas opiniões amigos!
Só um parenteses aqui, e desculpem a enxurrada de perguntas. A minha ideia eh criar três projetos EJBs e um projeto Web, utilizando o mesmo EAR, eu pensei em fazer isso para tentar aumentar a coesão e permitir maior escalabilidade com menos esforços.
Na opinião de voces, eh melhor fazer o que eu mencionei, ou criar apenas um projeto Web?
Obrigado a todos pela paciência!
[]'s
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/11/2011 13:37:40
|
getAdicted
Virtual Machine Man
![[Avatar]](/images/avatar/355f4ae9f22df3742aa06eb6f5b1429f.jpg)
Membro desde: 07/09/2010 13:49:22
Mensagens: 556
Offline
|
maior_abandonado wrote:
getAdicted wrote:
maior_abandonado wrote:uma coisa que eu faço é deixar as entidades e o arquivo de configuração do jpa (persistence.xml) em um outro projeto a parte... os outros referenciando este.
Para os cruds enxergarem as entidades do jpa você fez como? deixou seus projetos de ejb referenciando o de web ?
Oi amigo,
Eu deixei as entidades e o persistence.xml do JPA no meu projeto web. Nos cruds, que estão nos módulos, eu utilizei generics  . O que ce acha?
Valeu a força!
[]'s
Um dos módulos:
A forma que eu faço é deixar os seus beans do jpa em um projeto a parte por que os uso tanto no modelo como nas telas da view por exemplo, se tiver tabelas na view que costumam ser list<algum objeto, normalmente estes beans> para usa-los em todos os projetos, tanto nos ejbs quanto na aplicação web/desktop que acessar o ejb.
Bem interessante esse método, já foi incorporado ao meu projeto. Obrigado maior_abandonado. Valeu gomesrod e alissonvla tambem!
Já estou quase fechando o escopo em termos de tecnologia, só resta a questão do meu post anterior a esse. Vou continuar pesquisando, qualquer novidade, eu posto.
Valeu rapaziada. Sucesso!
[]'s
|
--
Desenvolvedor de Sistemas
Cursando Bacharelado em Análise de Sistemas e Tecnologia da Informação pela Faculdade de Tecnologia de São Paulo |
|
|
 |
|
|
|
|