Dúvida Arquitetura Sistema Web

Boa tarde pessoal!

Estou com o seguinte problema, vou desenvolver um sistema um pouco grande e a tendência é sempre ele aumentar, existem classes java, estilos, imagens, etc, que sempre serão usadas em todos os sistemas não gostaria de ficar replicando isso para todos os projetos, por ser complicado manutenção.

A princípio criei 2 módulos para todos os sistemas acessarem e pegar as classes java, estilos, imagens, etc, eliminando o problema que descrevi acima.

  • Utilitario.war(Onde só teriam as classes(ValidaMoeda, ValidaEmail, etc que poderiam ser utilizadas em outros sistemas)
  • Estilos.war(Aqui ficaria todos os estilos, imagens que poderiam ser utilizados nos sistemas)

Abaixo os sistemas que serão usados pelo usuário:

  • RH.war
  • Financeiro.war, etc

Como eu faria para o RH.war ou Financeiro.war conseguir enxergar as classes do pacote Utilitario.war e os estilos do Estilos.war?

Gostaria de uma opinião também do que acham desta arquitetura. No caso de não funcionar ou não ser viável estou aberto a sugestões.

Obrigado amigos

Você poderia criar um Utilitario.JAR ao invés de WAR e distribuir esse jar para cada aplicativo (RH, Financeiro) etc.

Quanto aos estilos e imagens, você poderia colocar em um servidor rodando lighttpd em um subdomínio diferente, tipo assim:
http://static.seuservidor.com.br

Dessa forma ao acessar o RH pela primeira vez o browser já faria cache e quando for acessar o Financeiro, já teria os arquivos cacheados.

Se você realmente quer distribuir uma aplicação só com .war, é só colocar as tag images assim:

Nesses dois itens eu concordo com você. Agora fazer essa separação de fazer RH, Financeiro ser uma aplicação separada não me parece muito legal. Como você trataria uma ação Transacional que passa pelos dois módulos? E teria que se preocupar com Single Sign-On para que o usuário faça login em apenas um módulo.

[quote=Oenning]Você poderia criar um Utilitario.JAR ao invés de WAR e distribuir esse jar para cada aplicativo (RH, Financeiro) etc.

Quanto aos estilos e imagens, você poderia colocar em um servidor rodando lighttpd em um subdomínio diferente, tipo assim:
http://static.seuservidor.com.br

Dessa forma ao acessar o RH pela primeira vez o browser já faria cache e quando for acessar o Financeiro, já teria os arquivos cacheados.

Se você realmente quer distribuir uma aplicação só com .war, é só colocar as tag images assim:

Nesses dois itens eu concordo com você. Agora fazer essa separação de fazer RH, Financeiro ser uma aplicação separada não me parece muito legal. Como você trataria uma ação Transacional que passa pelos dois módulos? E teria que se preocupar com Single Sign-On para que o usuário faça login em apenas um módulo.[/quote]

Então Oenning imagine que nesse arquivo .jar eu tenha uma classe ValidaEmail, e repliquei esse jar para 100 sistemas, digamos que eu encontre uma erro nessa classe ValidaEmail, imagine eu indo nos 100 sistemas atualizando esse .jar, gostaria de montar uma estrutura onde eu atualizaria essa classe em apenas um lugar.

Grato.

A solução que vc está querendo é algo de Cross Context, mas seu uso é muito raro e inseguro. (não lembro de onde li isso)

Aqui em meus projetos, essas classes helpers (validadores, formatadores, conversores) realmente estão em outro projeto exportado em JAR, exatamente como nosso colega Oenning. Mas coloco o jar no shared libs do Tomcat, assim todas as aplicações enxergam as classes e na atualização das mesmas, republico o jar e todas as aplicações atualizam automaticamente;

Se o sistema for grande do jeito que você está falando, você poderia usar EJB Session Bean, o que daria mais robustez ao sistema.

Você também pode colocar como Shared Library, como o Java Lover falou. Porém sempre que você precisar atualizar um JAR, todos os aplicativos deverão ser reinicializados no servidor de aplicação.

Qual é o App Server que você vai utilizar (JBoss, Tomcat, etc) ?

[quote=Java Lover]A solução que vc está querendo é algo de Cross Context, mas seu uso é muito raro e inseguro. (não lembro de onde li isso)

Aqui em meus projetos, essas classes helpers (validadores, formatadores, conversores) realmente estão em outro projeto exportado em JAR, exatamente como nosso colega Oenning. Mas coloco o jar no shared libs do Tomcat, assim todas as aplicações enxergam as classes e na atualização das mesmas, republico o jar e todas as aplicações atualizam automaticamente;[/quote]

Ok, mais e quando aos arquivos css, imagens, etc que também podem ser utilizados em todos os sistemas eu também coloca na pasta lib do tomcat?

[quote=AndreAlves]Se o sistema for grande do jeito que você está falando, você poderia usar EJB Session Bean, o que daria mais robustez ao sistema.

Você também pode colocar como Shared Library, como o Java Lover falou. Porém sempre que você precisar atualizar um JAR, todos os aplicativos deverão ser reinicializados no servidor de aplicação.

Qual é o App Server que você vai utilizar (JBoss, Tomcat, etc) ?[/quote]

Estou usando o Jboss, quanto a ter que reiniciar os aplicativos tudo bem, pois de qualquer geito eles teriam de ser reinicializados um por um

valeu.

Só mais uma pergunta o que vocês acham de eu criar um webservices para essas classes que eu quero reaproveitar os códigos?

valeu.

Na minha opinião você vai estar adicionando complexidade desnecessária, sem falar na perda de performance e dor de cabeça para ter que manter um WebService online.
Joga logo um jar no shared lib como o pessoal falou.

[quote=Oenning]Na minha opinião você vai estar adicionando complexidade desnecessária, sem falar na perda de performance e dor de cabeça para ter que manter um WebService online.
Joga logo um jar no shared lib como o pessoal falou.[/quote]

Certo, mais isso funcionara em qualquer servidor? Tomcat, Jboss, etc?

Valeu.

O JAR pode ser usado em qualquer container java. :thumbup:
Nesse JAR pode ter classes java, aplicações completas, applets, metadados, etc. :shock:

Lembre-se que TODAS as aplicações neste container compartilharão as classes. Mantenha a compatibilidade de outras third-party pra evitar eros com class loader.

Blz galera valeu, farei como vcs me indicaram:

as imagens farei igual ao Oenning disse, deixarei em um subdominio diferente htt://localhost/Imagens

e as classes criarei um .jar e deixarei no container compartilhando entre todos os sistemas.

Valeu.