[AIX Solaris HP-UX Linux Windows][z/OS]

Utilisation d'applications OSGi en tant qu'implémentations de composant SCA (obsolète)

Vous pouvez utiliser une application OSGi en tant que composant SCA (Service Component Architecture).

Avant de commencer

Identifiez l'application OSGi à utiliser en tant que composant SCA. Une application OSGi est une collection d'ensembles OSGi qui utilisent le modèle de composant Blueprint pour exposer ou consommer des services. Une application OSGi contient un manifeste d'application qui déclare les services suivants :

  • Services fournis par l'application et accessibles depuis l'extérieur de l'application
  • Services que l'application veut consommer depuis l'extérieur

Vous pouvez utiliser SCA pour fournir des liaisons de service à ces services.

A propos de cette tâche

Pour fournir des liaisons de service à l'aide de SCA, procédez comme suit :
  1. Modifiez une application OSGi pour fournir ou utiliser des services distants.
  2. Ecrivez une définition de composite SCA qui utilise une application OSGi en tant qu'implémentation de composant et fournit des liaisons pour ses services distants.

Une application OSGi déclare des services externes dans les instructions Application-ImportService et Application-ExportService de son manifeste d'application, lequel est fourni dans le fichier META-INF/APPLICATION.MF de l'archive EBA (Enterprise Bundle Archive). L'instruction Application-ExportService déclare les services distants qui sont fournis par l'application OSGi. L'instruction Application-ImportService déclare les services dont dépend l'application OSGi. Tous les services spécifiés dans le manifeste d'application sont utilisables à distance.

