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 workbench 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 do 3.0, um registro de plugin (IPluginRegistry) foi fornecido 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.