Puede enlazar una referencia para valores dinámicos en el
espacio de nombres Java™ Naming and Directory Interface (JNDI) predeterminado desde los archivos de configuración de servidor
utilizando el elemento jndiReferenceEntry en Liberty.
Acerca de esta tarea
El espacio de nombres JNDI predeterminado
está disponible en Liberty para
proporcionar enlaces a objetos varios necesarios para las
aplicaciones. En
función de las características habilitadas en el servidor, puede enlazar un
conjunto predeterminado de objetos con el espacio de nombres JNDI predeterminado. Asimismo,
puede enlazar una referencia a una fábrica de objetos, que determina dinámicamente el
valor que se devuelve. También puede utilizar esta fábrica de objetos para devolver
tipos de objetos personalizados a una aplicación.
Para obtener más información sobre la denominación JNDI, consulte Naming.
- Añada la característica jndi-1.0
Liberty al
archivo server.xml.
<featureManager>
<feature>jndi-1.0</feature>
</featureManager>
- Cree una clase ObjectFactory que devuelva un valor definido
mediante programación.
import javax.naming.spi.ObjectFactory;
public class MyObjectFactory implements ObjectFactory {
@Override
public Object getObjectInstance(Object o, Name n, Context c, Hashtable<?, ?> envmt) throws Exception {
Properties p = new Properties();
p.put("abc", 123);
return p;
}
}
- Incluya la ObjectFactory en un elemento library en el archivo
server.xml:
<library id="objectFactoryLib">
<fileset dir="${server.config.dir}/lib" includes="factory.jar"/>
</library>
- Declare la fábrica en un elemento jndiObjectFactory en el archivo
server.xml y haga referencia a la biblioteca declarada
anteriormente.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"/>
También puede declarar el tipo de objeto que devuelve la fábrica. El método
javax.naming.Context.list() devuelve el tipo.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"
objectClassName="java.util.Properties"/>
- Declare la entrada en un elemento jndiReferenceEntry en el archivo
server.xml y haga referencia a la fábrica declarada anteriormente.
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
- Para declarar más propiedades para el elemento jndiReferenceEntry
en el archivo server.xml:
<jndiReferenceEntry id="refEntry"
jndiName="ref/entry" factoryRef="objectFactory">
<properties abc="123"/>
</jndiReferenceEntry>
Estas propiedades adicionales se representan como
javax.naming.StringRefAddr en el
objeto javax.naming.Reference que se pasa a la fábrica:
import javax.naming.spi.ObjectFactory;
public class MyObjectFactory implements ObjectFactory {
@Override
public Object getObjectInstance(Object o, Name n, Context c,
Hashtable<?, ?> envmt) throws Exception {
Properties p = new Properties();
Reference ref = (Reference) o;
RefAddr refAddr = ref.get("abc");
p.put("abc", refAddr == null ? 123 : refAddr.getContent());
return p;
}
}
- Puede inyectar el objeto resultante a una aplicación utilizando una referencia de
entorno de recursos:
@Resource(name="ref/entry")
private Properties properties;