Sistema Modular em JAVA

Bom dia, tenho uma dúvida, acho que podem me ajudar:

a pergunta é simples: como iniciar um sistema com estrutura modular em Java?
sou novato em java e ainda não tenho condições de definir isso de uma maneira inteligente.

Minha intenção era criar uma base onde ela gerenciasse os módulos.

Seguindo esse raciocínio:

  • Tenho no sistema um diretório modulos/, onde lá tem Faturamento.jar, EstoqueCompras.jar, etc

  • Em algum momento queria colocar um novo módulo (coloco o arquivo Financeiro.jar dentro do diretórios modulos/, por exemplo)

  • O sistema “entende” que existe um novo .jar dentro da pasta e passa a trabalhar com ele; monta os menus, ícones, etc

Alguém já se deparou com uma situação dessas?
Esse caminho é praticável, é o mais lógico? Existe outra forma melhor de fazer isso?
Alguém conhece algum tutorial de algo parecido?

1 curtida

Existe esse framework que se propõe a fazer isso. Nunca o usei.

http://code.google.com/p/impala/

Depois me fala se é bom :slight_smile:

Olá andrepestana, obrigado por responder.

Parece que o impala é específico para a web:
Impala is a dynamic module framework for Java-based web applications, based on the Spring Framework.

Inicialmente, minha intenção de um sistema assim é pra desktop. Mesmo assim vou dar uma olhada nesse framework.

Estou pesquisando a tempos para encontrar qualquer tipo de experiência para um sistema modular em java mas até agora não consegui muita coisa (quase nada!).

Eu acho que com um pouco de trabalho poderia se fazer um framework assim…

Eu tive uma ideia de como fazer

Ter um arquivo .cfg que mapeie o nome do menu com um nome de classe do jar
Mapeia actions de menus de acordo com o arquivo de configuração
Usar um ClassLoader para carregar as classes quando clicar nos menus.

é como o Mark_Ameba disse. Com um pouquinho de trabalho dá pra fazer o seu próprio esquema para trabalhar com módulos pq é algo muito específico do seu sistema.

É algo do tipo:

  • criar um cadastro de módulos
  • fazer validações para acessar os módulos instalados
  • talvez criar uma funcionalidade para fazer download do módulo na internet
  • verificar dependência entre módulos

abraço,

ah, no caso de baixar os módulos da internet, veja java web start.

http://java.sun.com/javase/technologies/desktop/javawebstart/index.jsp

Acho que entrei levantei uma questão que não vou ter condições de encarar agora; pois meu conhecimento ainda é pequeno em Java. Mas ao menos já tenho noção do tamanho do problema!

Mark_Ameba, vou procurar entender melhor o que quis dizer:
Ter um arquivo .cfg que mapeie o nome do menu com um nome de classe do jar
Mapeia actions de menus de acordo com o arquivo de configuração
Usar um ClassLoader para carregar as classes quando clicar nos menus.

Vou procurar estudar e seguir nesse sentido: arquivo .cfg (item do menu x classe do jar x actions dos menus) e ClassLoader.

andrepestana, mais uma vez obrigado pela resposta.

Confesso que não entendi direito o que quis me dizer:
- criar um cadastro de módulos
Pq eu deveria ter um cadastro de módulos, isso já não foge do conceito de modularidade?

- fazer validações para acessar os módulos instalados
Isso é uma ótima idéia, apesar de eu não saber fazer (ainda).

- talvez criar uma funcionalidade para fazer download do módulo na internet
O sistema ficaria excelente com a possibilidade de fazer o download de novos módulos pela internet (já andei pesquisando e fazendo alguns testes com o java web start, achei muito bom). Obrigado pela dica.

- verificar dependência entre módulos
Ai vc mandou bem, mas me pegou. Vou ter que estudar muito. Tenho a impressão que aplicar esse conceito na prática é difícil.

Imagino um sistema genérico, não específico. Se conseguir fazer, vou colocar o código ai p/ pessoal utilizar.

Pra falar a verdade… gostei bastante da ideia e resolvi trabalhar um pouco nisso… mas… não garanto que farei logo vou fazer por curiosidade e em algum momento poderei usar em produção.

Joel,

Eu dei a ideia de criar um cadastro dos módulos, mas dependendo de como for o seu sistema vc pode incluir dinamicamente.

A idéia é interessante. Daria para criar um framework para incluir módulos de um sistema dinâmicamente.

Mark_Ameba, se quiser uma ajuda podemos criar um projetinho no sourceforge. O que acha?

Olá Mark_Ameba, que bom que gostou da idéia!

Sou iniciante em Java, mas no que eu puder ajudar, pode me chamar que estarei pronto.

A principio, penso numa estrutura pequena (um tipo de kernel, um núcleo), que tenha inteligência de “entender” e “integrar” novas funcionalidades (novos arquivos .jar, com seus respectivos menus, imagens/ícones, etc, etc).

Imagino que isso seja muito útil quando for pensar em customizações de software para diferentes clientes.

Esse módulos, para serem construídos, deveriam seguir uma metodologia (assim qualquer um poderia criar as aplicações de acordo com as necessidades individuais).

Me corrija se estiver falando asneiras.

oi andrepestana, agora entendi o que vc quis dizer com o cadastro de módulos.

Caso decidam levar essa idéia em frente, podem contar comigo no que for preciso.
Tenho certeza que não vou poder ajudar no código - mas talvez em outra coisa eu possa ser útil.

Já precisei fazer algo parecido.

A melhor maneira que achei foi especificar uma classe abstrata (APlugIn) com todos os métodos que o plugin deve ter: getMenuItem(), getDialog(), etc… que especifique somente um construtor, para receber um Façade do módulo ‘main’ na construção - de forma a possibilitar a interação entre eles.

Depois é só iterar na inicialização do programa por todas as classes que estão no classpath verificando quais implementam essa interface… caso você queira poupar o trabalho de editar o Manifest principal a cada adição, antes disso verifica a pasta /plugins por arquivos .jar e adiciona eles através de um Classloader.

Criei um tópico sobre o assunto e coloquei o que fiz lá

http://www.guj.com.br/posts/list/115233.java

Alias… criei um Porjeto no source-forge… quem quiser ajudar pode ver lá.

Só esperar ser aprovado o projeto.

Sugestões são bem vindas ^^