SlideShare una empresa de Scribd logo
1 de 41
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
•   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;
Tecnologias
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.
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
Então...

 O que alguns professores não nos dizem na
faculdade é que alguns sistemas podem ser um
       pouco complexos, por exemplo..
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
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.
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
Então...

Mesmo a mais simples das aplicações pode ter
    uma dezena ou mais de bibliotecas...
?
                ?           ?
    ?               ?
?           ?
    ?                   ?
Várias bibliotecas..

Sérios problemas de Jar Hell..
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...
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...
E para o cliente...
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..
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.
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;
Ainda não está convencido??
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;
O Framework
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
Módulos

Manifest-Version: 1.0
Export-Package: greenpages;version="2.3.0"
Bundle-Vendor: SpringSource Inc.
Bundle-Version: 2.4.0
Tool: Bundlor 1.0.0.RELEASE
Bundle-Name: GreenPages Service
Bundle-ManifestVersion: 2
Bundle-SymbolicName: greenpages
Import-Package:
  org.springframework.stereotype;version="[3.0, 3.1)"
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;
Arquitetura de Class Loaders
Ciclo de vida
• 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;
• 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.
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>
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>
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.
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>
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.
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>
Obrigado!!!

Dúvidas?

Más contenido relacionado

La actualidad más candente

Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoRegis Magalhães
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openrukoÉverton Ribeiro
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!Bruno Borges
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJoão Longo
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com JenkinsAécio Pires
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JSEduardo Nunes Pereira
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 

La actualidad más candente (20)

Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!
 
Java web
Java webJava web
Java web
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a Objetos
 
JBoss Fuse Workshop Desenvolvimento - Parte 1
JBoss Fuse Workshop Desenvolvimento - Parte 1JBoss Fuse Workshop Desenvolvimento - Parte 1
JBoss Fuse Workshop Desenvolvimento - Parte 1
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com Jenkins
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
Introdução a Frameworks
Introdução a FrameworksIntrodução a Frameworks
Introdução a Frameworks
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JS
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScript
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 

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

Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos JavaMarcio Marinho
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaAna Albert
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPjesuinoPower
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma JavaEteg
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Java EE no ambiente corporativo: primeiros passos WebLogic 12cJava EE no ambiente corporativo: primeiros passos WebLogic 12c
Java EE no ambiente corporativo: primeiros passos WebLogic 12cBruno Borges
 

Similar a Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo (20)

Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
1409243945064
14092439450641409243945064
1409243945064
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Palestra
PalestraPalestra
Palestra
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Cursos
CursosCursos
Cursos
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SPBoas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
Boas práticas na criação de aplicações sérias com JavaFX - TDC 2014 SP
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
 
Inovando na Plataforma Java
Inovando na Plataforma JavaInovando na Plataforma Java
Inovando na Plataforma Java
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Java EE no ambiente corporativo: primeiros passos WebLogic 12cJava EE no ambiente corporativo: primeiros passos WebLogic 12c
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...
  • 13. ? ? ? ? ? ? ? ? ?
  • 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...
  • 17. E para o cliente...
  • 18.
  • 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;
  • 23. Ainda não está convencido??
  • 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
  • 27. Módulos Manifest-Version: 1.0 Export-Package: greenpages;version="2.3.0" Bundle-Vendor: SpringSource Inc. Bundle-Version: 2.4.0 Tool: Bundlor 1.0.0.RELEASE Bundle-Name: GreenPages Service Bundle-ManifestVersion: 2 Bundle-SymbolicName: greenpages Import-Package: org.springframework.stereotype;version="[3.0, 3.1)"
  • 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;
  • 31.
  • 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>
  • 36. 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>
  • 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.
  • 38. 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>
  • 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>