OSGi - Open Services Gateway Initiative Também conhecido como Dynamic Module System for Java

Documentos relacionados
OSGi Um Sistema Dinâmico de Módulos para Java

Modularidade com Java Module System & OSGi

Introdução ao Desenvolvimento de

15/4/15. Processamento Paralelo Middleware Orientado a Objetos. Sistema operacional é a única infraestrutura para interação. Middleware é adicionado

Avaliação de Frameworks de Produtividade para aplicações CRUD

Curso. Liferay Desenvolvedor

TUTORIAL DE INSTALAÇÃO E USO DO OWL-S COMPOSER utilizando o Eclipse Galileo Modelling Tools

TUTORIAL DE INSTALAÇÃO E USO DO OWL-S COMPOSER 3.0 utilizando o Eclipse Galileo Modelling Tools

PLATAFORMA SIGA RIO DAS VELHAS MANUAL DO CÓDIGO FONTE

Configuração do Apache Cordova Lab. 13. Prof. Bruno C. Vani

Desenvolvimento Java com ferramentas IBM

Apresentação Introdução Ambiente de desenvolvimento Aplicativos. Minicurso Android. Dia 1. Adão Henrique R. Justo Filho UFC - DETI 16/10/2012

Laboratório 01 NetBeans

Classes e Objetos POO

Algoritmos e Programação

Injeção de Dependências e Spring

POO Programação Orientada a Objetos

Lista de Verificação da Instalação do Hyperion Business Performance Management

Designing Solutions for Microsoft SQL Server 2014 (20465)

Cisco FirePOWER pesquisa defeitos procedimentos de geração do arquivo

Algoritmos e Programação

Arquitetura de Software

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Introdução ao IDE Netbeans (Programação Java)

Instalando Apache Solr no Mac OSX

Acronis Snap Deploy 2.0 Guia de Instalação

Prof. Fábio Lúcio Meira

20741: Networking with Windows Server Sobre o curso. Microsoft - Servidores. Promoção: 405 de desconto nesta edição Valor com campanha: 1.

SAMBA4 Para Ambientes Corporativos. Nome: Caio Monteiro Web:

Algoritmos e Programação

Para Saber Mais O framework OSGi O mundo enterprise

Implementing a Data Warehouse with Microsoft SQL Server 2014 (20463)

Resumo. Serviços DDNS de Terceiros suportados. Limitações

UNIVERSIDADE FEDERAL DE GOIÁS. Tainacan. Social Module

Interfaces POO. Prof. Marcio Delamaro

Strings e Arrays POO

Instalando o Eclipse e o Android

CULTURA DEVOPS. Caminhos mais ágeis e inovadores. Rafael Chies Senior Domain Architect 19/09/2017

Índice. 1. Introdução Instalação: Eclipse e Android Primeira aplicação em Android... 11

Scientific data repositories: the USP experience

Deploy do Apache Axis2 para WebSphere 6.1

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Arquitetura e Objetos Distribuídos em CORBA. Aula 3. Especificações OMA Object Web

Introdução ao Desenvolvimento para Dispositivos Móveis

Serviços de Dados Geográficos. Danilo Furtado. Direção-Geral do Território

Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.

EMF-TUTORIAL. O modelo a ser utilizado está no arquivo Rose library.mdl e tem a seguinte estrutura de classes:

Leia-me do Veritas System Recovery 16 Management Solution

Estruturas de Sistemas Operacionais

Criando um Editor de Diagramas com Sirius

PROJETO DE INTERFACES PARA ÁLGEBRA DE MAPAS EM GEOPROCESSAMENTO NO AMBIENTE SPRING

Symantec IT Management Suite 8.0 powered by Altiris technology

Integração por Web Services

JAVA. Professor: Bruno Toledo

Instalacao do Zabbix 2.x em Ambiente CentOS

Módulo II Arquitetura em Camadas

Java TM Applets. Java Deployment Course: Aula 3. por Jorge H. C. Fernandes DI-UFPE 30 de Abril de 1999

Exemplo de Aplicação Distribuída Serviço de Nomes Gerente de Segurança. Callbacks. Prof a Ana Cristina B. Kochem Vendramin DAINF / UTFPR

Transcrição:

Software Reuse: Theory and Practice http://wp.me/pmzba-6b OSGi - Open Services Gateway Initiative Também conhecido como Dynamic Module System for Java Slide 1 de

