OSGi com Spring Dynamic Modules – Parte 2
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
...
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.