OSGi™ – Um Sistema Dinâmico de Módulos para Java Raoni Kulesza [email protected] MAC-5863 Sistemas de Middleware Avançados 2006/2 Prof. Dr. Francisco Reverbel IME-USP, 28/11/2006 Agenda • Introdução • Arquitetura Base do Framework OSGi – Ambiente de Execução – Módulos – Ciclo de Vida – Serviços – Segurança • Aplicações e Ferramentas OSGi • Considerações Finais • Referências 2 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Introdução • Open Services Gateway Initiative – OSGi Alliance – Fundada em março de 1999 – Organização independente, sem fins lucrativos – Define e promove especificações abertas para distribuição de serviços gerenciáveis através de ambientes em rede • Especificações da OSGi Service Platform • Aberta e Padronizada • Orientado a componentes • Serviços em rede 3 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Objetivos da OSGi Service Platform • Framework Java™ para desenvolver software baseado em componentes que possibilite implantação remota e: – Confiável – Distribuição e Gerenciamento em Larga Escala – Vários tipos de dispositivos – Colaborativo • Criado através de colaboração de várias indústrias • Atualmente na especificação 4.0 • Procura resolver problemas da área de desenvolvimento baseado em componentes 4 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Arquitetura Base Comunicação Gerenciamento Implantação 5 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Ambiente de Execução • As APIs usam apenas um sub-conjunto de J2SE e J2ME CDC – AE OSGi Mínimo • Implementações podem estender o AE OSGi Mínimo • Segurança não é obrigatório • Possibilidade de compatibilidade com CLDC 6 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Módulos - Bundles • Bundles – Unidade de modularização (JAR) – Código, Manifest, Recursos e [OSGIOPT] • Pode-se importar e exportar serviços • Vários bundles podem ser executados numa única JVM 7 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Módulos – Carga de Classes • Estende o modelo de implantação da plataforma Java – Modularização, Proteção e Controle de Versão – Framework OSGi é uma rede de classloaders • Boot -> Framework -> Bundle space 8 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Módulos – Dependências • Bundles devem ser resolvidos pelo framework (resolver) – O processo de associar pacotes exportados e importados para um bundle • Deve ser realizado antes de carregar e executar o bundle • Descrito através de cabeçalhos específicos do arquivo de MANIFEST – Import-Package Header – Export-Package Header – Required-Bundle Ex.: Import-Package: br.usp.ime.foo; br.usp.ime.bar; version=“[1.0,1.24]“; resolution:=mandatory 9 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Módulos – Resolução de Dependência Framework org.osgi.framework org.osgi.service.http Bundle A Export org.osgi.service.log com.ibm.service.log com.ibm.j9 Import org.osgi.service.http javax.servlet.http Bundle B Export ericsson.osgi javax.servlet javax.servlet.http org.osgi.service.log Import org.osgi.service.http org.osgi.service.log 10 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java A resolved B resolved Ciclo de Vida – Visão Geral • Define uma API para controlar operações de segurança e ciclo de vida dos bundles – Instalação – Inicialização – Finalização – Atualização – Desinstalação – Monitoração • Disponibiliza acesso ao framework (system bundle) • Permite o gerenciamento remoto da plataforma 11 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Ciclo de Vida – Arquitetura 12 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Ciclo de Vida – Funcionamento • O Bundle é iniciado pela classe Bundle Activator (definido no Manifest) • 2 métodos – Start: Inicializa o mais rápido possível – Stop: desaloca recursos • Bundle Context provê acesso ao framework • Framework provê serviço com níveis e grupos de inicialização 13 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Serviços – Visão Geral • Serviços são objetos Java normais que são registrados através de uma ou mais interfaces Java no registro de serviços (Service Registry) • Publicação, Pesquisa e Acoplamento dinâmico • Políticas de acesso e controle de versão para serviços • Rastreamento de serviços durante a reinicialização do framework • Provê arquitetura orientada a serviços “in-VM” 14 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Serviços - Arquitetura 15 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Serviços - Funcionamento • Registrando Serviços – ServiceRegistration e ServiceReference – BundleContext.registerService() • Propriedades de Serviço – Par de chave-valor – Informações que descrevem serviços para seu “público” • Identificador de Persistência (Persistent Identifier – PID) – Auxilia no controle de reinicialização do framework • Localizando Serviços – Obtém ServiceReference através de BundleContext.getServiceReference() 16 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Modelo de Colaboração • O framework OSGi é mais do que um ambiente de execução de Applets, MIDlets, Xlets • Bundles podem colaborar através de: – Objetos de serviços – Compartilhamento de pacotes • O registro dinâmico permite que os bundles procurem e rastreiem objetos de serviços • O framework gerencia essa colaboração – Dependencias, segurança 17 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Modelo de Colaboração OSGi Framework Service registry Bundle Bundle packages packages JAVA Operating System Hardware 18 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Modelo de Colaboração Java Application Manager Midlet, Xlet, or Applet Service registry packages packages Sem gerenciamento de componentes (bundles) Midlet, Xlet, or Applet Sem colaboração Sem gerenciamento de pacotes (versões) JAVA Operating System Hardware 19 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Restrição de acesso a código nativo Serviços Padrão OSGi Mobile R4 R3 UPnP Vehicle Home Automation Initial Provisioning R2 R1 Package Admin Configuration Admin Permission Admin User Admin Preferences MetaType Service Tracker Framework Http Log Device Access 2000 20 Name Space Jini Start Level IO Connector Wire Admin XML Parser Measurement & State Position Execution Env. Application Manager MIDP Container Signed Bundles Declarative Services Power Management Device Management Security Policies UPnP Exporter Diagnostics/Monitoring Framework Layering Initial Provisioning UPnP … 2001 2003 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java 2005 Segurança 21 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Aplicações e Ferramentas OSGi IME-USP, 28/11/2006 Aplicações • Arquiteturas de Gerenciamento para Dispositivos Móveis (JSR – 232) • Eclipse - Equinox • ObjectWeb – Jonas J2EE Server • WebSphere Everyplace Device 6.0 • Siemens VDO Top Level Architecture • Global System for Telematics • Muitas outras aplicações... – BMW, Nokia, Siemens, Philips, MHP-GEM... 23 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Ferramentas Open-source • Eclipse Equinox: implementação OSGi R4 • Oscar: implementação R4 da ObjectWeb • Apache Felix: projeto basedo no Oscar (R3) e incubado na ASF • Knopflerfish: implementação R4 da Gatespace Telematics 24 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Considerações Finais • Especificação OSGi é bastante abrangente e esta apresentação foi apenas uma introdução • A plataforma de serviços OSGi (Service Platform) provê um modelo de componentes baseado em: – Serviços e compartilhamento de pacotes – Modelo de programação dinamico • Bundles são unidades de modularização com: – Implantação independente, fácil de desenvolver e permitem reutilização • Existem várias aplicações e produtos (comerciais e open-souce) OSGi • A abrangência da plataforma (celulares, PDA, sistemas embarcados, PC, servidores) é o ponte forte do padrão (client middleware, computação ubíqua e autônoma) 25 Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java Referências • • • • • • • • 26 OSGi Service Platform, Core Specification, Release 4, v.4.0.1, Julho 2006 – http://www.osgi.org/resources/spec_download.asp About the OSGi Service Platform, Technical Whitepaper, Revision 4.1, Novembro 2005 – http://www.osgi.org/resources/spec_download.asp OSGI Service Platform – André Assad – Recife, Sun Tech Days 2006 OSGi™ Component Programming – Thomas Watson e Peter Kriens - EclipseCon2006 http://www.osgi.org http://bundles.osgi.org http://www.eclipse.org/osgi http://www.aqute.biz Seminários MAC-5863: OSGi - Um Sistema Dinâmico de Módulos para Java