Introdução O caso Eclipse Programação OSGi Exercícios práticos Conclusões Slide 2 de

A necessidade de módulos O Humilde arquivo JAR Vários arquivos JAR numa aplicação comum Problemas com aplicações Java Dificuldade de gerenciamento de arquivos JAR Não há representação em tempo de execução Slide 3 de

Problemas com aplicações Java Camadas com fronteiras mal definidas Slide 4 de

Outros problemas com aplicações Java, especificamente com arquivos JAR Nome significativo Versões Dependências Necessidade um gráfico de dependências Necessidade de desacoplar Necessidade de Late Biding Slide 5 de

Pré-OSGi Eclipse < 3.0 Metadados em plugin.xml Plugins com nome significativo Versionamento no plugin.xml Dependências através de plugin.xml O que faltava? DINAMICAMENTE... Instalar Bundles Atualizar Bundles Remover Bundles Tudo on-the-fly Uma cirurgia no coração do eclipse para adicionar Equinox 3.0 (OSGi) Slide 6 de

Execution Environment Ambiente padronizado para aplicações chamadas de bundles Modules Políticas de carregamento de classes Classes privadas para módulos, bem como links controlados entre módulos Life Cycle Estados para os bundles - installed, started, stopped, updated and uninstalled Service Registry Provê cooperação entre os bundles Compartilhamento de objetos entre bundles Slide 7 de

Equinox Implementação de referência para o OSGi R4. Previamente instalada no coração do Eclipse. Apache Felix Implementação open source da Apache Software Foundation. Ainda não está completamente compatível com OSGi R4 knopflerfish Implementação open source para OSGi R3 and OSGi R4 Informações interessantes - Hello, OSGi, Part 1: Bundles for beginners http://www.javaworld.com/javaworld/jw-03-2008/jw-03- osgi1.html?page=1 Slide 8 de

Todo o acesso é feito através de BundleContext O mesmo é fornecido por um BundleActivator public class Activator implements BundleActivator { public void start(bundlecontext context) throws Exception { System.out.println("Starting..."); } } public void stop(bundlecontext context) throws Exception { System.out.println("Stopping..."); } Slide 9 de

MANIFEST.MF Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Osgiservice Plug-in Bundle-SymbolicName: edu.cesar.osgiservice Bundle-Version: 1.0.0 Bundle-Activator: edu.cesar.osgiservice.activator Slide 10 de

Exercício 1 Criar um Bundle que imprima Hello World a cada 2 segundos no console. Criar um build (.JAR) Instalar e executar o Bundle usando o Knopflerfish Slide 11 de

Criando seu primeiro serviço. Passo-a-passo: Crie a interface do Serviço Crie a implementaçao do serviço Crie um Bundle para registrar o serviço public void start(bundlecontext bc) throws Exception { System.out.println(bc.getBundle().getHeaders().get (Constants.BUNDLE_NAME) + " starting..."); Activator.bc = bc; FirstService service = new FirstServiceImpl(); ServiceRegistration registration = bc.registerservice( FirstService.class.getName(), service, new Hashtable()); System.out.println("Service registered: FirstService"); } public void stop(bundlecontext bc) throws Exception { System.out.println(bc.getBundle().getHeaders().get (Constants.BUNDLE_NAME) + " stopping..."); Activator.bc = null; } Slide 12 de

Exercício 2 Criar a interface de um serviço Criar a implementação do serviço Criar um Activator para o serviço Registrar o serviço Fazer build e instalar Slide 13 de

Usando o serviço registrado public void start(bundlecontext bc) throws Exception { System.out.println(bc.getBundle().getHeaders().get( } Constants.BUNDLE_NAME) + " starting..."); Activator.bc = bc; ServiceReference reference = bc.getservicereference (FirstService.class.getName()); FirstService service = FirstService)bc.getService(reference); System.out.println("Using FirstService: formatting date: " + service.getformatteddate(new Date())); bc.ungetservice(reference); Slide 14 de

Exercício 3 Criar um Bundle que registre um serviço Fazer build e instalar Criar Bundle que use um serviço Fazer build e instalar Atenção a ordem deve ser seguida Slide 15 de

