Acessar Classes de outro arquivo .war

Boa tarde pessoal!

Estou com o seguinte problema, vou desenvolver um sistema um pouco grande e a tendência é sempre ele aumentar, existem classses java, imagens, etc, que sempre serão usadas em todos os sistemas. O que eu pensei em fazer a princípio seria dividir esse sistema em módulos:

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

Abaixo os módulos de sistemas:

  • 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.

Obrigado amigos

amgarcia pelo q conheço n é possivel fazer isso com .war sendo este o seu projeto final o qual é carregado pelo servidor de aplicaçoes, mas sei q vc pode fazer isso com .jar bastando apenas adiciona-lo ao seu projeto para pode utilizar as classes normalmente.

putz complicado, não gostaria de ficar replicando classes, estilos, imagens para todos os projetos.

por qual motivo?

por qual motivo?[/quote]

Digamos que eu tenha uma classe que valide email, e replique ela para 100 sistemas e futuramente eu encontre um erro nessa classe, imagina eu indo em cada classe de cada sistema corrigindo esse problema.

Seria mais facil eu ter essa classe dentro de um pacote onde todos os sistemas acessem ela, encontrando um erro corrija apenas essa classe. Mais facil corrigir em um lugar do que em 100.

por qual motivo?[/quote]

Digamos que eu tenha uma classe que valide email, e replique ela para 100 sistemas e futuramente eu encontre um erro nessa classe, imagina eu indo em cada classe de cada sistema corrigindo esse problema.

Seria mais facil eu ter essa classe dentro de um pacote onde todos os sistemas acessem ela, encontrando um erro corrija apenas essa classe. Mais facil corrigir em um lugar do que em 100.[/quote]

Eis uma sugestão: Crie webservices para as lógicas às quais deseja reutilizar em qualquer outro projeto e estará resolvido. Poderá até usá-las remotamente tipo: um projeto que está hospedado no Brasil utizar um recurso de outro que está no Japão! Pense nisso…

Alguns servidores… como JBoss são extremamente configuraveis…

E daria para um .war acessar outro com algumas configuracoes…

Mas nao é trivial…

Seria bom entender inclusive de ClassLoaders…

Bom…acredito que compartilhar o war file entre aplicações não seja muito fácil e pra ser sincero, nunca vi em local algum…e também não sei se isso é possível…o outro colega ressaltou que no JBOSS é possível, porém, voce irá fica “preso” a um determinado appserver.

O nobre colega citou em logo acima uma opção que eu acho a mais correta para esses casos que seria de criar ao invés de “any” war files empacotar as classes “comuns” em jar files e então reutilizá-las em suas aplicações, colocando essas “dependências” no classpath da aplicação (web-inf/lib) ou no “/lib” do servidor, porém voce descartou essa hipótese devido ao “retrabalho” de ficar duplicando essas classses nos outro servidores caso um bug seja descoberto. De qualquer maneira, caso esses bugs apareçam e a chance dos mesmos aparecerem é grande, voce terá que fazer uma atualização nos war files (isso se voce optar pela sua sugestão) , ou seja, o trabalho de “duplicar” arquivos (war ou jar) não vai ser “enconimizado”, sendo assim, alterar mais um jar ou mais (com as classes comuns) acho que não vai ser problema logo a meu ver, o problema que voce citou de manutenciabilidade do sistema tendo que duplicar any arquivos na minha opinão vai ser o mesmo…

Minha sugestão pra voce seria trabalhar co o MAVEN 2 para issso. Sei que muitas pessoas aqui tem ódio mortal dessa ferramenta mas quando existe esse cenário de “dependências” compartilhadas, diferentes versões de classes e necessidade de build’s rápidos, não conheço ferramenta mais poderosa do que essa.

Site Oficial : http://maven.apache.org/

Tutorial GUJ: http://www.guj.com.br/article.show.logic?id=185

Lembrando que um “war” seria um “web archive” ou seja, classes referentes a um projeto WEB e não foi feito para voce “compartilhar esses recursos” via features do application server. Se voce precisa de um coisa nesse sentido, voce teria que usar um “jar”…

Mesmo assim. se voce não gostou da minha sugestão, devido ao “trabalho” de ficar atualizando dependências em “any” app servers, sugiro a voce trabalhar com “RMI” , ou seja utulizar EJB’s, Webservices ou Rest.

Por fim, acredito que a solução com maven seja a mais indicada, mas fica a seu critério.

Abraços e Boa Sorte!

Por falar em .war, por favor, alguém sabe como gerar um .war sem os jars da pasta lib?
problema idêntico a esse:

Mas aí não diz como gerar o .war sem os jars (até então) desnecessários.

Ok pessoal valeu, vou dar uma analisada em cada sugestão!

Boas sugestões foram colocadas aqui

Abraço.

Só reforçando aqui…

Falei que no JBoss seria possivel…

MAS eu mesmo não recomendo!! Assim como os colegas…

Voce ja pensou em fazer o deployment via EAR, ao inves de WAR? Um EAR pode conter varios JARs (para EJBs, utilitarios, …) e varios WARs (para aplicacoes web) …

O EAR não seria só para EJB?

No meu caso não estou usando EJB

Imagina. EAR = Enterprise Archive :slight_smile: EJBs podem ou nao estar dentro de um JAR que faz parte de um EAR. Um EAR eh um arquivo que contem outros arquivos, fazendo todos parte de uma “aplicacao enterprise”, cujos componentes estao interligados ou interdependentes ou com componentes compartilhados entre diversas mini-aplicacoes (ou seja, exatamente o que vc descreveu…)

No seu ambiente de desenvolvimento, crie subprojetos que vao ser empacotados em jar.
Utiliza o maven

“Utilitario.war(Onde só teriam as classes(ValidaMoeda, ValidaEmail, etc que poderiam ser utilizadas em outros sistemas)”

Np tomcat tem uma pasta “lib”, onde fica as lib comuns a toda as aplicacoes instalada no servidor.

Quanto as imagens, voce cria um war com as imagens.

faz o deploy e coloca o nome pro exemplo de stilo

  • Estilos.war(Aqui ficaria todos os estilos que poderiam ser utilizados nos sistemas)

No seu sistema RH onde tem que aparece a imagem do botao por exemplo.
Ficaria assim

LOGO

[quote=javaAurelio]No seu ambiente de desenvolvimento, crie subprojetos que vao ser empacotados em jar.
Utiliza o maven

“Utilitario.war(Onde só teriam as classes(ValidaMoeda, ValidaEmail, etc que poderiam ser utilizadas em outros sistemas)”

Np tomcat tem uma pasta “lib”, onde fica as lib comuns a toda as aplicacoes instalada no servidor.

Quanto as imagens, voce cria um war com as imagens.

faz o deploy e coloca o nome pro exemplo de stilo

  • Estilos.war(Aqui ficaria todos os estilos que poderiam ser utilizados nos sistemas)

No seu sistema RH onde tem que aparece a imagem do botao por exemplo.
Ficaria assim

LOGO

[/quote]

Legal javaAurelio, excelente essa é A IDÉIA.

Só por curiosidade, você usa esse tipo de arquitetura em seus sistemas? algum contra de se trabalhar assim?

Valeu.