Pergunta

Como você poderia implementar um sistema de Plugin para sua aplicação Java?

É possível ter um fácil de usar (para o desenvolvedor) sistema que alcança o seguinte:

  • Usuários colocar seus plugins em um subdiretório do aplicativo
  • O plugin pode fornecer uma tela de configuração
  • Se você usar um quadro, é a licença compatível com developement comercial?
Foi útil?

Solução

Primeiro você precisa de uma interface que todos os plugins precisa implementar, por exemplo.

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

Plugin autores devem, então, agrupar seus plugins em arquivos JAR. Suas aplicações abre o arquivo JAR e poderia, então, usar um atributo de manifesto JAR ou a lista de todos os arquivos do arquivo JAR para encontrar a classe que implementa a interface Plugin. Instanciar essa classe, o plugin está pronto para ir.

Claro que você também pode querer implementar algum tipo de sandboxing para que o plugin é restrito no que pode e não pode fazer. Eu criei um pequeno aplicativo de teste (e blog sobre isso ), que consiste em dois plugins, um dos quais é negado o acesso aos recursos locais.

Outras dicas

Use OSGi .

É a base do plug-in sistema de Eclipse. Equinox é a implementação do Eclipse (licenciado EPL) e Felix é a implementação do Projeto Apache (licenciado Licença Apache Pública).

Eclipse fornece um exemplo concreto que OSGi podem cobrir os pontos que você mencionou (ou você poderia simplesmente construir a sua aplicação em cima Eclipse RCP se você quiser um Eclipse completo / SWT / JFace pilha).

Desde 1,6, houve java.util.ServiceLoader que pode ser usado se você quiser código de seu próprio sistema simples.

Mas se você quiser algo mais do que características básicas, use um dos quadros existentes.

Eu trabalhei em OSGi por uma semana - uma intensa, nada, mas OSGi semana. No final, foi como um sonho ruim, mas eu aprendi muito.

Eu era capaz de conseguir OSGi de trabalho (não é fácil, todos os exemplos estão fora da data, tudo na net é, pelo menos, três anos de idade, se não cinco), mas eu tinha sérios problemas começá-lo integrado em um projeto existente por causa de problemas com os manifestos jar.

Em suma, existem apenas algumas ferramentas obscuros usados ??para a construção de manifestos e eles não estão bem documentados (BND Tools é pouco obscura, mas é projetado para um determinado processo no Eclipse). Além disso, a maioria das informações OSGi disponível não é voltado para desenvolvedores de aplicativos que têm uma aplicação desktop existente.

Isso faz com que uma grande parte do contexto para o nevoeiro informações ou impróprio. posts de Neil Bartlett foram a maior ajuda, mas mesmo aqueles que não conseguiram obter um sistema de trabalho (eu agarrei algum código do Felix tutorial e Pieced-lo em conjunto para obter a estrutura integrada rolando). Eu encontrei o seu projecto de livro que ele publicou há anos livres atrás, o que é excelente, mas os exemplos em Eclipse não funcionam por causa de alterações no suporte Eclipse OSGi.

Cada passo é um grande obstáculo. Vou tentar postar mais alguns detalhes aqui mais tarde.

Use PF4J . Ele tem suporte para Web, Primavera e Wicket. Fácil de usar e construir as aplicações

Eu acho que recomendando OSGi para resolver o problema mencionado acima é extremamente conselho pobres. OSGi é "a escolha certa", mas para um cenário como o descrito acima, eu acho que qualquer JPF ou alguma estrutura minimalista homegrown é suficiente.

Anos atrás eu comecei um projeto como esse e espero que em breve será ready.I foi inspirado por projetos como NetBeans e Eclipse, mas entretanto mudou para algo um pouco diferente pouco. OSGi parece uma boa escolha agora, mas eu não tive a oportunidade de compará-lo com o meu project.It é semelhante com JPF mencionado acima, mas ao mesmo tempo diferente de muitas maneiras.

A idéia básica que me motivou é ser o mais fácil possível para construir aplicações Java, sem separação entre aplicações web, aplicações desktop ou applet / JWS aplicações (é claro que isso não cobre o UI - ainda) como um funcionalidade núcleo.

Eu construí o projeto com alguns objetivos em minha mente:

  • não importa se você construir uma aplicação web ou uma aplicação desktop que você deve começar a aplicação da mesma forma, um método main simples, Sem declaração fantasia web.xml (não que eu sou contra ter um padrão da web descritor, mas não vai bem com um sistema plug-in, onde você adicionar "servlets" - eu chamo-lhes RequestHandler (s) -. dinâmica à sua vontade)
  • fácil de ligar em "extensões" em torno de um "ponto de extensão" -. Algo de Eclipse, mas uma abordagem diferente
  • , uma vez que todos os plugins são registrados (arquivos XML) auto-implementável a aplicação deve ser independente auto-implementável do sistema de construção - é claro que não é uma tarefa Ant e uma MOJO Maven que são as ligações com o mundo ourside, mas no final ele chama o aplicativo e instruí-lo a auto-implantar-se em um local específico.
  • emprestado do Maven, pode baixar o código a partir de repositórios (incluindo Maven 1 e 2 repositórios) para que o seu aplicativo pode ser implementado como um único frasco pequeno, desde que você tenha acesso aos repositórios (às vezes útil, e, basicamente, este fornece suporte para atualizações automáticas -?. você não amo a idéia de ser notificado pelo seu aplicativo web que não há uma versão mais recente, ele foi baixado e ele só precisa da sua permissão para instalá-lo Eu sei que eu amo isso)
  • monitoramento básico aplicação sobre a saúde do sistema, notificações de e-mail em caso de falhas
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top