Vous pouvez lier une référence pour des valeurs
dynamiques dans l'espace de nom JNDI
(Java™ Naming and Directory
Interface) par défaut en utilisant l'élément
jndiReferenceEntry de Liberty.
Pourquoi et quand exécuter cette tâche
L'espace de nom JNDI par défaut est disponible
dans Liberty pour fournir des liaisons à divers objets
nécessaires aux applications. Selon les fonctions qui sont activées
sur votre serveur, vous pouvez
lier un jeu prédeterminé d'objets dans l'espace de nom JNDI
par défaut. Vous pouvez aussi lier une référence à
une fabrique d'objets, ce qui détermine de manière dynamique la
valeur qu'il renvoie. Vous pouvez également utiliser cette fabrique
d'objets pour renvoyer des types d'objet personnalisées à une
application.
Pour plus d'informations sur le nommage JNDI, voir Nommage.
- Ajoutez la fonction Liberty jndi-1.0
dans le fichier server.xml.
<featureManager>
<feature>jndi-1.0</feature>
</featureManager>
- Créez une classe ObjectFactory qui renvoie une
valeur définie à l'aide d'un programme.
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;
}
}
- Incluez l'élément ObjectFactory dans un élément
library du fichier server.xml :
<library id="objectFactoryLib">
<fileset dir="${server.config.dir}/lib" includes="factory.jar"/>
</library>
- Déclarez la fabrique dans un élément
jndiObjectFactory du fichier
server.xml et faites référence à la
bibliothèque préalablement déclarée.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"/>
You can also declare the type
of object that the factory returns. The type is returned
by the javax.naming.Context.list() method.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"
objectClassName="java.util.Properties"/>
- Déclarez l'entrée dans un élément
jndiReferenceEntry
du fichier server.xml et faites référence à la
fabrique préalablement déclarée.
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
- To declare more properties for the jndiReferenceEntry element in the server.xml file:
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory">
<properties abc="123"/>
</jndiReferenceEntry>
Ces propriétés supplémentaires sont
représentées sous la forme
javax.naming.StringRefAddr dans
l'élément javax.naming.Reference qui est transmis
à la fabrique :
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;
}
}
- Vous pouvez injecter l'objet dans une application en
utilisant une référence d'environnement de ressource de ressource :
@Resource(name="ref/entry")
private Properties properties;