Creazione di un bundle client

Per l'applicazione OSGi HelloWorld semplice, il bundle di client richiama il servizio HelloWorldService e lo utilizza per produrre il messaggio OSGi Service: Hello World!.

Prima di iniziare

Questa attività presuppone che l'utente abbia già creato il servizio HelloWorldService , come descritto in Creazione di un bundle di servizi.

Informazioni su questa attività

Un bundle, l'unità modulare nel modello OSGi, è un file JAR che include i metadati dell'applicazione OSGi. Questi metadati sono stati definiti nel file manifest del file JAR, META-INF/MANIFEST.MF.

Linee guida per la progettazione dell'applicazione OSGi Versione 8.5 fornisce il supporto grafico per la creazione e la creazione di pacchetti. La procedura di esempio che segue utilizza questo strumento. È anche possibile utilizzare altri strumenti e la procedura è adattabile ad altri strumenti.

Questa procedura di esempio crea un bundle denominato com.ibm.ws.eba.helloWorld.client. Questo bundle utilizza il servizio HelloWorldService esportato dal bundle com.ibm.ws.eba.helloWorld.service, come descritto in Creazione di un bundle di servizi.

Dimostrazione di questa attività (7 minuti) Icona di dimostrazione Flash

Procedura

Per creare il bundle client, completare la seguente procedura:

  1. Creare un progetto bundle OSGi.
    1. Fare clic su File > Nuovo > Progetto bundle OSGi.
      Viene visualizzata la finestra Progetto bundle OSGi .
    2. Configurare il progetto.
      • Per Nome progetto, immettere com.ibm.ws.eba.helloWorld.client.
      • Deselezionare la casella di spunta Aggiungi bundle all'applicazione . Se si lascia questa casella di spunta selezionata, viene creato automaticamente un nuovo progetto applicazione OSGi e il bundle viene aggiunto ad esso. Qui, tuttavia, il progetto applicazione verrà creato manualmente in un'attività separata, Creazione di un'applicazione OSGi.
      • Lascia le altre opzioni come valori predefiniti.
    3. Fare clic su Avanti
      Viene visualizzato il pannello Configurazione Java . Accettare i valori predefiniti per tutte le opzioni in questo pannello.
    4. Fare clic su Avanti
      Viene visualizzato il riquadro Impostazioni bundle OSGi . Accettare i valori predefiniti per tutte le opzioni in questo pannello.
    5. Fare clic su Fine.
    Il progetto OSGi è stato creato.
  2. Rendere disponibile l'interfaccia HelloWorldEBA al bundle di implementazione del client

    Modificare il file manifest del bundle client per rendere disponibili le classi all'interno del pacchetto com.ibm.ws.eba.helloWorld.api al bundle di implementazione del client. Il pacchetto com.ibm.ws.eba.helloWorld.api fa parte del bundle com.ibm.ws.eba.helloWorld.api .

    1. Espandi il progetto com.ibm.ws.eba.helloWorld.client
    2. Aprire il file bundle MANIFEST.MF con l'editor manifest.
      Questo file si trova nella directory BundleContent/META-INF .
    3. Fare clic sulla scheda Dipendenze .
    4. Nel riquadro Package importati , fare clic su Aggiungi.
    5. Nella finestra di dialogo Selezione pacchetto , immettere com.ibm.ws.eba, selezionare com.ibm.ws.eba.helloWorld.api (1.0.0) dall'elenco Pacchetti esportati , quindi fare clic su OK.
      Il package viene aggiunto all'elenco Package importati .
    6. Nell'elenco Pacchetti importati , selezionare il pacchetto com.ibm.ws.eba.helloWorld.api e fare clic su Proprietà.
    7. Nella finestra Proprietà , impostare minimum version su 1.0.0 Inclusivee impostare maximum version su 2.0.0 Exclusive, quindi fare clic su OK.
      La voce per questo pacchetto nell'elenco Pacchetti importati viene aggiornata in com.ibm.ws.eba.helloWorld.api [1.0.0,2.0.0).

      Questa sintassi della versione indica che i package esportati con versioni comprese tra 1.0.0 inclusi e 2.0.0 esclusivi corrisponderanno a questa importazione. Per ulteriori informazioni sulla sintassi della versione, consultare la sezione 3.2.6 Intervalli di versioni di OSGi Service Platform Release 4 Versione 4.2 Core Specification.

      Questo intervallo di versioni è stato specificato per garantire che il bundle del client utilizzi una versione aggiornata del package se differisce nel valore della versione secondaria o della versione micro, ma non nella versione principale, poiché solo una modifica incompatibile binaria, come l'eliminazione di un metodo pubblico, può far sì che il bundle del client cessi di funzionare correttamente.

    8. Salva e chiudi il file.
  3. Creare una classe HelloWorldClient.
    1. Nella cartella di origine del progetto src, creare un package denominato com.ibm.ws.eba.helloWorld.client. Nel pacchetto, creare una classe denominata HelloWorldClient con i seguenti contenuti:
      package com.ibm.ws.eba.helloWorld.client;
      
      import com.ibm.ws.eba.helloWorld.api.HelloWorldEBA;
      
      public class HelloWorldClient {
          private HelloWorldEBA helloWorldEBAService = null; //a reference to the service
      
          public void refHello() {
              System.out.println("Client: Start...");
              helloWorldEBAService.hello();
              System.out.println("Client: End...");
          }
      
          public HelloWorldEBA getHelloWorldEBAService() {
              return helloWorldEBAService;
          }
      
          public void setHelloWorldEBAService(HelloWorldEBA helloWorldEBAService) {
              this.helloWorldEBAService = helloWorldEBAService;
          }
      }
      Nel blocco di codice precedente:
      • La riga HelloWorldEBA helloWorldEBAService = null; definisce la dipendenza del servizio.
      • La riga helloWorldEBAService.hello(); dimostra che è stato inserito un servizio per la dipendenza helloWorldEBAService .
    2. Salva e chiudi il file.
  4. Creare una configurazione Blueprint.

    Una configurazione Blueprint contiene l'assemblaggio del componente bundle e le informazioni di configurazione. Inoltre, descrive come i componenti vengono registrati nel registro del servizio OSGi o come i componenti cercano i servizi dal registro del servizio OSGi. Queste informazioni vengono utilizzate al runtime per creare un'istanza e configurare i componenti richiesti all'avvio del bundle.

    1. Nel progetto com.ibm.ws.eba.helloWorld.client, creare un file XML Blueprint:
      1. Fare doppio clic sul progetto com.ibm.ws.eba.helloWorld.client e selezionare Nuovo > File Blueprint.
      2. (Facoltativo) Specificare il nome file. Può essere qualsiasi nome purché si tratti di un file XML. Ad esempio, helloWorldRef.xml.
      3. Lascia le altre opzioni come valori predefiniti.
      4. Fare clic su Fine.
    2. Aggiungere un elemento di riferimento al file XML Blueprint.
      1. Nella scheda Progetto , fare clic su Aggiungi nel riquadro Panoramica .
      2. Selezionare Riferimentoe fare clic su OK.
      3. Fare clic su Sfoglia accanto al campo Interfaccia di riferimento .
      4. Immettere Hello, selezionare HelloWorldEBA dall'elenco Elementi corrispondenti e fare clic su OK.
      5. Nel campo ID riferimento , immettere helloEBARef, quindi fare clic su OK per aggiungere l'elemento di riferimento.
    3. Aggiungere un elemento bean al file XML Blueprint.
      1. Selezionare Blueprint nel riquadro Panoramica e fare clic su Aggiungi.
      2. Selezionare Beane fare clic su OK.
      3. Fare clic su Sfoglia, selezionare HelloWorldCliente fare clic su OK.
      4. Fare clic su OK per aggiungere l'elemento bean.
      5. Nel riquadro Riferimenti metodo , fare clic su Sfoglia accanto al campo Metodo di inizializzazione .
      6. Selezionate refHello( ) e fate clic su OK
    4. Aggiungere una proprietà al bean.
      1. Selezionate HelloWorldClientBean nel riquadro Panoramica e fate clic su Aggiungi.
      2. Selezionare Proprietàe fare clic su OK.
      3. Nel riquadro Dettagli , immettere helloWorldEBAService nel campo Nome .
      4. Fare clic su Sfoglia accanto al campo Riferimento .
      5. Selezionare helloEBARef e fare clic su OK.
    5. Esaminare il codice sorgente XML Blueprint.
      Questo file Blueprint specifica il collegamento interno dei componenti.
      <?xml version="1.0" encoding="UTF-8"?>
      <blueprint xmlns="https://www.osgi.org/xmlns/blueprint/v1.0.0">
        <reference id="helloEBARef"
          interface="com.ibm.ws.eba.helloWorld.api.HelloWorldEBA"/>
        <bean id="HelloWorldClientBean"
          class="com.ibm.ws.eba.helloWorld.client.HelloWorldClient"
          init-method="refHello">
          <property name="helloWorldEBAService" ref="helloEBARef"/> 
        </bean>
      </blueprint>
      Nel blocco di codice precedente:
      • init-method refHello viene richiamato quando viene creato il bean com.ibm.ws.eba.helloWorld.client.HelloWorldClient .
      • L'elemento property specifica come viene inserita una dipendenza.
        • La proprietà helloWorldEBAService viene impostata richiamando il programma di impostazione proprietà public void setHelloWorldEBAService(HelloWorldEBA helloWorldEBAService). È possibile utilizzare l'inserimento del setter per le proprietà del bean definite in conformità con le convenzioni del bean Java™ .
        • L'attributo ref specifica l'ID elemento Blueprint del componente da inserire. L'attributo ref deve corrispondere a un elemento di primo livello in questo file. In questo caso, corrisponde all'elemento reference .
      • L'elemento reference definisce una dipendenza di questo modulo Blueprint su un servizio OSGi con interfaccia com.ibm.ws.eba.helloWorld.api.HelloWorldEBA. Quando il contenitore Blueprint avvia questo modulo, il valore dell'attributo dell'interfaccia deve corrispondere a un servizio disponibile nel registro del servizio OSGi. Se non è possibile effettuare alcuna corrispondenza, non viene avviato il modulo Blueprint. In tal caso, il servizio viene definito nell'elemento servizio dell'XML Blueprint del bundle di servizio.
      Per ulteriori informazioni, consultare la sezione 121.5 Bean Manager e la sezione 121.7 Service Reference Managers di OSGi Service Platform Release 4 Versione 4.2 Enterprise Specification.
    6. Salva e chiudi il file.

Risultati

È stato creato un bundle denominato com.ibm.ws.eba.helloWorld.client. Questo bundle richiama il servizio HelloWorldService e lo usa per produrre il messaggio OSGi Service: Hello World!.

Operazioni successive

Ora è possibile creare un'applicazione OSGi, in cui più bundle sono compressi insieme.