從伺服器配置檔使用動態值的 JNDI 連結
在 Liberty 中,您可以從伺服器配置檔中,利用 jndiReferenceEntry 元素,將動態值的參照連結到預設「Java™ 命名和目錄介面 (JNDI)」名稱空間中。
關於這項作業
在 Liberty 中,預設的 JNDI 名稱空間可用來提供應用程式所需要之細項物件的連結。視您伺服器中啟用的特性而定,您可以將預定的一組物件連結至預設 JNDI 名稱空間。此外,您可以將參照連結至物件 Factory,來動態決定它所傳回的值。您也可以使用這個物件 Factory,將自訂物件類型傳回給應用程式。
如需 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; } }
- 將 ObjectFactory 包含在 server.xml 檔的 library 元素中:
<library id="objectFactoryLib"> <fileset dir="${server.config.dir}/lib" includes="factory.jar"/> </library>
- 在 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"/>
- 在 server.xml 檔的 jndiReferenceEntry 元素中宣告項目,並參照先前宣告的 Factory。
<jndiReferenceEntry id="refEntry" jndiName="ref/entry" factoryRef="objectFactory"/>
- 在 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; } }
- 您可以使用資源環境參照,將產生的物件注入至應用程式:
@Resource(name="ref/entry") private Properties properties;
上層主題: 將應用程式部署在 Liberty 中
相關工作:

檔名:twlp_dep_jndi_refentry.html