Creazione di un bundle di servizi

Per la semplice applicazione OSGi HelloWorld , il bundle di servizio implementa l'interfaccia HelloWorldEBA ed la esporta come servizio OSGi.

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 i seguenti due bundle.
  • com.ibm.ws.eba.helloWorld.api: questo bundle dichiara l'interfaccia HelloWorldEBA .
  • com.ibm.ws.eba.helloWorld.service: questo bundle implementa l'interfaccia HelloWorldEBA ed esporta come servizio OSGi. Il servizio esportato viene utilizzato dal bundle del client com.ibm.ws.eba.helloWorld.client, come descritto in Creazione di un bundle client.

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

Procedura

Per creare il bundle di servizi, completare la seguente procedura:

  1. Creare il bundle com.ibm.ws.eba.helloWorld.api. Questo bundle dichiara l'interfaccia HelloWorldEBA .
    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.api.
      • 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. Dichiarare l'interfaccia HelloWorldEBA

    Creare un pacchetto denominato com.ibm.ws.eba.helloWorld.api, che include un'interfaccia denominata HelloWorldEBA. Codificare questa interfaccia per contenere un solo metodo: hello().

    1. Nel progetto com.ibm.ws.eba.helloWorld.api , fare clic con il pulsante destro del mouse sulla cartella src, quindi selezionare Nuovo > Package.
    2. Denominare il nuovo pacchetto com.ibm.ws.eba.helloWorld.api.
    3. Fare clic su Fine.
    4. Fare clic con il tasto destro del mouse sul nuovo pacchetto, quindi selezionare Nuovo > Interfaccia.
    5. Nome della nuova interfaccia HelloWorldEBA.
    6. Fare clic su Fine.
    7. Copia e incolla il metodo seguente per sostituire il contenuto del file di interfaccia:
      package com.ibm.ws.eba.helloWorld.api;
      public interface HelloWorldEBA {
      
          public void hello();
      }
    8. Salva e chiudi il file.
  3. Configurare com.ibm.ws.eba.helloWorld.api come package esportato.

    Modificare il file manifest del bundle nel progetto com.ibm.ws.eba.helloWorld.api per consentire ad altri bundle di caricare le classi dal pacchetto com.ibm.ws.eba.helloWorld.api . Le classi che si trovano nei package non esportati nel manifest del bundle sono private del bundle di definizione e non possono essere caricate da altri bundle.

    1. Aprire il file bundle MANIFEST.MF con l'editor manifest.
      Questo file si trova nella directory BundleContent/META-INF .
    2. Fare clic sulla scheda Runtime .
    3. Nel riquadro Package esportati , fare clic su Aggiungi.
    4. Selezionare il pacchetto com.ibm.ws.eba.helloWorld.api dall'elenco, quindi fare clic su OK.
    5. Nel riquadro Pacchetti esportati , fare clic su Proprietà.
    6. Nella finestra Proprietà , impostare il version su 1.0.0, quindi fare clic su OK.
    7. Salva e chiudi il file.
  4. Creare il bundle com.ibm.ws.eba.helloWorld.service. Questo bundle implementa l'interfaccia di HelloWorldEBA .
    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.service.
      • 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.
  5. Rendere disponibile l'interfaccia HelloWorldEBA al bundle di implementazione del servizio.

    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 servizio. Il pacchetto com.ibm.ws.eba.helloWorld.api fa parte del bundle com.ibm.ws.eba.helloWorld.api .

    1. Espandere il progetto com.ibm.ws.eba.helloWorld.service .
    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 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 di dialogo Proprietà , impostare minimum version su 1.0.0 Inclusivee maximum version su 1.1.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,1.1.0).

      Questa sintassi della versione indica che i package esportati con versioni comprese tra 1.0.0 inclusi e 1.1.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 di implementazione utilizzi una versione aggiornata del pacchetto solo se differisce nel valore della versione micro, poiché una modifica principale, come la rimozione di un metodo da un'interfaccia, o una modifica minore, come l'aggiunta di un metodo a un'interfaccia, potrebbe causare la cessazione del corretto funzionamento del bundle di implementazione.

    8. Salva e chiudi il file.
  6. Implementa il servizio HelloWorld .

    Creare un pacchetto denominato com.ibm.ws.eba.helloWorld.service, che include una classe di implementazione denominata HelloWorldService. Codificare questa classe per implementare il metodo hello() dall'interfaccia HelloWorldEBA . Questa implementazione della classe causa OSGi Service: Hello World! da visualizzare.

    1. Nel progetto com.ibm.ws.eba.helloWorld.service , fare clic con il pulsante destro del mouse sulla cartella src, quindi selezionare Nuovo > Package.
    2. Denominare il nuovo pacchetto com.ibm.ws.eba.helloWorld.service.
    3. Fare clic su Fine.
    4. Fare clic con il tasto destro del mouse sul nuovo package, quindi selezionare Nuovo > Classe.
    5. Denominare la nuova classe di implementazione dell'interfaccia HelloWorldService.
    6. Fare clic su Aggiungi accanto al campo Interfacce .
    7. Immettere Hello, selezionare HelloWorldEBA dall'elenco Elementi corrispondenti , quindi fare clic su OK.
    8. Verificare che la check box Metodi astratti ereditati sia selezionata.
    9. Fare clic su Fine.
    10. Fornire il codice d'implementazione per il metodo hello() ereditato.
      Sostituisci la linea
      // TODO Auto-generated method stub
      con la linea
      System.out.println(OSGi Service: Hello World!);
      Il codice completo per la classe di implementazione deve ora essere il seguente:
      package com.ibm.ws.eba.helloWorld.service;
      
      import com.ibm.ws.eba.helloWorld.api.HelloWorldEBA;
      
      public class HelloWorldService implements HelloWorldEBA {
      
          @Override
          public void hello() {
              System.out.println(OSGi Service: Hello World!);
          }
      
      }
    11. Salva e chiudi il file.
  7. Esporta il servizio helloWorld utilizzando OSGi Blueprint XML

    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.service, creare un file XML Blueprint:
      1. Fare doppio clic sul progetto com.ibm.ws.eba.helloWorld.service e selezionare Nuovo > File Blueprint.
      2. Accettare i valori predefiniti per tutte le opzioni in questo pannello.
      3. Fare clic su Fine.
    2. Aggiungere un elemento bean al file XML Blueprint.
      1. Nella scheda Progetto , fare clic su Aggiungi nel riquadro Panoramica .
      2. Selezionare Beane fare clic su OK.
      3. Fare clic su Sfoglia, selezionare HelloWorldServicee fare clic su OK.
      4. Nel campo ID bean , immettere HelloEBA, quindi fare clic su OK per aggiungere l'elemento bean.
    3. Aggiungere un elemento del servizio al file XML Blueprint.
      1. Selezionare Blueprint nel riquadro Panoramica e fare clic su Aggiungi.
      2. Selezionare Servizioe fare clic su OK.
      3. Fare clic su Sfoglia accanto al campo Interfaccia servizio .
      4. Immettere Hello, selezionare HelloWorldEBA dall'elenco Elementi corrispondenti e fare clic su OK.
      5. Fare clic su Sfoglia accanto al campo Riferimento bean , selezionare HelloEBAe fare clic su OK.
      6. Fare clic su OK per aggiungere l'elemento servizio.
    4. Esaminare il codice sorgente XML Blueprint.
      Selezionare la scheda Origine . Il codice sorgente deve essere il seguente:
      <?xml version="1.0" encoding="UTF-8"?>
      <blueprint xmlns="https://www.osgi.org/xmlns/blueprint/v1.0.0">
        <bean id="helloEBA"
          class="com.ibm.ws.eba.helloWorld.service.HelloWorldService"/>
        <service id=HelloEBAService ref="helloEBA"
          interface="com.ibm.ws.eba.helloWorld.api.HelloWorldEBA"/>
      </blueprint>
      Nel blocco di codice precedente:
      • L'elemento bean definisce un componente Blueprint di cui creare l'istanza. In questo esempio, l'elemento bean crea un'istanza del bean helloEBA , richiamando il costruttore per la classe com.ibm.ws.eba.helloWorld.service.HelloWorldService .
        • L'attributo id identifica il bean. È necessario specificare questo attributo se si fa riferimento al bean da un'altra parte nelle informazioni Blueprint, ad esempio dall'elemento service .
        • L'attributo class specifica quale classe di implementazione del bean viene istanziata.
      • L'elemento service definisce la registrazione di un componente nel registro del servizio OSGi. In questo esempio, l'elemento service registra il bean con nome helloEBA come servizio nel registro del servizio OSGi con interfaccia com.ibm.ws.eba.helloWorld.api.HelloWorldEBA, specificato dall'attributo dell'interfaccia.
        • L'attributo ref fa riferimento al id del bean da registrare. Questo id è definito nell'elemento bean .
        • L'attributo interface fa riferimento all'interfaccia implementata dalla classe bean.
      Per ulteriori informazioni, consultare la sezione 121.5 Bean Manager e la sezione 121.6 Service Manager di OSGi Service Platform Release 4 Versione 4.2 Enterprise Specification.
    5. Salva e chiudi il file.
    Nota: potresti ricevere un messaggio di eccezione (visibile nel riquadro Problemi ) che indica che non c'è alcuna voce bin.include per OSGI-INF nel file di proprietà di build. Se viene visualizzato questo messaggio, utilizzare l'opzione quick-fix per aggiungere la voce (fare clic con il tasto destro del mouse sul problema, quindi selezionare quick-fix).

Risultati

Sono stati creati due bundle, com.ibm.ws.eba.helloWorld.api e com.ibm.ws.eba.helloWorld.service. Il servizio com.ibm.ws.eba.helloWorld.service implementa l'interfaccia HelloWorldEBA dichiarata nel bundle com.ibm.ws.eba.helloWorld.api e contiene la logica aziendale e i metadati necessari per esportare il servizio com.ibm.ws.eba.helloWorld.service.

Operazioni successive

Puoi ora creare il bundle del client che utilizza il servizio com.ibm.ws.eba.helloWorld.service .