Idéia Plugins Desenvolvimento para aplicativos Java Desktop

Boa tarde!

Atualmente estou trabalhando no desenvolvimento de um software gráfico o qual esta ficando muito grande e com muitas evoluções. Hoje o software esta desenvolvido com Swing com o auxilo de algumas apis de gráfico como o Jgraph. Eu Estava querendo quebrar esse aplicativo em aplicativos menores como se fossem plugins. No caso esses plugins seriam para as evoluções constantes que estão acontecendo com o software. Abaixo vou descrever os possiveis plugins:
Plugin para Configurar o Gráfico (Ex: Cor de fundo, fonte, etc.)
Plugin para Exportar em HTML
Plugin para Exportar para Banco de Dados
etc…

Na verdade o software continuaria funcionado normalmente como funciona hoje apenas seira criado um novo menu plugins onde estaria todas essas implementações citadas acima. Vcs acham que é interessante? Como vcs fariam isso?
Desde já agradeço a ajuda de todos!!

Esqueci de comentar algo!

Para esses novos plugins estou pensando em criar um novo projeto Java e criar esse no plugin e depois importar o .jar para o aplicativo que usará esse plugin. Quando for alterar algum código que esteja nesses puglins somente será alterado o projeto do plugin e importado novamente o .jar alterado, não precisando alterar em nada o aplicativo central.

Cara tive essa mesma idéia semana passada porém ainda não pensei em comoo fazer.

Bom dia, Rogerio Esteves e ftorres.

Creio que o que vocês precisam é similar à ideia aplicada no ImageJ (http://rsbweb.nih.gov/ij/, fonte: http://rsbweb.nih.gov/ij/download.html). Nele, o usuário pode criar plugins (em linguagem java) e adicionar ao programa simplesmente colocando o arquivo java compilado (.class) dentro de uma pasta chamada plugins. O ImageJ detecta automaticamente esse arquivo com um plugin. É necessário seguir algumas convenções, como o nome do plugin terminar em _ (underline) e cada plugin estender a classe “PlugIn”, mas funciona. Eu mesmo estou pesquisando este código fonte a fim de fazer algo similar em um projeto próprio.

Uma outra forma que imagino é através do uso de reflection (http://docs.oracle.com/javase/tutorial/reflect/index.html), como já me foi sugerido uma vez, mas conheço pouco sobre esta técnica.

Abraços.

Bom, essa ideia é tão boa que existem plataformas prontas para se fazer isso. A que mais gosto é a Plataforma Eclipse.

Como você usa Swing, a plataforma NetBeans pode lhe ser útil pra tratar da questão dos plugins.

Digo isso porque de nada adianta você modularizar o software com plugins se ele depender dos plugins para funcionar (como o software se comportará se não houver o plugin para exportar os dados para o BD?).

Nesse caso, o plugin deveria incluir uma extensão de menu (ou algo do tipo) para poder fazer a ação de exportar os dados, e deveria ter acesso aos dados para exportar (o que acabaria trazendo a necessidade de um plugin para os dados também). Isso no Eclipse RCP é facilmente resolvido (por ser nativo da plataforma). No NetBeans eu não sei como seria.

Mais um detalhe: a plataforma do IntellijIDEA é aberta, mas é apenas para ferramentas de codificação. Mas vale a pena estudá-la também caso você decida fazer a sua.

A tecnologia se chama OSGi (JSR=não me lembro agora).

O Eclipse utiliza esta ideia, acredito que toda estrutura desta IDE é baseada em OSGi; o nome do framework (gerenciador de plugins) é Equinox.

No Netbeans a idéia é similar mas a implementação é outra; é um sistema de controle de módulos dinâmicos. Se utilizar na integra seu sistema ficará com a cara do netbeans - dependendo do caso pode até ser uma boa rsrsrs.

Se você já utilizou o Eclipse / Netbeans já provou da eficiência da tecnologia; especialmente se fez algumas atualizações de plugins automaticamente.

Um ponto que tem que ficar atento ao utilizar esta ideia é o controle de versões; tem que ser bem feito senão pode virar bagunça.

Não acho muito simples, porem é a última (que eu saiba) resposta para o problema de modularizações em sistemas Java.

flws