Desarrollo con el espacio de nombres JNDI predeterminado en una característica de Liberty

Puede hacer que un objeto esté disponible en el espacio de nombres JNDI (Java™ Naming and Directory Interface) predeterminado. Para ello, debe registrarlo en el registro de servicios OSGi con la propiedad de servicio osgi.jndi.service.name. El valor de osgi.jndi.service.name es el nombre JNDI necesario. De forma similar, para buscar un objeto en el espacio de nombres JNDI predeterminado, puede buscar en el registro de servicios OSGi con la propiedad de servicio osgi.jndi.service.name. El valor de osgi.jndi.service.name es el nombre JNDI.

Acerca de esta tarea

En comparación con una llamada Context.bind o Context.lookup explícitamente, la utilización del registro de servicio tiene ofrece las siguientes ventajas:
  • Su característica funciona correctamente cuando se ha habilitado jndi-1.0 pero su característica no necesita una dependencia explícita con JNDI.
  • No es necesario desenlazar objetos de forma explícita desde JNDI cuando se elimina la característica porque la infraestructura de OSGi automáticamente anulará el registro de servicios cuando se detengan los paquetes.
  • Puede implementar fácilmente la inicialización poco activa utilizando servicios declarativos o ServiceFactory en lugar de utilizar Reference y ObjectFactory.

Para obtener más información sobre JNDI, consulte Naming.

Procedimiento

  1. Registre un servicio utilizando la propiedad osgi.jndi.service.name con el nombre JNDI. Para obtener más información sobre el registro de servicios, consulte Registro de servicios OSGi.
  2. Actualice el archivo metatype.xml para permitir especificar un nombre JNDI en la configuración del servidor. Para que los usuarios puedan especificar un nombre JNDI para el servicio, utilice jndiName id para la coherencia con otras características en el tiempo de ejecución de Liberty, por ejemplo:
    <AD id="jndiName" name="JNDI name" description="JNDI name for a widget." type="String" ibm:unique="jndiName"/>
    Puede utilizar un atributo interno para establecer automáticamente la propiedad de servicio osgi.jndi.service.name con el valor del atributo jndiName, por ejemplo:
    <AD id="osgi.jndi.service.name" name="internal" description="internal" type="String" default="${jndiName}"/>
    Para obtener más información sobre los metatipos de OSGi, consulte Configuración avanzada.
  3. Implemente la interfaz ResourceFactory si necesita información de referencia de recursos Java EE. Si su servicio necesita información de referencia de recursos Java EE como, por ejemplo, res-auth, puede registrar un valor ResourceFactory en el registro de servicios de OSGi con las propiedades jndiName y creates.objectClass. El servicio ResourceFactory se vuelve a registrar automáticamente con la propiedad osgi.jndi.service.name. Por ejemplo:
        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);
    De forma alternativa, el servicio se puede registrar automáticamente utilizando servicios declarativos y metatipos. En tal caso, puede especificar la propiedad creates.objectClass como propiedad de servicios declarativos. No es necesario que especifique la propiedad jndiName porque se ha establecido automáticamente a partir de la configuración del usuario con el elemento <AD id="jndiName"> en el archivo metatype.xml en el paso 2, y no es necesario ningún elemento <AD id="osgi.jndi.service.name> en el archivo metatype.xml porque el servicio ResourceFactory se volverá a registrar automáticamente.
  4. Localice un objeto utilizando la propiedad osgi.jndi.service.name con el nombre JNDI. Por ejemplo:
    bundleContext.getServiceReference(DataSource.class, "(osgi.jndi.service.name=jdbc/myds)");
    De forma alternativa, puede localizar un valor ResourceFactory utilizando las propiedades jndiName y creates.objectClass.
  5. Actualice su archivo metatype.xml para permitir especificar un recurso en server.xml utilizando el ID del recurso. De este modo se permite acceder al recurso independientemente de si el recurso tiene o no el valor jndiName. Por ejemplo:
    <AD id="dataSourceRef" type="String" ibm:type="pid" ibm:reference="com.ibm.ws.jdbc.dataSource" cardinality="1" name="%dataSourceRef" description="%dataSourceRef.desc"/>
    Si está utilizando servicios declarativos, puede utilizar un atributo interno para definir una propiedad de servicio .target con un filtro. Por ejemplo, si su componente de servicios declarativos tiene una referencia denominada dataSource, puede utilizar la definición de atributo siguiente para garantizar que se utiliza el valor de dataSource al cual hace referencia el atributo de configuración dataSourceRef.
    <AD id="dataSource.target" type="String" default="(service.pid=${dataSourceRef})" ibm:final="true" name="internal" description="internal"/>

Icono que indica el tipo de tema Tema de tarea



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_feature_jndi
Nombre de archivo:twlp_feature_jndi.html