Informationen zu diesem Vorgang
Der JNDI-Standardnamespace ist in Liberty verfügbar und stellt Bindungen für verschiedene Objekte bereit, die von Anwendungen benötigt werden. Je nachdem, welche Features in Ihrem Server aktiviert sind, können Sie einen vordefinierten Satz von Objekten an den JNDI-Standardnamespace binden. Sie können außerdem eine Referenz an eine Objektfactory binden, die den Wert, den sie zurückgibt, dynamisch ermittelt. Sie können auch diese Objektfactory verwenden, um einer Anwendung angepasste Objekttypen zurückzugeben.
Weitere Informationen zur JNDI-Benennung finden Sie unter Benennung.
- Fügen Sie das Liberty-Feature jndi-1.0 der Datei server.xml hinzu.
<featureManager>
<feature>jndi-1.0</feature>
</featureManager>
- Erstellen Sie eine Klasse ObjectFactory, die einen über das Programm definierten Wert zurückgibt.
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;
}
}
- Geben Sie die Klasse ObjectFactory in einem library-Element in der Datei server.xml an:
<library id="objectFactoryLib">
<fileset dir="${server.config.dir}/lib" includes="factory.jar"/>
</library>
- Deklarieren Sie die Factory in einem jndiObjectFactory-Element in der Datei server.xml und referenzieren Sie die zuvor deklarierte Bibliothek.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"/>
Sie können auch den Objekttyp deklarieren, den die Factory zurückgibt. Der Typ wird von Methode javax.naming.Context.list() zurückgegeben.
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"
className="com.ibm.example.factory.MyObjectFactory"
objectClassName="java.util.Properties"/>
- Deklarieren Sie den Eintrag in einem jndiReferenceEntry-Element in der Datei server.xml und referenzieren Sie die zuvor deklarierte Factory.
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
- Gehen Sie wie folgt vor, um weitere Eigenschaften für das jndiReferenceEntry-Element in der Datei server.xml zu deklarieren:
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory">
<properties abc="123"/>
</jndiReferenceEntry>
Diese zusätzlichen Eigenschaften werden als javax.naming.StringRefAddr in der
an die Factory übergebenen javax.naming.Reference dargestellt:
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;
}
}
- Sie können das resultierende Objekt in eine Anwendung einfügen, indem Sie eine Ressourcenumgebungsreferenzsreferenz verwenden:
@Resource(name="ref/entry")
private Properties properties;