Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

2,057 views

Published on

Apresentação usada na palestra sobre modularidade na web com java para o primeiro evento do GrupoSouWebPel

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,057
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
32
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

  1. 1. Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoRegis MachadoEquipe de Software – Líder Técnicoregis.neves@gestum.com.br
  2. 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;
  3. 3. Tecnologias
  4. 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. 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. 6. Então... O que alguns professores não nos dizem nafaculdade é que alguns sistemas podem ser um pouco complexos, por exemplo..
  7. 7. 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
  8. 8. Então...Um exemplo da criatividade do ser humanoquando está sobre pressão e tem que adaptar algo para uma nova função/serviço.
  9. 9. 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
  10. 10. Então...Mesmo a mais simples das aplicações pode ter uma dezena ou mais de bibliotecas...
  11. 11. ? ? ? ? ?? ? ? ?
  12. 12. Várias bibliotecas..Sérios problemas de Jar Hell..
  13. 13. 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...
  14. 14. 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...
  15. 15. E para o cliente...
  16. 16. 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..
  17. 17. 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.
  18. 18. 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;
  19. 19. Ainda não está convencido??
  20. 20. 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;
  21. 21. O Framework
  22. 22. 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
  23. 23. MódulosManifest-Version: 1.0Export-Package: greenpages;version="2.3.0"Bundle-Vendor: SpringSource Inc.Bundle-Version: 2.4.0Tool: Bundlor 1.0.0.RELEASEBundle-Name: GreenPages ServiceBundle-ManifestVersion: 2Bundle-SymbolicName: greenpagesImport-Package: org.springframework.stereotype;version="[3.0, 3.1)"
  24. 24. 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;
  25. 25. Arquitetura de Class Loaders
  26. 26. Ciclo de vida
  27. 27. • 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;
  28. 28. • 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.
  29. 29. 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>
  30. 30. Exemplo, serviço OSGI referenciando um bean spring: <beans:beans xmlns="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" <service ref=“UserService" interface=“br.com.gestum.souwebpel.evento.exemplo.UserService "/> </beans:beans>
  31. 31. 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.
  32. 32. Virgo Snaps – Configurando o web.xml do WAB HOST<filter><filter-name>host-filter-name</filter-name><filter-class>org.eclipse.virgo.snaps.core.SnapHostFilter</filter-class></filter><filter-mapping><filter-name>host-filter-name</filter-name><url-pattern>/*</url-pattern><dispatcher>INCLUDE</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>REQUEST</dispatcher></filter-mapping>
  33. 33. Virgo Snaps – Configurando o header dos WABSnap-Host: br.com.gestum.souwebpel.event.wabhost;version="${version:[=. =.=, =.+1)}"Snap-ContextPath: /dog{....} No arquivo META-INF/snap.propertiesPodem ser colocadas as propriedades que desejar.
  34. 34. 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>
  35. 35. Obrigado!!!Dúvidas?

×