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

41
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo Regis Machado Equipe de Software – Líder Técnico [email protected]

description

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

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

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

Modularidade na Web com Java: Desenvolvimento OSGI Web

com Eclipse VirgoRegis MachadoEquipe de Software – Líder Técnico [email protected]

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

• 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;

Formada em Pelotas;

Especializada em educação corporativa;

Entre os 5 maiores players do seguimento;

Bases em três estados: SP, RJ e RS;

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

Tecnologias

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

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.

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

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

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

Então...

O que alguns professores não nos dizem na faculdade é que alguns sistemas podem ser um

pouco complexos, por exemplo..

Page 7: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Page 8: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

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

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

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.

Page 10: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Page 11: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

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

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

Então...

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

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

??

?

?

??

?

?

?

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

Várias bibliotecas..

Sérios problemas de Jar Hell..

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

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...

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

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...

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

E para o cliente...

Page 18: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Page 19: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

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..

Page 20: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Page 21: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

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.

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

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;

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

Ainda não está convencido??

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

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;

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

O Framework

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

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

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

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)"

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

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;

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

Arquitetura de Class Loaders

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

Ciclo de vida

Page 31: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Page 32: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

• 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;

Page 33: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Page 34: Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo

• 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.

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

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>

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

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>

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

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.

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

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>

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

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.

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

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>

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

Obrigado!!!

Dúvidas?