Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
1. Modularidade na Web com Java:
Desenvolvimento OSGI Web
com Eclipse Virgo
Regis Machado
Equipe de Software – Líder Técnico
regis.neves@gestum.com.br
2. • Régis Machado;
• Formado em Análise e
desenvolvimento de Sistemas,
Faculdade Senac;
• Líder Técnico na Gestum;
• Mais de 3 anos trabalhando com
JavaEE;
4. OSGI? O quê é isso?
• Open Services Gateway Initiative, termo obsoleto.
• Especificação criada e mantida pela OSGI Alliance;
• OSGI Alliance foi fundada em 1999, por empresas como
IBM, SUN, MOTOROLA, entre outras;
• Atualmente empresas como Adobe, Mitsubishi
Electric, Telefônica, Red
Hat, Siemmens, Oracle, VMWare e dezenas de outras
empresas apóiam o desenvolvimento e evolução da
plataforma OSGI;
• A primeira especificação foi lançada no ano de 2000, e
atualmente está na versão 4.3.
• É usado em automóveis, mobiles, servidores, automação
industrial, etc.
5. Os problemas atuais no
desenvolvimento.
• Softwares cada vez mais complexos, devido a
pequenos ciclos de novas implementações que
elevam cada vez mais o custo de se trabalhar
no Software;
- OSGI Alliance – www.osgi.org
6. Então...
O que alguns professores não nos dizem na
faculdade é que alguns sistemas podem ser um
pouco complexos, por exemplo..
7.
8. Os problemas atuais no
desenvolvimento.
• Atualmente desenvolvedores passam mais
tempo adaptando funcionalidades existentes
para rodar/atender à novas
plataformas/serviços;
- OSGI Alliance – www.osgi.org
9. Então...
Um exemplo da criatividade do ser humano
quando está sobre pressão e tem que adaptar
algo para uma nova função/serviço.
10.
11. Os problemas atuais no
desenvolvimento.
• Um grande número de bibliotecas prontas
existem o que tornou complexo a tarefa de
gerenciar estas várias dependências que as
vezes causam incompatibilidades.
• - OSGI Alliance – www.osgi.org
12. Então...
Mesmo a mais simples das aplicações pode ter
uma dezena ou mais de bibliotecas...
15. Depois de todos esses
problemas, o resultado interno...
• Falta de qualidade, devido a complexidade,
altos acoplamentos, estrutura engessada.
• Problemas com clientes, perda de confiança,
prejuízos, cobranças de melhora;
• Perda de produtividade e motivação nas
equipes.
• Então...
16. Depois de todos esses problemas
internos, o resultado externo...
• Após entender as complexidades e fazer as
adaptações, adicionar ou atualizar as
bibliotecas necessárias fazer as validações e
verificações, é só avisar o cliente que você
atualizou o ambiente dele.
• Sorte que as vezes o cliente pode ter só
algumas centenas de usuários online...
• Então...
19. Depois disso tente explicar...
• Que por causa do sistema ter ficado 15 minutos fora do
ar com 1000-1500 pessoas online e acabou
impossibilitando ele de ter 2 ou 3 vendas...
• E que na próxima atualização serão mais 15 minutos se
tudo correr bem.
• Uma atualização por semana...
• 60 minutos, algo como 8 a 12 vendas a menos no fim do
mês...
• Talvez R$ 1.000 de prejuízo para o cliente ou bem mais..
• Só nas atualizações o teu cliente poderia estar te
pagando um pouco mais por esse beneficio de atualizar
sem reiniciar..
20.
21. OSGI
• Especificação que define como componentes
devem ser instalados e gerenciados.
• Os componentes são chamados de Bundles;
• A especificação cria uma camada chamada de
Ambiente OSGI, e possibilita de maneira
transparente o acesso ao ambiente.
22. Será que OSGI é a solução?
• Reduz a complexidade
• Bundles independentes; Esconde as parte Interna;
Expõe interface de serviços bem definida;
• Reuso
• Fácil implantação
• Define o padrão dos Bundles, como devem ser
gerenciados e instalados;
• Dinâmico
• Podem ser instalados, iniciados, parados,
atualizados e desinstalados sem precisar para toda
a aplicação;
24. Outras vantagens
• Seguro, construído sobre a arquitetura de
segurança do Java;
• Adaptabilidade, os componentes podem ver os
serviços disponíveis e se adaptarem a isso;
• Controle de versões, adeus “Jar Hell”;
• Simples, API com menos de 30 classes/interfaces;
• Pequeno, implementado em um Jar com menos de
300kb;
• Rápido, levanta os bundles e carrega as classes
necessários de acordo com as dependências;
• Não intrusivo, os bundles podem ser POJOS;
26. Módulos
• O Framework OSGi providencia uma solução padronizada para
modularização em java;
• Uma unidade modular (componente) é conhecida como Bundle;
• Bundles são Java Archives (Jar), para diferenciar de um jar comum, é
usado o tipo MIME:
• application/vnd.osgi.bundle
• Um Bundle pode conter, classes java, html, imagens, um bundle pode
ter outros jar que podem ser disponibilizados como recursos ou
classes, porém isso não é recursivo.
• Um Bundle possui um manifest com um cabeçalho que define
diversas informações como os pacotes importados e exportados,
capacidades, informações dos fornecedores, nome, versão, i18n,
licença, requisitos. Este manifest fica em localizado em:
• META-INF/MANIFEST.MF
28. Arquitetura de Class Loaders
• Class path de inicialização – contém o pacote
java.* e os seus pacotes de implementação.
• Framework class path – O Framework
normalmente tem um class loader para as
classes de implementação e as interfaces dos
principais serviços;
• Bundle Space – O bundle space consiste do
arquivo JAR associado ao bundle, mais JAR
adicionais que estão muito ligados ao bundle;
32. • Projeto mantido pela Fundação Eclipse e
apoiado pela SpringSource (VMWare);
• Usa o framework OSGI Equinox e integra as
funcionalidades OSGI com o Spring
Framework, tornando o Spring um “First Citizen
class” Framework no ambiente de execução
OSGI;
• Pronto para ser usado em produção, kernel
integrado com o Tomcat ou Jetty;
• Logs coordenado e gerenciado pelo Framework
LogBack;
33.
34. • Bundles continuam sendo POJOS;
• Todo o poder dos header OSGI declarados no
META-INF/MANIFEST.MF;
• Beans Spring podem ser exportados como
serviços OSGI facilmente.
• Simples de migrar aplicações web não OSGI
para OSGI.
35. Exemplo, bean spring declarado:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-
2.5.xsd">
<bean id=“UserService"
class=“br.com.gestum.souwebpel.evento.exemplo.UserService"/>
</beans>
37. Virgo Snaps
• Possibilita verificar se um Bundle está
disponível a partir da view.
• Usa Bundles web, conhecidos como WAB.
• Um dos WAB deve ser o host principal.
39. Virgo Snaps – Configurando
o header dos WAB
Snap-Host:
br.com.gestum.souwebpel.event.wabhost;version="${version:[=.
=.=, =.+1)}"
Snap-ContextPath: /dog
{....} No arquivo META-INF/snap.properties
Podem ser colocadas as propriedades que desejar.
40. Virgo Snaps – Usando a
taglib
<%@ taglib prefix="snaps" uri="http://www.eclipse.org/virgo/snaps"
%>.
{... Seu código aqui}
<!– Procurando por todos os WAB instalados usando o Snaps-->
<snaps:snaps var="snaps">
<c:forEach var="snap" items="${snaps}">
<a href="<c:url
value="${snap.contextPath}${snap.properties['link.path']}"/>">
${snap.properties['link.text']}</a>
</c:forEach>
</snaps:snaps>