Inter-plugin comunicação no Eclipse
Pergunta
É possível criar Eclipse plugins que auto-descobrir um ao outro?
Estou desenvolvendo um conjunto de plugins que precisa para operar em duas situações principais:
- individualmente
- em conjunto com os outros.
Quando executado individualmente, os plugins deve "apenas trabalho", mas quando em conjunto, eles vão estar compartilhando alguns do mesmo conteúdo do modelo, e um dos plugins deve apresentar ao usuário uma lista de outros plugins para compartilhar conteúdo com. por exemplo:
Foo Plugin detectado o seguinte plugins que podem compartilhar ontologias com:
[] Bar plug-in
[] Baz plug-in
[] Não compartilhar
O Eclipse oferece nenhum métodos publicação / detecção internos que facilitem esse tipo de auto-detecção de outros plugins?
Solução
A resposta deve ser através Serviço declarativa , que combina as vantagens de ambas as extensões XML eclipse e serviços OSGi POJO. Algo que é implicitamente dinâmico como serviços OSGi, mas carregado “on demand”, como extensões de eclipse.
Introduzida em 2006 para eclipse3.3, você vai encontrar esses conceitos ilustrados na esta apresentação .
declarativa Serviços dá a opção para definir a referência a outros serviços. Também é possível especificar a cardinalidade da referência. A cardinalidade é especificada utilizando dois números, o primeiro um, 0 ou 1, indica a possibilidade de opção, a segunda, uma ou N, indica a multiplicidade.
Na prática, os DS (declarativa Services) não são fáceis de usar, como você tem que acessar o BundleContext, ou seja, manter o controle das BundleActivator, não é que é sempre fácil ...
Se o que você precisa é definir algum tipo de Service Oriented Component Model, este apresentação deve fornecê-lo com as diferentes alternativas existentes hoje, bem como detalhando os "declarativa Services"
Para publicar o que rcreswick encontrou em relação com o DS:
- Introdução ao OSGi: Apresentando declarativa Serviços
- Introdução ao OSGi: declarativa Serviços e Dependências
Outras dicas
Bem, o registro de serviço OSGi pode realizar o compartilhamento de serviços baseados POJO em tempo de execução, não os próprios plugins. Existem várias opções para facilitar este, como codificação diretamente para a API OSGI, Serviços declarativas, Primavera DM e iPojo (estou certo de que há outros também).
Você pode querer verificar o padrão Whiteboard como um meio de realizar uma solução estilo Observer dinâmica / observável.