对服务器配置文件中的动态值使用 JNDI 绑定
通过在 Liberty 中使用 jndiReferenceEntry 元素,可将对服务器配置文件中的动态值的引用绑定至缺省 Java™ 命名和目录接口 (JNDI) 名称空间。
关于此任务
Liberty 中提供了缺省 JNDI 名称空间,此名称空间用于提供对应用程序所需的其他对象的绑定。根据服务器中启用的功能部件,可将一组预先确定的对象绑定至缺省 JNDI 名称空间。此外,还可绑定对对象工厂的引用,这会动态确定它返回的值。还可使用此对象工厂将定制对象类型返回至应用程序。
有关 JNDI 命名的更多信息,请参阅命名。
过程
- 将 jndi-1.0 Liberty 功能部件添加到 server.xml 文件。
<featureManager> <feature>jndi-1.0</feature> </featureManager>
- 创建 ObjectFactory 类,此类返回通过程序定义的值。
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; } }
- 在 server.xml 文件的 library 元素中包含 ObjectFactory。
<library id="objectFactoryLib"> <fileset dir="${server.config.dir}/lib" includes="factory.jar"/> </library>
- 在 server.xml 文件的 jndiObjectFactory 元素中声明工厂并引用先前声明的库。
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib" className="com.ibm.example.factory.MyObjectFactory"/>
还可声明该工厂返回的对象类型。此类型由 javax.naming.Context.list() 方法返回。
<jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib" className="com.ibm.example.factory.MyObjectFactory" objectClassName="java.util.Properties"/>
- 在 server.xml 文件的 jndiReferenceEntry 元素中声明条目并引用先前声明的工厂。
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
- 对 server.xml 文件中的 jndiReferenceEntry 元素声明更多属性:
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"> <properties abc="123"/> </jndiReferenceEntry>
还有其他属性在传递至工厂的 javax.naming.Reference 上表示为 javax.naming.StringRefAddr:
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; } }
- 可使用资源环境引用将产生的对象插入至应用程序:
@Resource(name="ref/entry") private Properties properties;
父主题: 在 Liberty 中部署应用程序
相关任务:

文件名:twlp_dep_jndi_refentry.html