Plug-ins e pacotes configuráveis

Os mecanismos para os plug-ins de suporte são implementados utilizando a estrutura OSGi. A partir deste ponto de vista, um plug-in é a mesma coisa que um pacote configurável OSGi. O pacote configurável e suas classes associadas especificam e implementam o processo para o carregamento de classe Java, gerenciamento de pré-requisito e o ciclo de vida do pacote configurável. Para o restante dessa discussão, utilizamos o plug-in e o pacote configurável de modo passível de mudança, a menos que a discussão seja uma classe específica na estrutura.

Plug-in

A classe de Plug-in representa um plug-in que está em execução na plataforma. É conveniente centralizar os aspectos do ciclo de vida e a semântica geral de um plug-in. Um plug-in pode implementar funções especializadas para os aspectos start e stop do seu ciclo de vida. Cada método do ciclo de vida inclui uma referência para um BundleContext que pode fornecer informações adicionais.

A parte start do ciclo de vida vale uma discussão específica. Já vimos que informações sobre um plug-in podem ser obtidas a partir do arquivo de manifesto do plug-in sem executar qualquer código do plug-in. Normalmente, alguma ação do usuário no ambiente de trabalho gera uma cadeia de eventos que requer o início de um plug-in. A partir do ponto de vista de uma implementação, um plug-in nunca é iniciado até que uma classe contida no plug-in precise ser carregada.

O método start é conveniente para implementar o comportamento da inicialização e do registro de um plug-in. No entanto, é importante perceber que o seu plug-in pode ser iniciado em muitas circunstâncias diferentes. Algo tão simples quanto obter um ícone para decorar um objeto pode fazer com que uma das classes de plug-in seja carregada, iniciando assim o seu plug-in. A inicialização muito desejada pode fazer com que o seu código de plug-in e de dados sejam carregados bem antes do necessário. Portanto, é importante verificar atentamente as tarefas de inicialização do plug-in e considerar as alterantivas para executar a inicialização na inicialização.

Contexto de Pacote Configurável

O gerenciamento do ciclo de vida é onde a terminologia do "pacote configurável" OSGi e a terminologia de "plug-in" da plataforma se encontram. Quando o seu plug-in é iniciado, uma referência a um BundleContext é fornecida, a partir da qual informações relacionadas ao plug-in podem ser obtidas. O BundleContext também pode ser utilizado para descobrir outros pacotes configuráveis/plug-ins no sistema.

BundleContext.getBundles() podem ser utilizados para obter uma matriz de todos os pacotes configuráveis no sistema. Os listeners para BundleEvent podem ser registrados para que o seu plug-in esteja consciente quando outro pacote configurável tiver uma alteração no seu status do ciclo de vida. Consulte o javadoc para BundleContext e BundleEvent para obter informações adicionais.

Antes da versão 3.0, um registro de plug-in (IPluginRegistry) foi oferecido para fornecer informações semelhantes. Por exemplo, poderia ser consultado para os descritores de plugín de todos os plug-ins no sistema. Esse registro agora é reprovado e BundleContext deve ser utilizado para esta finalidade. O registro da plataforma agora é utilizado exclusivamente para obter informações sobre as extensões e os pontos de extensão.

Ativador do Pacote Configurável

A interface do BundleActivator define o comportamento inicial e final implementados no Plug-in. Embora a classe Plug-in seja conveniente para implementar essa função, um desenvolvedor de plug-in tem total liberdade para implementar a interface de BundleActivator em qualquer classe apropriada do design de plug-in. Na verdade, seu plug-in não precisa implementar esta interface se não possuir necessidades específicas do gerenciamento do ciclo de vida.

Pacotes Configuráveis

Debaixo de cada plug-in há um pacote configurável OSGi gerenciado pela estrutura. O Pacote configurável é a unidade OSGi de modularidade. Fundamentalmente, um pacote configurável é apenas uma coleta de arquivos (recursos e código) instalada na plataforma. Cada pacote configurável tem seu próprio class loader Java e inclui protocolo para iniciar, parar e desinstalar a si mesmo. Do ponto de vista da plataforma do Eclipse, o Pacote configurável é meramente uma classe de implementação. Os desenvolvedores de plug-in não estendem a classe do pacote configurável, mas utilizam as implementações de Plug-in ou outro BundleActivator para representar o plug-in.