Pessoal, estou desenvolvendo um sistema de grande porte, e pretendo faze-lo em módulos, mas tenho uma dúvida grande, gostaria de saber se a melhor forma para desenvolver em modulos um sistema grande é trabalhando com EJB, ou existem outras alternativas, pois preciso de um unico contexto e varios módulos web. Obrigado pela Ajuda.
Não há uma única forma de fazer as coisas em Java; mas se você for fazer algo com EJB, tente usar EJB 3.0. Usar versões anteriores de EJB é contraproducente e pode fazer você perder os prazos, o que não é muito bom para sua reputação ou seu emprego.
Outra dica:
Pergunte a si mesmo: Realmente preciso utilizar EJBs nesta aplicação?
Tente justificar a resposta, fazer com que ela seja convicente.
Não é porque o sistema é “grande” que vc tem que utilizar EJBs, verifique os requisitos do sistema.
flws
Olá Bitoas, tudo bem ?
Cara desenvolver com EJB 3 ao contrário do que acontecia com EJB 2 ficou muito simple. Porem, hoje o Spring possui muito mais recurso que o do EJB, por isso se hoje for desenvolver uma aplicação seja ela pequena, média ou de grande porte, pense em utilizar o spring. A diferença entre spring e EJB é que spring não faz parte do JCP.
Obrigado pela dica, nunca trabalhei com o EJB e nem Spring, vou dar uma pesquisada melhor sobre o spring, gostaria de saber se tenho como trabalhar com varios projetos web sob o mesmo contexto de aplicação com o spring?
Não entendi o que vc quer dizer com trabalhar com varios projetos web sob o mesmo contexto de aplicação com o spring. Da uma explicação melhor, que eu tento te ajudar.
Abraços
O que eu pretendo fazer é o seguinte: quero fazer uma aplicação modular, onde cosiga desenvolver um módulo independente do outro, mas esses modulos devem estar no mesmo contexto de aplicação, ou seja vou ter um módulo chamado administração, outro módulo chamado atendimento, eles tem funções direfentes mas na mesma aplicação, conhece algo que possa me ajudar a fazer isso? ou vou ter que fazer do zero? Obrigado pela atenção.
Quanto à modularização:
Vc. quer ter apenas um war ou múltiplos wars ? No primeiro caso, o contexto já é compartilhado e não há nada a fazer. No segundo, dá para fazer algumas jogadas para compatilhar objetos entre os contextos distintos. Aqui, de novo é importante saber o que vc. que dizer com “contexto”: O spring, por exemplo, possui seu próprio contexto onde “vivem” os beans utilizados. Há também o contexto de uma aplicação web e, para complicar um pouco mais as coisas, tem a própria sessão, que é independente para cada war, mesmo quando utiliza-se o SSO.
BTW, um artigo interessante para vc. dar uma olhada é este:
parece ser bem isso que eu quero, é ter varios arquivos wars mas eles tem que utilizar a mesma sessão e poder referenciar classes entre os wars. vou dar uma olhada nesse link que o “psevestre” me enviou, mas se alguem tiver mais alguma dica para fazer isso eu agradeço. obrigado.
Entenda um ponto: até onde sei, não há mecanismo padrão para compartilhar uma sessão (HttpSession) entre módulos war. Isto não quer dizer que um mesmo objeto não possa estar presente em duas sessões.
Recentemente implementei um esquema de compartilhamento de objetos, que utiliza o método getContext("/outrocontexto") para obter acesso a um móduloa a partir de outro. A partir do contexto obtenho um RequestDispatcher e faço o include (ou forward) de um servlet padrão, que fica responsável por injetar na sessão destino atributos passados no request pelo aplicativo chamador. Neste esquema, uma mesma instância A de um objeto passa a estar presente em duas sessões. Este esquema evita a duplicação do objeto, mas possui algumas retrições:
-
As classes de objetos compartilhados devem ficar fora do WebClassLoader (ou seja, fora do WEB-INF/classes ou WEB-INF/lib). Vc. pode contornar isto colocando os jars compartilhados no nível do ear que contem os wars
-
A injeção de um objeto de um contexto em outro implica em que o primeiro “conheça” o segundo, introduzindo assim um acoplamento que pode ser indesejável.
-
Não tenho muita certeza qual o comportamento deste esquema em uma sessão distribuida. Pior: pode ser dependente da implementação
Aliás, já que toquei no assunto cluster, uma alternativa no seu caso seria o uso de um TreeCache (veja docs do JBoss) ou um DistributedTree do JGroups. O overhead seria maior devido ao impacto da serialização de objetos, mas funcionaria sem as restrições anteriores
Acho que o que você quer são módulos independentes que apenas seriam consumidos por outras aplicações, mas não pro usuário final, certo? (Para o usuário final, haveria uma aplicação que chamaria esses módulos.)
Bom, o pessoal está fazendo confusão aí, falando em “multiplos WARs”. Você precisa de um framework de serviços distribuídos. Você poderia usar EJB 3 com Sessions remotos (aí os módulos estariam dentro de um JAR encapsulado por EAR). Ou então usar JAX-RS, um web service, que aí seriam encapsulados em vários WARs.
A aplicação web para o usuário final precisa ficar em um apenas único módulo WAR.
Entendi, a minha ideia inicial era fazer o seguinte, trabalhar com uma aplicação war apenas, que seria a aplicação principal, e os modulos seriam projetos jar, e então conforme eles forem sendo criados eles acoplam no projeto princimal, como plug-ins, por exemplo eu teria o projeto “Main” que os acesso poderiam se feitos apenas por ele, pois nele estaria configurado o contexto e o controle das sessoes, e os módulos, ‘Atendimento’, ‘estoque’, 'relatórios, etc, esses seriam em bibliotecas jar, e seriam utilizadas a medida que forem sendo necessários. Mas tive um problema, não consigo acessar um arquivo jsp ou html dentro de um arquivo jar, que é chamada pela URL digitada no browser atravéz do contexto ‘Main’, ou melhor não estou sabendo como fazer isso, se alguem tiver uma ideia aceito sugestoes. Espero ter sido claro mas caso contrario posso esclarecer melhor. Obrigado
[quote=Leonardo3001]Acho que o que você quer são módulos independentes que apenas seriam consumidos por outras aplicações, mas não pro usuário final, certo? (Para o usuário final, haveria uma aplicação que chamaria esses módulos.)
Bom, o pessoal está fazendo confusão aí, falando em “multiplos WARs”. Você precisa de um framework de serviços distribuídos. Você poderia usar EJB 3 com Sessions remotos (aí os módulos estariam dentro de um JAR encapsulado por EAR). Ou então usar JAX-RS, um web service, que aí seriam encapsulados em vários WARs.
A aplicação web para o usuário final precisa ficar em um apenas único módulo WAR.
[/quote]
Leonardo3001 é isso mesmo que quero fazer, mas não sei como, desculpa os outros por não ter sido claro ao espressar o que eu gostaria de fazer. Partindo desse ponto, gostaria de saber o que preciso fazer para trabalhar com “serviços distribuídos”, qual o melhor container? o EJB 3 seria o mais indicado? etc. Obrgado.
Vc já deu uma olhada em como funciona um portal? Olhando por fora parece com isso que vc está querendo fazer.
Por que não utilizar WAR separados?
flws
[quote=fantomas]Vc já deu uma olhada em como funciona um portal? Olhando por fora parece com isso que vc está querendo fazer.
Por que não utilizar WAR separados?
flws[/quote]
quero utilizar o mesmo contexto e a mesma session, se eu conseguir fazer isso com multiplos WARs blz. mas não sei como.