從伺服器配置檔使用動態值的 JNDI 連結

在 Liberty 設定檔上,您可以從伺服器配置檔中,利用 jndiReferenceEntry 元素,將動態值的參照連結到預設「Java™ 命名和目錄介面 (JNDI)」名稱空間中。

關於這項作業

在 Liberty 中,預設的 JNDI 名稱空間可用來提供應用程式所需要之細項物件的連結。視您伺服器中啟用的特性而定,您可以將預定的一組物件連結至預設 JNDI 名稱空間。此外,您可以將參照連結至物件 Factory,來動態決定它所傳回的值。您也可以使用這個物件 Factory,將自訂物件類型傳回給應用程式。

如需 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. 將 ObjectFactory 包含在 server.xml 檔的 library 元素中:
    <library id="objectFactoryLib"> 
       <fileset dir="${server.config.dir}/lib" includes="factory.jar"/>   
    	</library>
  4. server.xml 檔的 jndiObjectFactory 元素中宣告 Factory,並參照先前宣告的程式庫。
    <jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"                      
             className="com.ibm.example.factory.MyObjectFactory"/>

    您也可以宣告 Factory 傳回的物件類型。類型是由 javax.naming.Context.list() 方法傳回。

    <jndiObjectFactory id="objectFactory" libraryRef="objectFactoryLib"                      
             className="com.ibm.example.factory.MyObjectFactory"                      
             objectClassName="java.util.Properties"/>
  5. server.xml 檔的 jndiReferenceEntry 元素中宣告項目,並參照先前宣告的 Factory。
    <jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
  6. server.xml 檔中,宣告 jndiReferenceEntry 元素的其他內容:
    <jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"> 
       <properties abc="123"/>   
    </jndiReferenceEntry>

    這些其他內容會在傳遞給 Factory 的 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;

指示主題類型的圖示 作業主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_dep_jndi_refentry
檔名:twlp_dep_jndi_refentry.html