Procédure

  1. Créé unimplementation.osgiapp composant dans une définition composite SCA.

    Indiquez le type de composant implementation.osgiapp et définissez applicationSymbolicName et applicationVersion par des valeurs qui correspondent aux attributs Application-SymbolicName et Application-Version dans le manifeste d'application.

    Par exemple, soit le manifeste d'application OSGi, le fichier META-INF/APPLICATION.MF contient les en-têtes suivants :

    Application-SymbolicName: helloworldApp
    Application-Version: 1.0.0

    Configurez un composant qui fait référence à ces en-têtes dans une définition de composite SCA, par exemple :

    <?xml version="1.0" encoding="UTF-8"?>
    <composite
      xmlns="https://www.osoa.org/xmlns/sca/1.0"
      xmlns:scafp="https://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06" 
      targetNamespace="https://www.example.com"
      name="HelloWorldComposite">
        <component name="HelloWorldComponent">
            <scafp:implementation.osgiapp 
               applicationSymbolicName="helloworldApp"
               applicationVersion="1.0.0"/>
        </component>
    </composite>

    L'élément implementation.osgiapp requiert l'utilisation d'un préfixe d'espace de nom XML qui est associé à l'espace de nom "https://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06".

    L'attribut applicationVersion est facultatif. Vous pouvez l'ajouter pour vous assurer qu'une version particulière d'une version OSGi est utilisée.

  2. Identifiez les services Blueprint devant être accessibles à distance.
    1. Editez l'en-tête Application-ExportService dans le manifeste d'application OSGi afin qu'il identifie une ou plusieurs interfaces de service à exporter.

      L'exemple d'en-tête suivant spécifie que les services Blueprint qui implémentent et exportent l'interface example.HelloWorld doivent être accessibles hors de l'application.

      Application-ExportService: example.HelloWorld

      Voici un exemple d'un composant Blueprint avec un service de ce type :

      <blueprint xmlns="https://www.osgi.org/xmlns/blueprint/v1.0.0">
      <bean id="helloWorldComponent" class="example.HelloWorldImpl"
        <service id="helloWorld" ref="helloWorldComponent" 
           interface="example.HelloWorld">
        	<service-properties>
        	  <entry key="service.exported.interfaces" value="*"/>
        	</service-properties>
        </service>
      </blueprint>

      Le service Blueprint doit indiquer la propriété service.exported.interfaces pour identifier lesquelles de ses interfaces doivent être exposées à distance. La valeur peut être un astérisque (*) pour indiquer que toutes ses interfaces sont accessibles à distance ou il peut s'agir d'un nom d'interface particulier.

    2. Configurez un service SCA qui correspond à chaque service Blueprint utilisable à distance dans le composant.

      Utilisez la valeur id de service Blueprint pour le nom de service SCA. Si un service Blueprint n'a pas de valeur id, utilisez la valeur id bean à la place. Si plusieurs interfaces sont définies pour le service Blueprint, attribuez la valeur id Blueprint au premier nom de service SCA d'interface de service. Pour le deuxième service et les versions ultérieures, utilisez leBlueprint id_ fully qualified interface name valeur du nom du service SCA dans l'ordre des interfaces défini dans leblueprint.xml déposer.

      Par exemple, ajoutez le service helloWorld qui apparaît dans le composant Blueprint de l'étape 2a à la définition de composite SCA de l'étape 1 :

      <?xml version="1.0" encoding="UTF-8"?>
       <composite
        xmlns="https://www.osoa.org/xmlns/sca/1.0"
        xmlns:scafp="https://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06"
        targetNamespace="https://www.example.com"
        name="HelloWorldComposite">
          <component name="HelloWorldComponent">
              <scafp:implementation.osgiapp 
                 applicationSymbolicName="helloworldApp"
                 applicationVersion="1.0.0"/>
              <service name="helloWorld">
                  <binding.sca>
              </service>
          </component>
      </composite>

      Cet exemple utilise binding.sca pour la liaison de service. Le service peut être accessible sur une ou plusieurs autres liaisons prises en charge par SCA, à l'exception de la liaison de service EJB 2.x.

      Les éléments du service SCA ne sont pas requis. A défaut de spécification, le service est accessible sur binding.sca par défaut.

  3. Identifiez les services à fournir hors de l'application OSGi.
    1. Editez l'en-tête Application-ImportService dans le manifeste d'application OSGi afin qu'il identifie une ou plusieurs interfaces de service à importer.

      L'exemple d'en-tête suivant indique que l'interface de service example.Greeting doit être importée :

      Application-ImportService: example.Greeting

      Une référence Blueprint demande explicitement un service importé en filtrant la propriété service.imported. Les services distants utilisent une sémantique de transmission par valeur plutôt qu'une sémantique de transmission par référence pour les services locaux dans l'application. Voici un exemple d'un composant Blueprint avec une référence de ce type :

      <blueprint xmlns="https://www.osgi.org/xmlns/blueprint/v1.0.0">
        <bean id="helloWorldComponent" class="example.HelloWorldImpl"
          <property name="greetingList" ref="greetingRef"/>
        </bean>
        <service id="helloWorld" ref="helloWorldComponent" 
           interface="example.HelloWorld">
        	<service-properties>
        	  <entry key="service.exported.interfaces" value="*"/>
        	</service-properties>
        </service>
        <reference-list id="greetingRef" interface="example.Greeting" 
           filter="(&amp;(service.imported=*))"/>
      </blueprint>
    2. Configurez une référence SCA qui correspond à chaque service importé dans le composant.

      Utilisez le nom d'interface entièrement qualifié pour le nom de référence SCA.

      Par exemple, ajoutez la référence example.Greeting qui apparaît dans le composant Blueprint de l'étape 3 à la définition de composite SCA de l'étape 2 :

      <?xml version="1.0" encoding="UTF-8"?>
       <composite
        xmlns="https://www.osoa.org/xmlns/sca/1.0"
        xmlns:scafp="https://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06" 
        targetNamespace="https://www.example.com"
        name="HelloWorldComposite">
          <component name="HelloWorldComponent">
              <scafp:implementation.osgiapp 
                 applicationSymbolicName="helloworldApp"
                 applicationVersion="1.0.0"/>
              <service name="helloWorld">
                  <binding.sca>
              </service>
              <reference name="example.Greeting">
                  <binding.sca uri="MyGreetingComponent">
              </reference>
          </component>
      </composite>

      Cet exemple utilise binding.sca pour la liaison de référence. La référence peut utiliser une ou plusieurs autres liaisons prises en charge par SCA.

      Une référence SCA pour unimplementation.osgiapp Le composant a implicitement 0 à plusieurs pour l'attribut de multiplicité (multiplicity='0..n' ). Cela signifie que vous pouvez câbler la référence à 0, 1 ou plusieurs services en fonction des exigences de l'application. Concernant l'attribut de multiplicité :

      • Un élément reference-list Blueprint sélectionne plusieurs services. L'implémentation Blueprint ne peut pas faire d'hypothèse sur l'ordre des services dans la liste de références, comparé à l'ordre des liaisons dans la définition de composite.
      • Un élément reference Blueprint sélectionne un service unique. Si la référence SCA fournit plusieurs liaisons, la sélection de la liaison utilisée n'est pas spécifiée. Si la référence SCA ne fournit pas de liaisons, la dépendance n'est pas satisfaite. Si la référence est obligatoire, il est possible que le bean ne démarre pas.

      Vous pouvez remplacer l'attribut de multiplicité sur la référence SCA en définissant 1 à plusieurs ('1..n') ou 1 à 1 ('1..1'), afin d'assurer qu'un nombre donné de liaisons sont spécifiées.

Résultats

L'application OSGi est définie en tant que composant SCA.

Etape suivante

Déployez l'application OSGi et le composite SCA qui utilise l'application en tant qu'unités de composition de la même application de niveau métier. Vous pouvez utiliser la console d'administration ou des commandes wsadmin pour créer une application de niveau métier, importer le fichier EBA et le composite SCA en tant qu'actifs, puis ajouter les actifs EBA et SCA en tant qu'unités de composition à l'application de niveau métier.