| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- |
| Copyright (c) 2009, 2011, 2014, Oracle and/or its affiliates. All rights reserved. |
| --> |
| |
| <html> |
| <head> |
| <title>Usando o CDI para Injetar Pacotes OSGi como Serviços no NetBeans IDE</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > |
| <meta name="description" content="A tutorial on how to use NetBeans IDE and Maven to create an OSGi bundle that is accessed from a web application using CDI."> |
| <link rel="stylesheet" href="../../../netbeans.css"> |
| <meta name="author" content="ken ganfield"> |
| </head> |
| <body> |
| <h1>Usando o CDI para Injetar Pacotes OSGi como Serviços no NetBeans IDE</h1> |
| |
| |
| <p>Este documento demonstra como o suporte integrado para o framework <a href="http://www.osgi.org/Main/HomePage">Open Services Gateway Initiative</a> (OSGi) no NetBeans IDE simplifica o processo de criação de pacotes OSGi e o uso dos pacotes em seus projetos. Neste tutorial, você criará dois pacotes OSGi simples a partir do arquétipo de pacote Maven OSGi e, em seguida, implantará os pacotes no GlassFish Server Open Source Edition 3.1. |
| </p> |
| |
| <p>Depois de criar os pacotes OSGi básicos, você criará uma aplicação cliente Web e usará o CDI para injetar os pacotes como um serviço. A seguir, você implantará a aplicação Web como um pacote no servidor. O tutorial, em seguida, demonstrará como usar a Console de Admin OSGi para trabalhar com pacotes OSGi.</p> |
| |
| <p>Utilizar um pacote OSGi em uma Aplicação Corporativa pode fornecer maior modularidade e flexibilidade em relação à atualização de pacotes individuais. O suporte predefinido para OSGi que acompanha o GlassFish Server torna a incorporação de pacotes na sua aplicação muito fácil.</p> |
| |
| <p class="notes">Este tutorial tem base na publicação do blog <a href="http://blogs.oracle.com/arungupta/entry/totd_154_dynamic_osgi_services" target="_blank"> TOTD #154: Dynamic OSGi services in GlassFish 3.1 - Using CDI and @OSGiService </a> e outras entradas do blog que podem ser encontradas no <a href="http://blog.arungupta.me/" target="_blank">blog de Arun Gupta</a>. Certifique-se de visitar o blog e ver muitas outras entradas excelentes relacionadas ao trabalho com o OSGi.</p> |
| |
| <p>Além disso, os recursos a seguir contêm uma variedade de informações sobre o uso do OSGi e CDI em aplicações híbridas.</p> |
| |
| <ul> |
| <li><a href="http://weblogs.java.net/blog/2009/06/14/developing-hybrid-osgi-java-ee-applications-glassfish"> Desenvolvendo aplicações Híbridas (OSGi + Java EE) no GlassFish</a></li> |
| <li><a href="http://blogs.oracle.com/sivakumart/entry/typesafe_injection_of_dynamic_osgi"> Injeção segura de serviços OSGi dinâmicos em aplicações Java EE híbridas</a> |
| <li><a href="http://weblogs.java.net/blog/2009/06/04/osgi-enabled-web-applications-inglassfish"> Aplicações Web compatíveis com OSGi no GlassFish</a></li> |
| <li><a href="http://www.youtube.com/watch?v=vaOpJJ-Xm70"> Vídeo do YouTube: injeção segura de serviços OSGI dinâmicos com o GlassFish 3.1 e CDI </a></li> |
| <li><a href="http://glassfish.java.net/public/GF-OSGi-Features.pdf"> Desenvolvimento de Aplicações OSGi usando o GlassFish Server"</a> [PDF]</li> |
| </ul> |
| |
| <p><b>Exercícios do Tutorial</b></p> |
| <img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0"> |
| |
| <ul> |
| <li><a href="#Exercise_1">Criando o Projeto POM pai</a></li> |
| <li><a href="#Exercise_2">Criando os Projetos de Pacotes OSGi</a> |
| <ul> |
| <li><a href="#Exercise_2a">Criando o Pacote da Interface MavenHelloServiceApi</a></li> |
| <li><a href="#Exercise_2b">Criando o Pacote de Implementação MavenHelloServiceImpl</a></li> |
| <li><a href="#Exercise_2c">Construindo e Implantando os Pacotes OSGi</a></li> |
| </ul> |
| </li> |
| <li><a href="#Exercise_3">Criando a Aplicação Cliente Web</a> |
| <ul> |
| <li><a href="#Exercise_3a">Configurando as Dependências no Projeto POM</a></li> |
| <li><a href="#Exercise_3b">Criando a Aplicação Web MavenHelloWebClient</a></li> |
| <li><a href="#Exercise_3c">Construindo a Aplicação Web como um Pacote</a></li> |
| <li><a href="#Exercise_3d">Implantando o Pacote de Aplicações Web</a></li> |
| </ul> |
| </li> |
| <li><a href="#Exercise_4">Instalando e Usando a Console de Admin OSGi</a></li> |
| <li><a href="#Exercise_5">Referências e Leitura Adicional</a></li> |
| </ul> |
| |
| |
| |
| <p><b>Para seguir este tutorial, são necessários os recursos e o software a seguir.</b></p> |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Software ou Recurso</th> |
| <th class="tblheader" scope="col">Versão Necessária</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://download.netbeans.org/netbeans/7.1/beta/">NetBeans IDE</a></td> |
| <td class="tbltd1">Versão Java EE 7.2, 7.3, 7.4, 8.0</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK (Java Development Kit)</a></td> |
| <td class="tbltd1">versão 7 ou 8</td> |
| </tr> |
| <tr> |
| <td class="tbltd1">GlassFish Server Open Source Edition</td> |
| <td class="tbltd1">3.1.x ou 4.x</td> |
| </tr> |
| </tbody> |
| </table> |
| <p><b>Pré-requisitos</b></p> |
| <p>Este tutorial pressupõe que você tenha algum conhecimento básico das tecnologias a seguir, ou alguma experiência de programação com elas:</p> |
| <ul> |
| <li>Programação em Java</li> |
| <li>NetBeans IDE</li> |
| <li>Framework Maven</li> |
| </ul> |
| |
| <p>Antes de começar este tutorial, talvez você queira se familiarizar com a documentação a seguir.</p> |
| <ul> |
| <li><a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Melhores Práticas para o Apache Maven no NetBeans IDE</a></li> |
| <li><a href="http://books.sonatype.com/mvnref-book/reference/introduction.html" target="_blank">Capítulo 1. Introdução ao Apache Maven</a> (do <a href="http://books.sonatype.com/mvnref-book/reference/index.html" target="_blank">Maven: A Referência Completa </a>)</li> |
| <li><a href="http://www.osgi.org/javadoc/r4v42/" target="_blank">Framework OSGi </a></li> |
| </ul> |
| |
| |
| <a name="intro"></a> |
| <!-- ===================================================================================== --> |
| |
| |
| |
| |
| |
| |
| |
| <!-- ===================================================================================== --> |
| <!-- Creating the POM Project --> |
| <!-- ===================================================================================== --> |
| <a name="Exercise_1"></a> |
| <h2>Criando o Projeto POM Pai</h2> |
| <p>Nesta seção você criará o projeto POM pai para os pacotes OSGi que serão criados neste tutorial. Você editará o projeto POM (<tt>pom.xml</tt>) para adicionar elementos de Gerenciamento de Dependências que serão herdados como dependências por projetos filho.</p> |
| <!-- In this exercise you will modify the project POM to specify the repository that contains |
| some of the artifacts that you will use later.--> |
| <ol> |
| <li>Selecione Novo Projeto (Ctrl-Shift-N; ⌘-Shift-N no Mac) no menu principal.</li> |
| <li>Selecione o Projeto POM na categoria Maven.<br> <img alt="tela do assistente Novo Projeto" class="margin-around b-all" src="../../../images_www/articles/72/javaee/osgi-cdi/cdi-newpomproject.png" title="Arquétipo do Projeto POM Maven no Assistente de Novo Projeto"></li> |
| |
| <li>Digite <strong>MavenOSGiCDIProject</strong> como nome do Projeto. Clique em Finalizar. |
| <p>Quando você clica em Finalizar, o IDE cria o projeto POM e abre o projeto na janela Projetos.</p> |
| </li> |
| |
| <li>Expanda o nó dos Arquivos do Projeto na janela Projetos e clique duas vezes em <tt>pom.xml</tt> para abrir o arquivo no editor. |
| <p>O POM básico do projeto deverá ser similar ao seguinte.</p> |
| <pre class="examplecode"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenOSGiCDIProject</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| <packaging>pom</packaging> |
| <properties> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| </properties> |
| </project> |
| </pre> |
| </li> |
| <li>Modifique o <tt>pom.xml</tt> pai para adicionar os elementos a seguir. Salve as alterações. |
| <pre class="examplecode"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenOSGiCDIProject</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| <packaging>pom</packaging> |
| <properties> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| </properties> |
| |
| <strong><dependencyManagement> |
| <dependencies> |
| <dependency> |
| <groupId>org.osgi</groupId> |
| <artifactId>org.osgi.core</artifactId> |
| <version>4.2.0</version> |
| <scope>provided</scope> |
| </dependency> |
| </dependencies> |
| </dependencyManagement></strong> |
| </project> |
| </pre> |
| </li> |
| </ol> |
| |
| <p>Neste exercício, você especificou explicitamente um artefato e a versão do artefato que serão usados no projeto. Ao usar o Gerenciamento de Dependências e especificar os artefatos no POM pai, é possível tornar os POMs nos projetos filho mais simples e garantir que as versões das dependências estejam consistentes no projeto.</p> |
| |
| <p>Para saber mais sobre o uso do Gerenciamento de Dependências, consulte <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">Introdução ao Mecanismo de Dependências</a>.</p> |
| |
| |
| |
| |
| |
| <!-- ===================================================================================== --> |
| <!-- Creating the OSGi Bundles --> |
| <!-- ===================================================================================== --> |
| <a name="Exercise_2"></a> |
| <h2>Criando os Projetos de Pacotes OSGi</h2> |
| <p>A categoria Maven no assistente Novos Projetos inclui um arquétipo do Pacote OSGi para a criação de projetos de pacotes OSGi. Quando você cria um projeto de pacote OSGi, o POM gerado declara o JAR <tt>org.osgi.core</tt> como uma dependência e especifica o <tt>plug-in-do-pacote-maven</tt> para a construção do projeto.</p> |
| |
| |
| |
| |
| |
| <div class="indent"> |
| |
| <!-- ===================================================================================== --> |
| <!-- Creating the API bundle --> |
| <!-- ===================================================================================== --> |
| <a name="Exercise_2a"></a> |
| <h3>Criando o Pacote da Interface MavenHelloServiceApi</h3> |
| <p>Neste exercício, você utilizará o assistente Novo Projeto para criar um projeto de pacote OSGi que fornecerá uma interface simples que será implementada por outros pacotes. Depois de criar o pacote e a interface, você modificará o POM para atualizar a dependência no artefato <tt>org.osgi.core</tt> que foi especificado no projeto POM pai. |
| </p> |
| |
| <ol> |
| <li>Selecione Arquivo > Novo Projeto para abrir o assistente de Novo Projeto.</li> |
| <li>Selecione Pacote OSGi na categoria Maven. Clique em Próximo.<br> <img alt="tela do assistente Novo Projeto" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-new-osgiproject.png" title="Arquétipo do Pacote OSGI Maven no assistente de Novo Projeto"></li> |
| <li>Digite <strong>MavenHelloServiceApi</strong> como Nome do Projeto.</li> |
| <li>Clique em Procurar e selecione o projeto POM <strong>MavenOSGiCDIProject</strong> como o Local. Clique em Finalizar. |
| <p>Quando você clica em Finalizar, o IDE cria o projeto do pacote e abre o projeto na janela Projetos. Se você abrir <tt>pom.xml</tt> para o projeto MavenHelloServiceApi no editor, verá que o elemento <tt>encapsulamento</tt> especifica o <tt>pacote</tt> e que o <tt>plug-in-do-pacote-maven</tt> será usado ao construir o pacote.</p> |
| <pre class="examplecode"><project> |
| <modelVersion>4.0.0</modelVersion> |
| <parent> |
| <artifactId>MavenOSGiCDIProject</artifactId> |
| <groupId>com.mycompany</groupId> |
| <version>1.0-SNAPSHOT</version> |
| </parent> |
| |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenHelloServiceApi</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| <strong><packaging>bundle</packaging></strong> |
| <name>MavenHelloServiceApi OSGi Bundle</name> |
| |
| <properties> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| </properties> |
| |
| <dependencies> |
| <dependency> |
| <groupId>org.osgi</groupId> |
| <artifactId>org.osgi.core</artifactId> |
| <version>4.3.0</version> |
| <scope>provided</scope> |
| </dependency> |
| </dependencies> |
| |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.apache.felix</groupId> |
| <strong><artifactId>maven-bundle-plugin</artifactId></strong> |
| <version>2.3.7</version> |
| <extensions>true</extensions> |
| <configuration> |
| <instructions> |
| <Bundle-Activator>com.mycompany.mavenhelloserviceimpl.Activator</Bundle-Activator> |
| <Export-Package /> |
| </instructions> |
| </configuration> |
| </plugin> |
| |
| ... |
| </plugins> |
| </build> |
| |
| ... |
| <project></pre> |
| <p>Você também poderá ver que, ao criar um projeto de pacote OSGi utilizando o arquétipo do Pacote OSGi Maven, o IDE adicionou o artefato <tt>org.osgi.core</tt> como uma dependência por padrão.</p> |
| </li> |
| <li>Clique com o botão direito do mouse no nó do projeto MavenHelloServiceApi na janela Projetos e selecione Propriedades.</li> |
| <li>Selecione a categoria Códigos-fonte na caixa de diálogo Propriedades do Projeto.</li> |
| <li>Defina <strong>Source/Binary Format</strong> como 1.6 e confirme se a <strong>Codificação</strong> é UTF-8. Clique em OK.</li> |
| <li>Clique com o botão direito do mouse no nó Pacotes de Código-fonte e selecione Novo > Interface Java.</li> |
| <li>Digite <strong>Hello</strong> como Nome da Classe.</li> |
| <li>Selecione <strong>com.mycompany.mavenhelloserviceapi</strong> como o Pacote. Clique em Finalizar.</li> |
| <li>Adicione o método <tt>sayHello</tt> a seguir à interface (em negrito) e salve as alterações. |
| <pre class="examplecode"> |
| public interface Hello { |
| <strong>String sayHello(String name);</strong> |
| }</pre> |
| </li> |
| |
| <li>Clique com o botão direito do mouse no nó do projeto na janela Projetos e selecione Construir. |
| <p>Depois de construir o projeto, se você abrir a janela Arquivos e expandir o nó do projeto, verá que <tt>MavenHelloServiceApi-1.0-SNAPSHOT.jar</tt> foi criado na pasta de <tt>destino</tt>.</p> |
| |
| <img alt="Tela do projeto na janela de Arquivos" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-manifest.png" title="Exibir o conteúdo do JAR compilado na janela Arquivos" /> |
| |
| |
| |
| <p>O <tt>plug-in-do-pacote-maven</tt> trata da geração do arquivo <tt>MANIFEST.MF</tt> ao construir o projeto. Se abrir o arquivo <tt>MANIFEST.MF</tt> no JAR compilado, você verá que o plug-in gerou um cabeçalho de manifesto que declara os pacotes exportados. Para OSGi, todos os pacotes que você deseja que sejam expostos e estejam disponíveis para outros pacotes devem ser listados no elemento <tt>Exportar-Pacote</tt> no <tt>MANIFEST.MF</tt>.</p></li> |
| <li>Confirme se o <tt>MANIFEST.MF</tt> contém o elemento <tt>Export-Package</tt> (o elemento mostrado em <strong>negrito</strong> no exemplo abaixo). |
| |
| <pre class="examplecode"> |
| Manifest-Version: 1.0 |
| Bnd-LastModified: 1395049732676 |
| Build-Jdk: 1.7.0_45 |
| Built-By: nb |
| Bundle-Activator: com.mycompany.mavenhelloserviceapi.Activator |
| Bundle-ManifestVersion: 2 |
| Bundle-Name: MavenHelloServiceApi OSGi Bundle |
| Bundle-SymbolicName: com.mycompany.MavenHelloServiceApi |
| Bundle-Version: 1.0.0.SNAPSHOT |
| Created-By: Apache Maven Bundle Plugin |
| <strong>Export-Package: com.mycompany.mavenhelloserviceapi;uses:="org.osgi.frame |
| work";version="1.0.0.SNAPSHOT"</strong> |
| Import-Package: org.osgi.framework;version="[1.6,2)" |
| Tool: Bnd-1.50.0</pre> |
| |
| <p>O contêiner OSGi lerá o cabeçalho do manifesto <tt>Exportar-Pacote</tt> para determinar as classes no pacote que podem ser acessadas de fora do pacote. Nesse exemplo, as classes no pacote <tt>com.mycompany.mavenhelloserviceapi</tt> estão expostas.</p> |
| |
| <p class="notes"><strong>Observação.</strong> Se o <tt> MANIFEST.MF</tt> não contiver o elemento <tt> Export-Package</tt>, você precisará ativar o procedimento do plug-in default para o plug-in na janela Propriedades do Projeto e reconstruir o projeto. Na janela Propriedades do Projeto, selecione a categoria Exportar Pacotes e selecione a opção <strong>Default maven-bundle-plugin behavior</strong>. Você pode usar o painel Exportar Pacotes da janela Propriedades do Projeto para especificar explicitamente os pacotes que deverão ser expostos ou especificar os pacotes diretamente em <tt>pom.xml.</tt>.</p> |
| </li> |
| </ol> |
| <!-- ===================================================================================== --> |
| <!-- Creating the Impl bundle --> |
| <!-- ===================================================================================== --> |
| <a name="Exercise_2b"></a> |
| <h3>Criando o Pacote de Implementação MavenHelloServiceImpl</h3> |
| <p>Neste exercício, você criará o MavenHelloServiceImpl no projeto POM.</p> |
| <ol> |
| <li>Selecione Arquivo > Novo Projeto para abrir o assistente de Novo Projeto.</li> |
| <li>Selecione o Pacote OSGi na categoria Maven. Clique em Próximo.</li> |
| <li>Digite <strong>MavenHelloServiceImpl</strong> como Nome do Projeto.</li> |
| <li>Clique em Procurar e selecione o projeto POM <strong>MavenOSGiCDIProject</strong> como o Local (caso não esteja selecionado). Clique em Finalizar.</li> |
| <li>Clique com o botão direito do mouse no nó do projeto na janela Projetos e escolha Propriedades.</li> |
| <li>Selecione a categoria Códigos-fonte na caixa de diálogo Propriedades do Projeto.</li> |
| <li>Defina <strong>Source/Binary Format</strong> como 1.6 e confirme se a <strong>Codificação</strong> é UTF-8. Clique em OK.</li> |
| <li>Clique com o botão direito do mouse no nó Pacotes de Código-fonte na janela Projetos e selecione Novo > Classe Java.</li> |
| <li>Digite <strong>HelloImpl</strong> para o Nome da Classe.</li> |
| <li>Selecione <strong>com.mycompany.mavenhelloserviceimpl</strong> como o Pacote. Clique em Finalizar.</li> |
| <li>Digite o seguinte (em negrito) e salve as alterações. |
| <pre class="examplecode"> |
| public class HelloImpl <strong>implements Hello { |
| |
| public String sayHello(String name) { |
| return "Hello " + name;</strong> |
| } |
| }</pre> |
| |
| <p>Quando você implementar <tt>Hello</tt>, o IDE exibirá um erro que deverá ser resolvido adicionando o projeto MavenHelloServiceApi como uma dependência.</p> |
| </li> |
| <li>Clique com o botão direito do mouse no nó Dependências do <strong>MavenHelloServiceImpl</strong> na janela Projetos e selecione Adicionar Dependência.</li> |
| <li>Clique na guia Abrir Projetos na caixa de diálogo Adicionar Biblioteca.</li> |
| <li>Selecione o Pacote OSGi MavenHelloServiceApi. Clique em Add.<br> <img alt="Tela da caixa de diálogo Adicionar Biblioteca" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-add-dependency.png" title="Clique na guia Abrir Projetos na caixa de diálogo Adicionar Biblioteca."> |
| </li> |
| <li>Clique com o botão direito do mouse na classe <tt>HelloImpl.java</tt> que está aberta no editor e selecione Corrigir Importações (Alt-Shift-I; ⌘-Shift-I no Mac) para adicionar uma instrução de importação para <tt>com.mycompany.mavenhelloserviceapi.Hello</tt>. Salve as alterações.</li> |
| <li>Expanda o pacote <tt>com.mycompany.mavenhelloserviceimpl</tt> e clique duas vezes em <tt>Activator.java</tt> para abrir o arquivo no editor.<br> <img alt="tela da janela Projetos" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-activator.png" title="Classe do ativador na janela Projetos"> |
| <p>O IDE criou automaticamente a classe ativadora do pacote <tt>Activator.java</tt> em seu projeto. Um ativador de pacote é utilizado para gerenciar o ciclo de vida de um pacote. A classe do ativador de pacote é declarada no <tt>MANIFEST.MF</tt> do pacote e é instanciada quando o pacote é iniciado pelo contêiner.</p> |
| |
| <p>Um pacote OSGi não requer uma classe de ativador de pacote, mas é possível utilizar o método <tt>start()</tt> na classe do ativador, por exemplo, para inicializar serviços ou outros recursos necessários para o pacote. Neste exercício, você adicionará algumas linhas de código à classe que imprimirá mensagens na janela de Saída. Isso facilitará a identificação de quando um pacote é iniciado e parado.</p> |
| </li> |
| <li>Modifique os métodos <tt>start()</tt> e <tt>stop()</tt> na classe do ativador do pacote para adicionar as linhas a seguir (em negrito). |
| <pre class="examplecode"> |
| public class Activator implements BundleActivator { |
| |
| public void start(BundleContext context) throws Exception { |
| <strong>System.out.println("HelloActivator::start"); |
| context.registerService(Hello.class.getName(), new HelloImpl(), null); |
| System.out.println("HelloActivator::registration of Hello service successful");</strong> |
| } |
| |
| public void stop(BundleContext context) throws Exception { |
| <strong>context.ungetService(context.getServiceReference(Hello.class.getName())); |
| System.out.println("HelloActivator stopped");</strong> |
| } |
| }</pre> |
| |
| <p>Você pode ver que a classe do ativador de pacotes importa <tt>org.osgi.framework.BundleActivator</tt> e <tt>org.osgi.framework.BundleContext</tt>. Por default, a classe gerada contém dois métodos: <tt>start()</tt> e <tt>stop()</tt>. O framework do OSGi invoca os métodos <tt>start()</tt> e <tt>stop()</tt> para iniciar e parar a funcionalidade fornecida pelo pacote. Quando o pacote é iniciado, o componente de serviço fornecido pelo pacote é registrado no registro de serviço do OSGi. Depois que um pacote é registrado, outros pacotes poderão utilizar o registro para pesquisa e, em seguida, utilizar os serviços ativos por meio do contexto do pacote.</p> |
| |
| <p>Ao olhar o POM do projeto, você verá o elemento <tt><Bundle-Activator></tt> que especifica o ativador do pacote sob o elemento de configuração do <tt>plug-in-do-pacote-maven</tt>.</p> |
| <pre class="examplecode"> |
| <plugin> |
| <groupId>org.apache.felix</groupId> |
| <artifactId>maven-bundle-plugin</artifactId> |
| <version>2.3.7</version> |
| <extensions>true</extensions> |
| <configuration> |
| <instructions> |
| <strong><Bundle-Activator>com.mycompany.mavenhelloserviceimpl.Activator</Bundle-Activator></strong> |
| </instructions> |
| </configuration> |
| </plugin></pre> |
| <p>Quando você construir o pacote, o plug-in gerará um Cabeçalho de Manifesto no arquivo de manifesto do pacote no JAR e especificará a classe do Ativador do Pacote. O runtime do OSGi procura pelo cabeçalho <tt>Bundle-Activator</tt> no arquivo do manifesto quando um pacote é implantado.</p> |
| </li> |
| <li>Corrija as instruções de importação em <tt>Activator.java</tt> para importar <tt>com.mycompany.mavenhelloserviceapi.Hello</tt>. Salve as alterações.</li> |
| <li>Expanda o nó Dependências e confirme se o artefato <tt>org.osgi.core</tt> é listado como uma dependência. |
| <p class="notes"><strong>Observação.</strong> Remova todas as versões mais antigas do artefato que são listadas no nó Dependências, clicando com o botão direito do mouse no artefato e escolhendo Remover Dependência. As únicas dependências devem ser o projeto MavenHelloServiceApi e o artefato <tt>org.osgi.core</tt>.</p> |
| <img alt="tela da janela Projetos" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-implproject.png" title="Classe do ativador na janela Projetos" /> |
| </li> |
| </ol> |
| |
| |
| |
| <!-- ===================================================================================== --> |
| <!-- Building and Deploying Bundles --> |
| <!-- ===================================================================================== --> |
| <a name="Exercise_2c"></a> |
| <h3>Construindo e Implantando os Pacotes OSGi</h3> |
| <p>Neste exercício, você construirá os pacotes OSGi e implantará os pacotes no GlassFish.</p> |
| |
| <ol> |
| <li>Clique com o botão direito do mouse no nó MavenOSGiCDIProject na janela Projetos e selecione Limpar e Construir. |
| <p>Quando você construir o projeto, o IDE criará os arquivos JAR na pasta de <tt>destino</tt> de cada um dos projetos e também instalará o JAR de snapshot no repositório local. Na janela Arquivos, você pode expandir a pasta de <tt>destino</tt> para cada um dos dois projetos de pacotes e ver os dois arquivos compactados JAR (<tt>MavenHelloServiceApi-1.0-SNAPSHOT.jar</tt> e <tt>MavenHelloServiceImpl-1.0-SNAPSHOT.jar</tt>).</p> |
| </li> |
| <li>Inicie o GlassFish Server, se ainda não o tiver feito.</li> |
| <li>Copie o <tt>MavenHelloServiceApi-1.0-SNAPSHOT.jar</tt> para o diretório <tt>glassfish/domains/domain1/autodeploy/bundles/</tt> da instalação do GlassFish. |
| |
| <p>No log do GlassFish Server, na janela de Saída, você deverá ver uma saída semelhante à mostrada a seguir.</p> |
| <pre class="examplecode"> |
| INFO: Started bundle: file:/glassfish-4.0/glassfish/domains/domain1/autodeploy/bundles/MavenHelloServiceApi-1.0-SNAPSHOT.jar |
| </pre> |
| <p class="tips">Clique com o botão direito do mouse no nó do GlassFish Server na janela Serviços e selecione Exibir Log do Servidor de Domínio, se o log do servidor não estiver visível na janela de Saída.</p> |
| </li> |
| <li>Repita as etapas para copiar o <tt>MavenHelloServiceImpl-1.0-SNAPSHOT.jar</tt> no diretório <tt>autodeploy/bundles</tt>. </li> |
| </ol> |
| |
| <p>No log do GlassFish Server, você agora deverá ver uma saída semelhante à mostrada a seguir.</p> |
| <pre class="examplecode"> |
| INFO: HelloActivator::start |
| INFO: HelloActivator::registration of Hello service successful |
| INFO: Started bundle: file:/glassfish-4.0/glassfish/domains/domain1/autodeploy/bundles/MavenHelloServiceImpl-1.0-SNAPSHOT.jar |
| INFO: Started bundle: file:/glassfish-4.0/glassfish/domains/domain1/autodeploy/bundles/MavenHelloServiceImpl-1.0-SNAPSHOT.jar |
| </pre> |
| |
| |
| |
| <p class="tips">Ou então, é possível instalar os pacotes a partir da Console de Admin OSGi do GlassFish. Para obter mais informações, consulte a seção <a href="#Exercise_4">Instalando e Usando a Console de Admin OSGi</a>.</p> |
| </div> |
| |
| |
| <!-- ===================================================================================== --> |
| <!-- Creating the web client application --> |
| <!-- ===================================================================================== --> |
| <a name="Exercise_3"></a> |
| <h2>Criando uma Aplicação Cliente Web</h2> |
| <p>Esta seção demonstra como criar um cliente Web Java EE que acessa o serviço fornecido pelo pacote OSGi. Você criará um servlet simples em uma aplicação Web e, em seguida, injetará os serviços declarados. Antes de criar o projeto, você adicionará alguns elementos de gerenciamento de dependências ao projeto POM pai.</p> |
| |
| |
| <div class="indent"> |
| |
| <a name="Exercise_3a"></a> |
| <h3>Configurando dependências no Projeto POM Pai</h3> |
| <p>Neste exercício, você especificará elementos de dependência no projeto POM pai. Você também adicionará um repositório para artefatos que serão utilizados no projeto.</p> |
| |
| <ol> |
| <li>Expanda o nó Arquivos do Projeto do projeto <strong>MavenOSGiCDIProject</strong> na janela Projetos e clique duas vezes em <tt>pom.xml</tt> para abrir o arquivo no editor.</li> |
| <li>Modifique o <tt>pom.xml</tt> pai para adicionar os seguintes elementos de Gerenciamento de Dependências (em negrito). Salve as alterações. |
| <pre class="examplecode"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>com.mycompany</groupId> |
| <artifactId>MavenOSGiCDIProject</artifactId> |
| <version>1.0-SNAPSHOT</version> |
| <packaging>pom</packaging> |
| <properties> |
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| </properties> |
| |
| ... |
| |
| <dependencyManagement> |
| <dependencies> |
| <dependency> |
| <groupId>org.osgi</groupId> |
| <artifactId>org.osgi.core</artifactId> |
| <version>4.3.0</version> |
| <scope>provided</scope> |
| </dependency> |
| <strong><dependency> |
| <groupId>org.osgi</groupId> |
| <artifactId>org.osgi.compendium</artifactId> |
| <version>4.2.0</version> |
| <scope>provided</scope> |
| </dependency> |
| <dependency> |
| <groupId>org.glassfish</groupId> |
| <artifactId>osgi-cdi-api</artifactId> |
| <version>3.1-b41</version> |
| <type>jar</type> |
| <scope>provided</scope> |
| </dependency></strong> |
| |
| </dependencies> |
| </dependencyManagement> |
| |
| ... |
| </project> |
| </pre> |
| </li> |
| <li>Adicione os elementos a seguir para adicionar o repositório do GlassFish ao POM. Salve as alterações. |
| <pre class="examplecode"> |
| <project> |
| |
| ... |
| |
| </dependencyManagement> |
| |
| <strong><repositories> |
| <!-- glassfish nexus repo for glassfish dependencies --> |
| <repository> |
| <id>glassfish-repo-archive</id> |
| <name>Nexus repository collection for Glassfish</name> |
| <url>http://maven.glassfish.org/content/groups/glassfish</url> |
| <snapshots> |
| <updatePolicy>never</updatePolicy> |
| </snapshots> |
| </repository> |
| </repositories></strong> |
| <modules> |
| <module>MavenHelloServiceApi</module> |
| <module>MavenHelloServiceImpl</module> |
| </modules> |
| </project> |
| </pre> |
| </li> |
| </ol> |
| |
| <p>Depois de adicionar o repositório do GlassFish ao POM, se você exibir a lista de repositórios no nó Repositórios Maven na janela Serviços, verá que o IDE adicionou automaticamente um nó para o repositório do GlassFish. Por default, o IDE exibe um nó para o repositório Maven Local. Quando um projeto aberto especifica um repositório, o IDE automaticamente adiciona um nó ao repositório no nó Repositórios Maven. |
| </p> |
| <img alt="Tela da janela Repositórios Maven" class="margin-around b-all" src="../../../images_www/articles/72/javaee/osgi-cdi/cdi-maven-repositories.png" title="Repositório do GlassFish na janela Repositórios Maven" /> |
| |
| <p>Neste exercício, você adicionou artefatos extras e versões de artefatos que serão utilizados no projeto. Você também adicionou o repositório do GlassFish que contém os artefatos <tt>osgi-cdi-api</tt>.</p> |
| |
| |
| |
| <a name="Exercise_3b"></a> |
| <h3>Criando a Aplicação Web MavenHelloWebClient</h3> |
| <p>Primeiro, você criará uma aplicação Web regular e, em seguida, modificará o projeto para torná-lo um pacote OSGi (Pacote de Aplicação Web (WAB)).</p> |
| <ol> |
| <li>Escolha Arquivo > Novo Projeto no menu principal.</li> |
| <li>Selecione Aplicação Web na categoria Maven. Clique em Próximo.</li> |
| <li>Digite <strong>MavenHelloWebClient</strong> como nome do Projeto.</li> |
| <li>Clique em Procurar e selecione o projeto POM <strong>MavenOSGiCDIProject</strong> como o Local (caso não esteja selecionado). Clique em Próximo.</li> |
| <li>Selecione o GlassFish Server como servidor e o Java EE 6 ou Java EE 7 como a versão do Java EE. Clique em Finalizar.</li> |
| <li>Clique com o botão direito do mouse no nó do projeto e selecione Novo > Servlet.</li> |
| <li>Digite <strong>HelloServlet</strong> no Nome da Classe.</li> |
| <li>Selecione <tt>com.mycompany.mavenhellowebclient</tt> como o Pacote. Clique em Finalizar.</li> |
| <li>Delete os métodos default no servlet que foram gerados pelo IDE (<tt>processRequest</tt>, <tt>doGet</tt>, <tt>doPost</tt>, <tt>getServletInfo</tt>). |
| <p class="notes"><strong>Observação.</strong> Você precisará expandir a pasta do editor para deletar os métodos do HttpServlet.</p></li> |
| <li>Digite o código a seguir (em negrito) para injetar o serviço. |
| <pre class="examplecode"> |
| @WebServlet(name = "HelloServlet", urlPatterns = {"/HelloServlet"}) |
| public class HelloServlet extends HttpServlet { |
| |
| <strong>@Inject |
| @OSGiService(dynamic=true) |
| Hello hello;</strong> |
| }</pre> |
| </li> |
| <li>Adicione o método <tt>doGet</tt> a seguir. |
| <pre class="examplecode"> |
| @Override |
| protected void doGet(HttpServletRequest request, HttpServletResponse response) |
| throws ServletException, IOException { |
| PrintWriter out = response.getWriter(); |
| out.println(hello.sayHello("Duke")); |
| }</pre> |
| </li> |
| <li>Clique com o botão direito do mouse no nó do projeto e selecione Novo > Outro.</li> |
| <li>Selecione <strong>beans.xml</strong> na categoria Contextos e Injeção de Dependências. Clique em Próximo.</li> |
| <li>Use o nome de arquivo default (<tt>beans</tt>). Clique em Finalizar. |
| <p>Quando você clicar em Finalizar, o assistente criará o arquivo <tt>beans.xml</tt> na aplicação Web. O CDI será automaticamente ativado se o <tt>beans.xml</tt> for parte da aplicação.</li> |
| <li>Modifique o arquivo <tt>beans.xml</tt> para alterar o valor padrão de <tt>bean-discovery-mode</tt> para <tt>all</tt>. |
| <pre class="examplecode">bean-discovery-mode="<strong>all</strong>"</pre> |
| <p>Salve suas alterações e feche o arquivo.</p> |
| <p>Para obter mais informações sobre as diferenças entre os valores <tt>bean-discovery-mode</tt>, consulte as seguintes páginas:</p> |
| <ul> |
| <li><a href="http://docs.oracle.com/javaee/7/tutorial/doc/cdi-adv001.htm">25.1 Encapsulando Aplicações CDI</a> no Tutorial do Java EE 7</li> |
| <li><a href="http://stackoverflow.com/questions/18107858/cdi-inject-fails-on-maven-embedded-glassfish-plugin-org-jboss-weld-exceptions">http://stackoverflow.com/questions/18107858/cdi-inject-fails-on-maven-embedded-glassfish-plugin-org-jboss-weld-exceptions</a></li> |
| </ul> |
| </li> |
| <li>Clique com o botão direito do mouse no nó Dependências do MavenHelloWebClient na janela Projetos e selecione Adicionar Dependência.</li> |
| <li>Selecione <strong>Provided</strong> como o Escopo.</li> |
| <li>Clique na guia Abrir Projetos na caixa de diálogo Adicionar Biblioteca e selecione <strong>Pacote OSGi MavenHelloServiceApi</strong>. Clique em Add.</li> |
| <li>Clique novamente com o botão direito do mouse no nó Dependências e selecione Adicionar Dependência.</li> |
| <li>Clique na guia Gerenciamento de Dependências na caixa de diálogo Adicionar Biblioteca e selecione o artefato <tt>osgi-cdi-api</tt> que você especificou no projeto POM pai. Clique em Add.<br /> <img alt="Tela da caixa de diálogo Adicionar Biblioteca" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-add-dependency3.png" title="Guia de Gerenciamento de Dependências na caixa de diálogo Adicionar Biblioteca" /> |
| </li> |
| <li>Clique com o botão direito do mouse em <tt>HelloServlet.java</tt> no editor e selecione Corrigir Importações (Alt-Shift-I; ⌘-Shift-I no Mac) para adicionar <tt>com.mycompany.mavenhelloserviceapi.Hello</tt>, <tt>javax.inject.Inject</tt> e <tt>org.glassfish.osgicdi.OSGiService</tt>. Salve as alterações. |
| |
| <p class="notes"><strong>Observação.</strong> Pode ser preciso adicionar manualmente uma instrução de importação para o <tt>com.mycompany.mavenhelloserviceapi.hello</tt> se o IDE não adicionar automaticamente para você.</p> |
| </li> |
| <li>Clique com o botão direito do mouse em MavenOSGiCDIProject e selecione Limpar e Construir.</li> |
| |
| </ol> |
| <p>Ao construir o projeto, na janela de Saída, você deverá ver uma saída semelhante à seguinte.</p> |
| <pre class="examplecode"> |
| Reactor Summary: |
| |
| MavenOSGiCDIProject ............................... SUCCESS [0.798s] |
| MavenHelloServiceApi OSGi Bundle .................. SUCCESS [7.580s] |
| MavenHelloServiceImpl OSGi Bundle ................. SUCCESS [1.142s] |
| MavenHelloWebClient ............................... SUCCESS [8.072s] |
| ------------------------------------------------------------------------ |
| BUILD SUCCESS</pre> |
| <p class="notes"><strong>Observação.</strong> Crie a aplicação web manualmente se ela não for criada automaticamente quando você criar o projeto MavenOSGiCDIProject.</p> |
| <p>Na janela Arquivos, expanda o nó do projeto para a aplicação Web e confirme se o arquivo compactado <tt>MavenHelloWebClient-1.0-SNAPSHOT.war</tt> foi criado no diretório de destino. Se você expandir o arquivo compactado WAR do cliente Web e examinar o <tt>MANIFEST.MF</tt>, verá que o manifesto contém linhas similares às seguintes.</p> |
| <pre class="examplecode"> |
| Manifest-Version: 1.0 |
| Archiver-Version: Plexus Archiver |
| Created-By: Apache Maven |
| Built-By: nb |
| Build-Jdk: 1.7.0_45</pre> |
| |
| |
| |
| |
| <a name="Exercise_3c"></a> |
| <h3>Construindo a aplicação Web como um Pacote OSGi</h3> |
| <p>Para usar o <tt>@OSGiService</tt> e recuperar pacotes OSGi registrados, é preciso tornar a aplicação Web um pacote que possa acessar o <tt>BundleContext</tt>. Para tornar o WAR um pacote OSGi (Pacote de Aplicação Web), adicione os metadados <tt>Web-ContextPath</tt> ao <tt>MANIFEST.MF</tt> no WAR. |
| <!-- To do this, you create a properties file that contains the meta-data, |
| and then modify the POM so that the meta-data is included in the <tt>MANIFEST.MF</tt> when you build the WAR.--> |
| Para tanto, especifique o elemento <tt><Web-ContextPath></tt> nas instruções do <tt>maven-bundle-plugin</tt> e o manifesto gerado pelo plug-in conterá o elemento. Em seguida, você modificará a configuração do <tt>maven-war-plugin</tt> para instruir o plug-in a adicionar o manifesto que foi gerado pelo <tt>plug-in-do-pacote-maven</tt> ao arquivo compactado WAR. |
| </p> |
| |
| |
| <ol> |
| |
| <li>Na janela Projetos, expanda o nó dos Arquivos de Projeto sob o MavenHelloWebCliente clique duas vezes em <tt>pom.xml</tt> para abrir o arquivo no editor.</li> |
| <li>Adicione a seguinte entrada para adicionar o <tt>plug-in-do-pacote-maven</tt> ao POM. |
| <pre class="examplecode"> |
| <build> |
| <plugins> |
| <strong><plugin> |
| <groupId>org.apache.felix</groupId> |
| <artifactId>maven-bundle-plugin</artifactId> |
| <version>2.2.0</version> |
| <extensions>true</extensions> |
| <configuration> |
| <supportedProjectTypes> |
| <supportedProjectType>ejb</supportedProjectType> |
| <supportedProjectType>war</supportedProjectType> |
| <supportedProjectType>bundle</supportedProjectType> |
| <supportedProjectType>jar</supportedProjectType> |
| </supportedProjectTypes> |
| <instructions><!-- <!-- Read all OSGi configuration info from this optional file --> |
| <_include>-osgi.properties</_include>--> |
| <!-- Specify elements to add to MANIFEST.MF --> |
| <Web-ContextPath>/mavenhellowebclient</Web-ContextPath> |
| <!-- By default, nothing is exported --> |
| <Export-Package>!*.impl.*, *</Export-Package> |
| </instructions> |
| </configuration> |
| <executions> |
| <execution> |
| <id>bundle-manifest</id> |
| <phase>process-classes</phase> |
| <goals> |
| <goal>manifest</goal> |
| </goals> |
| </execution> |
| <execution> |
| <id>bundle-install</id> |
| <phase>install</phase> |
| <goals> |
| <goal>install</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin></strong> |
| </pre> |
| </li> |
| <li>Modifique os elementos de configuração do <tt>maven-war-plugin</tt> para adicionar informações do pacote ao <tt>MANIFEST.MF</tt>. Salve as alterações. |
| <pre class="examplecode"> |
| <plugin> |
| <groupId>org.apache.maven.plugins</groupId> |
| <artifactId>maven-war-plugin</artifactId> |
| <version>2.3</version> |
| <configuration> |
| <strong><archive> |
| <!-- add bundle plugin generated manifest to the war --> |
| <manifestFile> |
| ${project.build.outputDirectory}/META-INF/MANIFEST.MF |
| </manifestFile> |
| <!-- For some reason, adding Bundle-ClassPath in maven-bundle-plugin |
| confuses that plugin and it generates wrong Import-Package, etc. |
| So, we generate it here.--> |
| <manifestEntries> |
| <Bundle-ClassPath>WEB-INF/classes/</Bundle-ClassPath> |
| </manifestEntries> |
| </archive></strong> |
| <failOnMissingWebXml>false</failOnMissingWebXml> |
| </configuration> |
| </plugin></pre> |
| </li> |
| <li>Clique com o botão direito do mouse no nó do projeto MavenHelloWebClient na janela Projetos e selecione Limpar e Construir. </li> |
| |
| </ol> |
| <p>Ao expandir o arquivo compactado WAR e abrir o <tt>MANIFEST.MF</tt> no editor, você verá que o <tt>MANIFEST.MF</tt> contém informações adicionais, incluindo a entrada <tt>Web-ContextPath: /mavenhellowebclient</tt> especificada na configuração <tt>maven-bundle-plugin</tt> e entradas de nome de pacote.</p> |
| |
| <pre class="examplecode"> |
| Manifest-Version: 1.0 |
| Export-Package: com.mycompany.mavenhellowebclient;uses:="com.mycompany |
| .mavenhelloserviceapi,javax.servlet,org.glassfish.osgicdi,javax.injec |
| t,javax.servlet.annotation,javax.servlet.http";version="1.0.0.SNAPSHO |
| T" |
| Bundle-ClassPath: WEB-INF/classes/ |
| Built-By: nb |
| Tool: Bnd-1.50.0 |
| Bundle-Name: MavenHelloWebClient |
| Created-By: Apache Maven Bundle Plugin |
| <strong>Web-ContextPath: /mavenhellowebclient</strong> |
| Build-Jdk: 1.7.0_45 |
| Bundle-Version: 1.0.0.SNAPSHOT |
| Bnd-LastModified: 1395053424008 |
| Bundle-ManifestVersion: 2 |
| Import-Package: com.mycompany.mavenhelloserviceapi;version="[1.0,2)",j |
| avax.inject,javax.servlet,javax.servlet.annotation,javax.servlet.http |
| ,org.glassfish.osgicdi;version="[1.0,2)" |
| Bundle-SymbolicName: com.mycompany.MavenHelloWebClient |
| Archiver-Version: Plexus Archiver</pre> |
| |
| <p class="tips">Para obter mais informações sobre como construir aplicações Web como pacotes OSGi, consulte as páginas seguintes.</p> |
| <ul> |
| <li><a href="http://weblogs.java.net/blog/2009/06/04/osgi-enabled-web-applications-inglassfish"> http://weblogs.java.net/blog/2009/06/04/osgi-enabled-web-applications-inglassfish</a></li> |
| <li><a href="http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html"> http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html</a></li> |
| </ul> |
| |
| |
| |
| |
| |
| <a name="Exercise_3d"></a> |
| <h3>Implantando o Pacote de Aplicação Web</h3> |
| <p>Neste exercício, você copiará o pacote da aplicação Web para a pasta <tt>implantação automática/pacotes</tt> na instalação do GlassFish.</p> |
| <ol> |
| <li>Navegue até o diretório de <tt>destino</tt> que contém o <tt>MavenHelloWebClient-1.0-SNAPSHOT.war</tt>.</li> |
| <li>Copie o <tt>MavenHelloWebClient-1.0-SNAPSHOT.war</tt> na pasta<tt>implantação automática/pacotes</tt> da instalação do GlassFish.</li> |
| </ol> |
| |
| <p>Quando você copiar o arquivo compactado WAR para o diretório, um resultado semelhante ao mostrado a seguir será exibido no log do GlassFish Server.</p> |
| <pre class="examplecode"> |
| INFO: Started bundle: file:/glassfish-3.1.1/glassfish/domains/domain1/autodeploy/bundles/MavenHelloWebClient-1.0-SNAPSHOT.war |
| ... |
| INFO: ---- Injection requested for framework service type interface com.mycompany.mavenhelloserviceapi.Hello and annotated with dynamic=true, serviceCriteria= |
| INFO: WEB0671: Loading application [com.mycompany.MavenHelloWebClient_1.0.0.SNAPSHOT] at [/mavenhellowebclient] |
| INFO: Registered ServletContext as a service with properties: {osgi.web.symbolicname=com.mycompany.MavenHelloWebClient, osgi.web.version=1.0.0.SNAPSHOT, osgi.web.contextpath=/mavenhellowebclient} |
| </pre> |
| |
| <p>É possível exibir o servlet no browser clicando no link a seguir <a href="http://localhost:8080/mavenhellowebclient/HelloServlet">http://localhost:8080/mavenhellowebclient/HelloServlet</a>.</p> |
| |
| </div> |
| |
| |
| <a name="Exercise_4"></a> |
| <h2>Instalando e Usando a Console de Admnin do OSGI</h2> |
| |
| <p>Você pode usar a Console de Admin do OSGi GlassFish para instalar, iniciar e parar os pacotes do OSGi implantados no servidor. Neste exercício, você ativará a Console de Admin do OSGi GlassFish e, em seguida, exibirá a lista de pacotes OSGi registrados.</p> |
| <p>Realize as etapas a seguir para instalar os add-ons do GlassFish necessários para a ativação da Console do OSGi e para exibir os pacotes na Console de Admin do Domínio do GlassFish.</p> |
| <ol> |
| <li>Abra a Console de Admin do Domínio do GlassFish no browser. |
| <p class="tips">Clique com o botão direito do mouse no nó do GlassFish server na janela Serviços e selecione Exibir Console de Admin de Domínio.</p></li> |
| <li>Clique na Ferramenta de Atualização na coluna de navegação esquerda.</li> |
| <li>Selecione <tt>glassfish-osgi-gui</tt> na lista de add-ons disponíveis. |
| <p>Clique em Instalar e aceite a licença.</p> |
| <img alt="Tela da Ferramenta de Atualização na Console de Admin do GlassFish" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-glassfish-addons.png" title="Ferramenta de Atualização da Console de Admin do GlassFish" /> |
| </li> |
| <li>Reinicie o GlassFish Server. |
| <p class="alert"><strong>Importante:</strong> se você estiver executando GlassFish Server 3.1.2.2 você precisará modificar o arquivo <tt>osgi.properties</tt> localizado no diretório <tt><em>GLASSFISH-INSTALL</em>/glassfish/config/</tt> e definir o valor da propriedade <tt>org.osgi.framework.startlevel.beginning</tt> como "2" (<tt>org.osgi.framework.startlevel.beginning=2</tt>).<br> Consulte o seguinte fórum para obter mais detalhes: <br><a href="http://www.java.net/forum/topic/glassfish/glassfish/cannot-start-web-console-glassfish-version-3122">Não é possível iniciar a console Web no Glassfish versão 3.1.2.2</a>.</p> |
| </li> |
| <li>Abra a Console de Admin novamente e clique em <strong>servidor (Servidor de Admin)</strong> na coluna de navegação esquerda.</li> |
| <li>Clique na guia da Console do OSGi para exibir uma lista de pacotes OSGi implantados. <br /> <img alt="Tela da caixa de diálogo Adicionar Biblioteca" class="margin-around b-all" src="../../../images_www/articles/80/javaee/osgi-cdi/cdi-glassfish-console.png" title="Guia de Gerenciamento de Dependências na caixa de diálogo Adicionar Biblioteca" /> |
| <p class="notes"><strong>Observação.</strong> Você poderá ser solicitado a informar o nome de usuário e a senha para exibir a lista de pacotes OSGi. Confirme se a caixa de diálogo de autorização não está oculta se você não vir uma lista de pacotes na guia Console do OSGi. O nome de usuário padrão do servidor GlassFish 4 é <tt>admin</tt> se você instalou o servidor quando instalou o IDE. A senha fica vazia por padrão.</p> |
| |
| </li> |
| </ol> |
| |
| <p>É possível rolar a lista para baixo para exibir os status dos pacotes OSGi registrados, além de iniciar e parar os pacotes individuais. Se a lista for ordenada por Id (maior para menor), você verá que os três pacotes que foram implantados serão exibidos perto do topo da lista.</p> |
| |
| |
| |
| |
| <br> |
| <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20Using%20CDI%20to%20Inject%20OSGi%20Bundles%20as%20Services">Enviar Feedback neste Tutorial</a></div> |
| <br style="clear:both;" /> |
| <!-- ======================================================================================= --> |
| <h2><a name="nextsteps"></a>Consulte Também</h2> |
| <p>Para obter mais informações sobre o uso do NetBeans IDE e Maven para desenvolver pacotes OSGi, consulte os seguintes recursos: |
| </p> |
| <ul> |
| <li><a href="http://wiki.netbeans.org/OSGiAndNetBeans">OSGi And NetBeans at wiki.netbeans.org</a></li> |
| <li><a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Melhores Práticas para o Apache Maven no NetBeans IDE</a></li> |
| <li><a href="https://blogs.oracle.com/arungupta/entry/totd_125_creating_an_osgi" target="_blank">TOTD #125: Criando um pacote OSGi utilizando o NetBeans e implantando no GlassFish</a></li> |
| <li><a href="../../trails/java-ee.html">Trilha de Aprendizado do Java EE e Java Web</a></li> |
| </ul> |
| |
| <p>Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos das funcionalidades de desenvolvimento do Java EE do NetBeans IDE, <a href="../../../community/lists/top.html">inscreva-se na lista de correspondência de nbj2ee</a>.</p> |
| </body> |
| </html> |