[8.5.5.4 或更高版本]

对服务器配置文件中的动态值使用 JNDI 绑定

通过在 Liberty 概要文件上使用 jndiReferenceEntry 元素,可将对服务器配置文件中的动态值的引用绑定至缺省 Java™ 命名和目录接口 (JNDI) 名称空间。

关于此任务

Liberty 概要文件中提供了缺省 JNDI 名称空间,此名称空间用于提供对应用程序所需的其他对象的绑定。根据服务器中启用的功能部件,可将一组预先确定的对象绑定至缺省 JNDI 名称空间。此外,还可绑定对对象工厂的引用,这会动态确定它返回的值。还可使用此对象工厂将定制对象类型返回至应用程序。

有关 JNDI 命名的更多信息,请参阅命名

过程

  1. jndi-1.0 Liberty 功能部件添加至 server.xml 文件。
    <featureManager>
       <feature>jndi-1.0</feature>
    </featureManager>
  2. 创建 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; 
      }
    }    
  3. server.xml 文件的 library 元素中包含 ObjectFactory。
    <library id="objectFactoryLib"> 
       <fileset dir="${server.config.dir}/lib" includes="factory.jar"/>   
    </library>
  4. 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"/>
  5. server.xml 文件的 jndiReferenceEntry 元素中声明条目并引用先前声明的工厂。
    <jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
  6. 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; 
      }   
    }
  7. 可使用资源环境引用将产生的对象插入至应用程序:
    @Resource(name="ref/entry")
    private Properties properties;

用于指示主题类型的图标 任务主题

信息中心的条款和条件 | 反馈


时间戳记图标 最近一次更新时间: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_dep_jndi_refentry
文件名:twlp_dep_jndi_refentry.html