Développement avec l'espace de nom JNDI par défaut dans une fonction Liberty

Vous pouvez rendre un objet disponible dans l'espace de nom par défaut Java™ Naming and Directory Interface (JNDI). Pour ce faire, vous devez l'enregistrer dans le registre de service OSGi avec la propriété de service osgi.jndi.service.name. La valeur de osgi.jndi.service.name est le nom JNDI requis. De même, pour rechercher un objet dans l'espace de nom JNDI par défaut, vous pouvez parcourir le registre de service OSGi avec la propriété de service osgi.jndi.service.name. La valeur de osgi.jndi.service.name est le nom JNDI.

Pourquoi et quand exécuter cette tâche

Comparée avec l'appel explicite de Context.bind ou Context.lookup, l'utilisation du registre de service a les avantages suivants :
  • Votre fonction fonctionne correctement lorsque jndi-1.0 est activé, mais elle n'a pas besoin d'une dépendance explicite sur JNDI.
  • Vous n'avez pas besoin de déconnecter explicitement les objets de JNDI lorsque votre fonction est supprimée car l'infrastructure OSGi désenregistre automatiquement les services à l'arrêt des bundles.
  • Vous pouvez aisément implémenter l'initialisation en retard à l'aide des services déclaratifs ou de ServiceFactory plutôt qu'utiliser Reference et ObjectFactory.

Pour plus d'informations sur JNDI, voir Nommage.

Procédure

  1. Enregistrez un service à l'aide de la propriété osgi.jndi.service.name avec le nom JNDI. Pour plus d'informations sur l'enregistrement des services, voir Enregistrement des services OSGi.
  2. Mettez à jour votre fichier metatype.xml pour permettre la spécification d'un nom JNDI dans la configuration du serveur. Pour permettre aux utilisateurs de spécifier un nom JNDI pour votre service, vous devez utiliser jndiName id pour la cohérence avec les autres fonctions dans l'exécution du profil Liberty, par exemple :
    <AD id="jndiName" name="Nom JNDI" description="Nom
    JNDI pour un widget." type="String" ibm:unique="jndiName"/>
    Vous pouvez utiliser un attribut interne pour définir automatiquement la propriété de service osgi.jndi.service.name avec la valeur de l'attribut jndiName, par exemple :
    <AD id="osgi.jndi.service.name" name="internal" description="internal" type="String" default="${jndiName}"/>
    Pour plus d'informations sur le métatype, voir Configuration avancée.
  3. [8.5.5.1 ou ultérieure]Implémentez l'interface ResourceFactory si vous avez besoin d'informations de référence de ressource Java EE. Sivotre sevrice a besoin d'informations de référence de ressource Java EE, comme res-auth, vous pouvez enregistrer une valeur ResourceFactory dans le registre de service OSGi avec les propriétés jndiName et creates.objectClass. Le service ResourceFactory est ré-enregistré automatiquement avec la propriété osgi.jndi.service.name. Exemple :
        import com.ibm.wsspi.resource.ResourceFactory;
        public class WidgetResourceFactory implements ResourceFactory { ... }
    
        Properties properties = new Properties();
        properties.put(ResourceFactory.JNDI_NAME, "widget/abc");
        properties.put(ResourceFactory.CREATES_OBJECT_CLASS, Widget.class.getName());
        bundleContext.registerService(ResourceFactory.class, new WidgetResourceFactory(), properties);
    Sinon, le service peut être enregistré automatiquement à l'aide des services déclaratifs et du métatype. Dans ce cas, vous pouvez spécifier la propriété creates.objectClass en propriété de services déclaratifs. Vous n'avez pas besoin de spécifier la propriété jndiName car elle est automatiquement définie à partir de la configuration utilisateur avec l'élément <AD id="jndiName"> dans le fichier metatype.xml à l'étape 2, et vous n'avez pas besoin d'élément <AD id="osgi.jndi.service.name> dans le fichier metatype.xml car le service ResourceFactory sera automatiquement ré-enregistré.
  4. Localisez un objet à l'aide de la propriété osgi.jndi.service.name avec le nom JNDI. Exemple :
    bundleContext.getServiceReference(DataSource.class, "(osgi.jndi.service.name=jdbc/myds)");
    Sinon, vous pouvez localiser une valeur ResourceFactory à l'aide des propriétés jndiName et creates.objectClass.
  5. Mettez à jour votre fichier metatype.xml pour permettre à une ressource d'être spécifiée dans le fichier server.xml à l'aide de l'ID de la ressource. Ceci permet à la ressource d'être accessible que la ressource ait un jndiName ou non. Par exemple,
    <AD id="dataSourceRef" type="String" ibm:type="pid" ibm:reference="com.ibm.ws.jdbc.dataSource" cardinality="1" name="%dataSourceRef" description="%dataSourceRef.desc"/>
    Si vous utilisez des services déclaratifs, vous pouvez utiliser un attribut interne pour définir une propriété de service .target avec un filtre. Par exemple, si votre composant de services déclaratifs a une référence appelée dataSource, vous pouvez utiliser la définition d'attribut suivante pour vous assurer que la dataSource référencée par l'attribut de configuration dataSourceRef est utilisée.
    <AD id="dataSource.target" type="String" default="(service.pid=${dataSourceRef})" ibm:final="true" name="internal" description="internal"/>

Icône indiquant le type de rubrique Rubrique Tâche

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_feature_jndi
Nom du fichier : twlp_feature_jndi.html