Da forma que foi implementado, o que acontece se tentarmos usar o serviço que não foi registrado? ERR... Solução seria simplesmente testar se é nulo o serviço recuperado? O que aconteceria com serviços que fossem registrados depois da verificação do Activator para encontrar serviços? Solução: ServiceListener public void start(bundlecontext bc) throws Exception { } System.out.println("start " + getclass().getname()); Activator.bc = bc; String filter = "(objectclass=" + FirstService.class.getName() + ")"; bc.addservicelistener(this, filter); ServiceReference references[] = bc.getservicereferences(null, filter); for (int i = 0; references!= null && i < references.length; i++) { } this.servicechanged(new ServiceEvent(ServiceEvent.REGISTERED, references[i])); Slide 16 de

Exercício 4 Adaptar a solução encontrada no exercício 3 de tal forma a permitir a instalação de bundles fora de ordem (pesquisa dinâmica de serviços) Slide 17 de

Solução alternativa para o ServiceListener: ServiceTrackerCustomizer public void start(bundlecontext bc) throws Exception { } System.out.println(bc.getBundle().getHeaders().get( Constants.BUNDLE_NAME) + " starting..."); Activator.bc = bc; customizer = new MyServiceTrackerCustomizer(bc); tracker = new ServiceTracker(bc, FirstService.class.getName(), customizer); tracker.open(); Slide 18 de

Exercício 5 Adaptar a solução encontrada no exercício 4 usando ServiceTrackerCustomizer e ServiceTracker Slide 19 de

Exercício final Implemente uma solução usando a tecnologia OSGi para implementar o componente MapLoader indentificado na aplicação Push to Map The application must be implemented for the JME platform and have to enable a user to locate contacts, displaying the contacts location in a map providing distance information. The maps used to draw the locations can be preloaded or retrieved from a remote server according to a predefined configuration. The application must support different map servers in order to expand the map coverage (Yahoo! maps, Google maps e Map24). The application allows the user to find his/her own GPS location and plots it in a map. Slide 20 de

Exercício final Slide 21 de

Exercício Final Implemente três bundles Bundle com o serviço de recuperação de Mapas considerando o componente que discutimos Bundle com o serviço de GPS Bundle usuário dos serviços que apresenta o mapa recuperado baseado na posição GPS passada como parâmetro através do objeto Coordinate Utilize a descoberta dinâmica de serviços Slide 22 de

O que vocês acharam? É útil? Grande interesse da indústria Diferentes containers Diferentes projetos explorando arquitetura baseada em OSGi Projetos apoiando o desenvolvimento em OSGi Projeto experimentando OSGi Mais informações em: http://www.pierocampanelli.info/articles/2006/11/15/osgiand-open-source-ecosystem/ Linha de pesquisa na área mobile JSR 232: Mobile Operational Management http://jcp.org/en/jsr/detail?id=232 JSR 249: Mobile Service Architecture 2 http://www.jcp.org/en/jsr/detail?id=249 Slide 23 de

OSGi Alliance http://www.osgi.org/ Equinox http://www.eclipse.org/equinox/ Knopflerfish http://www.knopflerfish.org/ Apache FELIX http://cwiki.apache.org/felix/index.html A Step by Step Introduction to OSGi Programming www.knopflerfish.org/tutorials/osgi_tutorial.pdf 5-minute guide to start developing with OSGi in Eclipse http://www.pierocampanelli.info/tutorials/2008/01/02/5- minute-guide-to-start-developing-with-osgi-in-eclipse/ Getting Started with OSGi http://live.eclipse.org/node/407 Slide 24 de

Tutorial OSGi Java World http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html http://www.javaworld.com/javaworld/jw-04-2008/jw-04-osgi2.html http://www.javaworld.com/javaworld/jw-06-2008/jw-06-osgi3.html OSGi on the Web: Here s How http://www.slideshare.net/mrdon/the-web-on-osgi-heres-how Spring Source OSGi Bundle Repository http://www.springsource.com/repository/app/ Andre L.C. Tavares, Marco Tulio Valente, "A gentle introduction to OSGi", SIGSOFT Software Engineering Notes, Volume 33, Issue 5, August 2008 Kiev Gama, Didier Donsez, "A survey on approaches for addressing dependability attributes in the OSGi service platform", SIGSOFT Software Engineering Notes, Volume 35, Issue 3, May 2010 (Almeida, 2007) E. S. Almeida, RiDE: The RiSE Process for Domain Engineering, Ph.D. Thesis, Federal University of Pernambuco, Informatics Center, Brazil, March, 2007, pp. 276. Slide 25 de