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