App dividida em jars

Olá Companheiros de lutas e dúvidas.

Gostaria antes de tudo pedir desculpas, se por acaso alguém já fez uma pergunta parecida, eu de fato não fiz pesquisa no forum, porque eu não faço ideia de como pesquisar isso.

Pessoal, me jogaram uma bomba e não sei como desarmar, então estou recorrendo a voces, pois bem, eu fiz um programa para consumir uns serviços da nossa empresa, mas, como todos sabem quando vamos implantar, sempre o cliente quer alguma coisa diferente, eu queria saber como eu poderia fazer ou pesquisar, para fazer algo assim.

Desenvolver uma aplicação base, onde o cliente vai entrar e procurar as telas.
Ai nas telas, eu criar um jar com os metodos e etc dela, ai ao inves de atualizar a app toda, eu somente atualizo esse jar, pq assim, a maioria dos clientes pede pra alterar os dados do cadastro, ai toda vez eu tenho que mexer, compilar tudo e tal, dessa forma não precisaria fazer isso.

Desde ja agradeço a todos.

Bem… realmente não é tão simples fazer isso…

Primeiramente vc terá que pensar numa arquitetura que irá permitir esse tipo de intervenção… cada caso é um caso…

Essa aplicacao é web ou desktop??

O primeiro passo que eu te aconselharia fazer… é estudar ClassLoader… implementar o seu próprio… entender bem como funciona isso… pq eu imagino que em algum ponto a solução que vc tiver para o problema passará pelo ClassLoader… então é um bom ponto de partida…

Só para reforçar o meu entendimento do problema…

O que vc quer nao é apenas dividir a aplicacao em vários JARs e sim poder atualizar esses JARs sem desligar a aplicacao, correto?

OSGi também poderá te ajudar nessa tarefa… mas ainda assim acredito ser importante entender de ClassLoaders…

Bom dia rogelgarcia.

Muito obrigado por sua ajuda, já to revirando o Google atrás de informações sobre ClassLoader e OSGi.

Valeu cara

Você pode usar Java Web Start, ele deve garantir que a aplicação esteja sempre atualizada, mesmo que ela consista de vários JARs.
Uma aplicação Java Web Start só precisa do browser para poder baixar os JARs, mas ela pode acessar arquivos e bancos de dados como uma aplicação normal.

E como eu pesquiso isso entanglement???

Teria algum exemplo simples???

Muito obrigado.

Perguntas

Essa aplicacao, como será distribuida? web? Terá um módulo cliente (desktop) que se comunica com um servidor?

Só as telas irão mudar ou o sistema também?

Rogelgarcia, desculpa não ter respondido antes.

vamos as respostas,

A principio é uma app desktop, ela é instalada em um micro que faz a comunicação com o servidor através de webservices que se comunicam com o bd, pra poder usar em varias plataformas, por causa da dificuldade, a gente ta permitindo somente nos cadastros e algumas consultas a customização.

Se quiser saber mais alguma coisa é so perguntar.

E como são essas costumizações?

Poderá customizar queries??

Customizar telas?

Será necessário por exemplo, em algum momento adicionar novas classes ou métodos a aplicacao? Tanto na parte do cliente quanto na parte do servidor?

O JavaWebStart pode resolver a parte desktop da aplicacao mesmo… como o colega falou…

Mas na parte servidor ainda será necessária uma solução mais robusta…

A assinatura desses webservices… poderão mudar também?

A principio, são na maioria dos casos, remover algum campo(somente da tela) mudar posicionamento dos campos da tela, nesses casos as queries de inclusão, exclusão, consulta, não alteram.

No caso das consultas sim, eles podem mudar as queries, mas, nessa parte, eu passo a querie como um parametros no webservice, ai ele me retorna os registros em um xml.

Na parte do cliente acontece de na maioria das vezes eles desejarem a inclusão de um relatório diferente, ou uma consulta, os serviços já existentes não mudam suas assinaturas, mas, pode ocorrer a implementação de novos.

Então tá mais tranquilo do que pensei…

Isso o Javawebstart dá conta… ou qualquer outra solucao que baixe os jars na hora para o cliente usar… ou entao tenha uma opcao de atualizar a aplicação cliente…

Isso pode ser perigoso… e se o usuário tiver um pouco a manha de como chamar webservices, e invocar uma query arbitrária?

Faça uma arquitetura que permita a adição de webservices sem a necessidade de reinicar a app… como nao irá alterar o que já tá rodando… fica beeeem mais fácil…