Artigo no estilo: Curso

De que se trata o artigo:

O artigo trata do desenvolvimento de aplicações modulares desktop com OSGi utilizando o framework Spring Dynamic Modules e a plataforma OSGi Equinox.


Para que serve:

O Spring DM simplifica o desenvolvimento de aplicações modulares, facilitando a publicação e o consumo de serviços através da utilização de poucas linhas de XML.


Em que situação o tema é útil:

O Spring DM é bastante útil para o desenvolvimento de aplicações modulares com OSGi, tanto por facilitar o desenvolvimento quanto por possibilitar utilizar todos os recursos do Spring Framework nos bundles OSGi.

OSGi com Spring Dynamic Modules – Parte 1:

Neste artigo é discutido o desenvolvimento de aplicações modulares com OSGi utilizando o framework Spring Dynamic Modules. Esse framework facilita o desenvolvimento dos módulos na medida em que simplifica a publicação e o consumo de serviços pelos bundles. Com o Spring DM, essas atividades são feitas de forma declarativa através do arquivo de configuração XML do Spring Framework, de forma que a aplicação não fica dependente da API do OSGi.

O OSGi é uma tecnologia para criação de softwares modulares em Java que possibilita a criação de módulos coesos e que disponibiliza uma forma desses módulos se comunicarem. Os módulos, em OSGi, são chamados de bundles e são, basicamente, arquivos JAR com algumas informações adicionais em seu MANIFEST.MF, como um nome, sua versão, os pacotes que ele importa de outros bundles ou que ele exporta para outros bundles, dentre outras. Todos esses bundles ficam em um contêiner OSGi, no qual permanecem durante todo o seu ciclo de vida. Existem diversas implementações de contêineres no mercado, sendo as mais famosas o Equinox, da fundação Eclipse, e o Felix, da Apache.

Com o OSGi, é possível instalar, atualizar e desinstalar os módulos de uma aplicação sem precisar pará-la. Isso torna possível, por exemplo, atualizar parte de um sistema web rodando em um servidor, seja para incluir novos recursos ou corrigir bugs, sem afetar nenhuma das outras partes e sem precisar parar o servidor. Além disso, sistemas desktop podem baixar suas atualizações e instalá-las sem precisar interromper o usuário.

Adicionalmente, o OSGi possui um modelo de programação no qual um bundle pode publicar serviços que podem ser consumidos por outros bundles. Toda a comunicação entre eles se dá através desses serviços, de modo que o acoplamento entre os módulos é o mais baixo possível. Quando estamos programando com OSGi, o nosso trabalho é, basicamente, criar os módulos, definir os seus serviços, publicar esses serviços e consumir os serviços de outros módulos. Tudo isso é feito com o auxílio da API do OSGi e de algumas classes especiais que controlam o ciclo de vida dos bundles.

Para simplificar o desenvolvimento de softwares com OSGi, a SpringSource criou o framework Spring Dynamic Modules, também conhecido como Spring DM, que funciona dentro do contêiner OSGi facilitando o registro e consumo de serviços, além de prover aos bundles um mecanismo de injeção de dependências e todos os demais recursos que o Spring Framework possui.

Este artigo é o primeiro de um conjunto de dois artigos que tem como objetivo apresentar o Spring Dynamic Modules e mostrar como ele facilita o desenvolvimento de software com OSGi, tanto em aplicações desktop quanto em aplicações web. Para isto, assumimos que o leitor já possui um conhecimento mínimo da tecnologia OSGi. Se não for o caso, recomendamos a leitura do livro OSGi in Practice, que está licenciado sob a Creative Commons e cujo endereço para download pode ser encontrado na seção Links ao final do artigo. Um certo conhecimento do mecanismo de injeção de dependências do Spring também é desejável.

Spring Dynamic Modules

O Spring Dynamic Modules é um projeto da SpringSource que tem como objetivo simplificar o desenvolvimento de softwares modulares com OSGi. Ele permite que serviços OSGi sejam publicados e consumidos utilizando algumas simples linhas de XML, o que torna um bundle OSGi totalmente independente da API do OSGi. Isso significa que não haverá mais a necessidade de se criar classes que implementam a interface BundleActivator, não será mais necessário utilizar o BundleContext, os ServiceTrackers e as ServiceReferences para trabalhar com serviços, e que os ServiceTrackerCustomizers também não serão mais necessários para observar eventos relacionados a publicação de serviços. Além disso, com o Spring Dynamic Modules, é possível utilizar todos os recursos do Spring Framework em um bundle OSGi.

Para utilizar o Spring Dynamic Modules é interessante que se tenha algum conhecimento do mecanismo de injeção de dependências do Spring. Assim, o leitor deve estar familiarizado com os arquivos applicationContext.xml que servem para definir os beans gerenciados pelo Spring e suas dependências. No Spring Dynamic Modules, o arquivo XML de configuração do Spring está localizado dentro do diretório META-INF/spring, podendo ter qualquer nome.

Para publicar um serviço, utilizaremos a tag <osgi:service/>, especificando qual o bean do Spring implementa esse serviço e qual a interface do serviço. Feito isso, o Spring DM criará uma instância do bean do Spring e o publicará no registro de serviços OSGi sob a interface informada na tag.

Para consumir um serviço, utilizamos a tag <osgi:reference/>, na qual setamos um id para a referência ao serviço e a interface do mesmo que se deseja utilizar. Após isso, podemos injetar o serviço em qualquer bean do Spring como se ele fosse um outro bean qualquer. Para realizar essa injeção, pode-se utilizar tanto a configuração com XML, através das tags <property/> ou <constructor-arg/> do Spring, quanto com anotações, utilizando @Resource, por exemplo.

Quando utilizamos essas tags, o Spring DM automaticamente cria proxies para os serviços OSGi de forma que esses serviços possam ser publicados ou buscados em tempo de execução. Se um serviço desaparece, o proxy para o serviço irá esperar que ele reapareça para poder utilizá-lo. Quando um bundle é iniciado, o Spring DM cria o application context especificado pelos arquivos XML de configuração, cria proxies para os serviços e publica esses serviços no registro de serviços OSGi. Quando um bundle é parado, o Spring DM cancela quaisquer serviços publicados por esse bundle e fecha o seu application context. Dessa forma, é possível trabalhar com OSGi praticamente de forma transparente, sem conhecer os detalhes de como ele funciona internamente.

A seguir, mostraremos como criar aplicações OSGi utilizando o Spring Dynamic Modules. Neste primeiro artigo serão criadas apenas aplicações desktop, enquanto que no segundo artigo apresentaremos a implementação de aplicações web, de forma que será possível ver o potencial do Spring Dynamic Modules em diversas situações de criação de aplicações modulares.

Desenvolvendo aplicações modulares OSGi e Spring DM

Veremos agora como criar aplicações modulares com OSGI e Spring Dynamic Modules. Inicialmente, apresentaremos como configurar o ambiente de desenvolvimento para trabalhar com OSGi e, em seguida, vamos implementar dois exemplos: primeiro, um “Hello, World!”, para mostrar como configurar o Spring DM e, em seguida, um exemplo mais completo, que utiliza diversos recursos do OSGi e do Spring DM.

Configurando o ambiente de desenvolvimento

...

Quer ler esse conteúdo completo? Tenha acesso completo