Separação de uma aplicação web em módulos

8 respostas
O

Olá, tenho que modularizar uma aplicação web, ela esta toda entrelaçada com hibernate e struts. To com a idéia de criar um esqueleto principal (página web responsável por suportar os módulos) e módulos em jar. Estes módulos seriam aplicações completas e independentes de outros módulos (isso caso eu não me depare com nada que precise de dependencia), ou seja, caso eu ative somente um módulo na aplicação que ele funcione sem problema.

Meus desafios, empacotar vms, actions, hbms, e tudo de minha aplicação, e fazer tudo isso ser reconhecido pela sistema principal, proporcionando a montagem dinamica de menus e links e chamadas de páginas de cada módulo.

Preciso de idéias e argumentações, please!

8 Respostas

E

Empacote todos os seus Jars dentro do seu EAR. Dessa forma o seu classpath ficará certinho e seu módulo principal conseguirá encontrar os módulos secundários…
No seu struts-config.xml você irá configurar os módulos secundários, onde bastará adicioanar ou excluir as entradas para os outros struts-config.xml.

Mas essa solução é um processo manual e é feito no empacotamento do sistema…

Já trabalhei em um projeto modularizado e essa foi a solução aplicada na época…

Abraços

O

Oxa, valeu pelo retorno Elton.
Peço que me acompanhe no raciocínio, pois eu programa em java, mas sabe como é sempre fazemos as coisa como queremos e que funcione e nunca envolve algo mais profissional.
Então nunca lidei com jar, apenas em um pequeno aplicatico desktop feito no netbeans para controle pessoal de minhas finanças, logo não sei que estrutura o pacote jar tem que ter como uma aplicação web, eu pessoalmente acho que ele deve seguir a estrutura de uma aplicação web padrão.
Depois como ler este jar…?
A modularização do Struts eu já consegui fazer com o SwitchAction.
O pacote EAR não seria para projetos ejb? Pois, minha aplicação segue uma configuração dentro das definições para Struts, Hibernate e Velocity.
Espero seu retorno, pois tá dificil achar pessoas que tenham tido alguma experiência com o apresentado.

A

Olá, sou novo aqui na comunidade. Mais acho que posso lhe ajudar.

Eu sou novo em java, mais ja me deparei com vários projetos ate mesmo pessoais. Em relação aos Jar’s, se voce estiver usando a IDE Eclipse, pode colocalos dentro do seguinte diretorios i[/i], se nao possuir a pasta “lib”, pode criar na mão mesmo, acessando pelo diretorio onde seu projeto esta criado.

Se voce usa a IDE NetBeans, como eu li voce terá que verificar o seguinte diretorio i[/i][color=blue] [/color], segue o mesmo passo anterior, se a pasta não existir.

Espero ter ajudado.

:grin:

O

Valeu!!!

Mas minha dúvida é na arquitetura, organização de pastas. Os jar vão na pasta lib sim, para serem reconhecidos como biblioteca.
Mas obrigado!

O

Bom dia,

o struts já está modularizado com o uso do switchAction.
Meu obstáculo agora tá sendo fazer a aplicação ver os arquivos dentro do jar, como minha biblioteca.
O caso é que eu já tenho uma aplicação toda montada, mas a sua manutenção e correção de erros é muito “cansativa” pela amarração dos arquivos.
O que eu tentei fazer foi pegar todos os arquivos comuns a um contexto real e separá-los em um jar, deixando os arquivos de configuração e de uso comum para aplicação pra fora.
Mas não tá dando muito certo, eu precisava que estes módulos ficassem independentes, pois imagina como farei pra dar manutenção nisso. Descompactar o jar do módulo, aí não sei se este vai rodar descompactado já que a estrutura interna do jar é diferente da aplicação, aí desconsiderando isso, compactar de novo testar, se não funcionar volto a descompactar…loop.
Se tiver alguma idéia de como modularizar isso que funcione, me oriente. Abraço!

E

Aquivos Java (WAR, JAR, EAR) contam com regras de classloaders… O Que são esses classloaders?
Os classloaders definem a hierarquia de bibliotecas, ou seja, definem qual é a ordem que as mesmas serão carregadas e onde elas devem ficar…

Como te disse antes… Você consegue modularizar o seu sistema em outros arquivos “JAR”, mas deve sempre levar em consideração a ordem dos classloaders…

Por ex, se você empacotar suas bibliotecas de EJB na LIB do WAR, você não terá acesso, porque o classload de um arquivo WAR é mais restrito. Ao contrário já é possível, pois o classload de um JAR EJB é mais amplo…

Pesquise no Google sobre “java class loaders” que você entenderá melhor o que estou dizendo…

Só complementando, para um jar reconhecer outro jar como dependente, basta você configurar isso no arquivo MANIFEST.MF do seu Jar…
Todos os Jars que dependem de outros Jars (bibliotecas) devem estar devidamente configurados…

Abraços!

F

Aqui no site eu uso o spring pra gerenciar novos módulos. Você pode dar uma olhada no código em http://pluton.googlecode.com

Basicamente cada módulo é um Jar, com um <mod>-module.xml dentro, que na verdade é um applicationContext do Spring.
No web.xml eu mando o spring escutar *-module.xml, assim:

&lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt; /WEB-INF/hibernate-spring.xml, /WEB-INF/core-spring.xml, /WEB-INF/*-module.xml, /WEB-INF/security-spring.xml, classpath*:**/META-INF/*-module.xml &lt;/param-value&gt; &lt;/context-param&gt;

Desta forma, qualquer jar que for adicionado a aplicação será colocado no ar automagicamente.

O

Por hora fico grato a vcs que comentaram aqui. Estamos reestruturando a aplicação com a inclusão de BO e classes genéricas em java para fazer reuso. Assim que eu tiver algo de mais concreto eu posto aqui mesmo pra vcs saberem o que deu, e espero poder responder as questões de modularização a partir disso. Obrigado!

Criado 8 de janeiro de 2009
Ultima resposta 20 de jan. de 2009
Respostas 8
Participantes 4