JavaTM 2 Platform
Standard Ed. 6

javax.naming.spi
介面 ObjectFactory

所有已知子介面:
DirObjectFactory

public interface ObjectFactory

此類別表示用於創建物件的處理器。

JNDI 框架允許通過物件處理器 動態載入物件實作。例如,當尋找綁定在名稱空間中的印表機時,如果列印服務將印表機的名稱綁定到 Reference,則可以使用該印表機 Reference 創建一個印表機物件,從而尋找的調用者可以在尋找後直接在該印表機物件上操作。

ObjectFactory 負責創建特定型別的物件。在上述範例中,可以有一個用來創建 Printer 物件的 PrinterObjectFactory。

物件處理器必須實作 ObjectFactory 介面。此外,處理器類別必須是公共的,必須有一個不接受任何參數的公共建構子。

可以使用不同的參數多次調用物件處理器的 getObjectInstance() 方法。該實作是執行緒安全的。

用於此類別文檔中的 URL 是指通過 RFC 1738 及其相關的 RFC 定義的 URL 字元串。它是符合其中所述語法的任何字元串,在 java.net.URL 類別或 Web 瀏覽器中未必總能獲得相應的支持。

從以下版本開始:
1.3
另請參見:
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), NamingManager.getURLContext(java.lang.String, java.util.Hashtable), ObjectFactoryBuilder, StateFactory

方法摘要
 Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment)
          使用指定的位置或參考資訊創建一個物件。
 

方法詳細資訊

getObjectInstance

Object getObjectInstance(Object obj,
                         Name name,
                         Context nameCtx,
                         Hashtable<?,?> environment)
                         throws Exception
使用指定的位置或參考資訊創建一個物件。

使用 environment 提供此物件的特殊需要。這種 environment 屬性的一個範例是使用者身份資訊。

NamingManager.getObjectInstance() 接連在物件處理器中載入,並在這些處理器上調用此方法,直到某一處理器產生非 null 應答。當物件處理器拋出異常時,該異常被傳遞給 NamingManager.getObjectInstance() 的調用者(並且不再搜尋可能產生非 null 應答的其他處理器)。物件處理器只有在可以確定它是唯一需要的處理器並且不應該再嘗試其他物件處理器時才拋出異常。如果此物件處理器無法使用所提供的參數創建物件,則它應該返回 null。

URL 上下文處理器 是一個特殊的 ObjectFactory,它創建用於解析 URL 或位置由 URL 指定的物件的上下文。URL 上下文處理器的 getObjectInstance() 方法將遵守以下規則。

  1. 如果 obj 為 null,則創建一個上下文,該上下文用於解析與此處理器關聯的方案的 URL。得到的上下文沒有綁定到特定 URL:它能夠使用此處理器的方案 id 處理任意 URL。例如,在 LDAP URL 上下文處理器上調用將 obj 設置為 null 的 getObjectInstance() 將返回一個可以解析 LDAP URL(比如 "ldap://ldap.wiz.com/o=wiz,c=us" 和 "ldap://ldap.umich.edu/o=umich,c=us")的上下文。
  2. 如果 obj 是一個 URL 字元串,則創建由該 URL 標識的物件(通常是一個上下文)。例如,假設這是一個 LDAP URL 上下文處理器。如果 obj 是 "ldap://ldap.wiz.com/o=wiz,c=us",則 getObjectInstance() 將返回由 LDAP 伺服器 ldap.wiz.com 上的標識名 "o=wiz, c=us" 指定的上下文。然後可以使用此上下文解析相對於該上下文的 LDAP 名稱(比如 "cn=George")。
  3. 如果 obj 是一個 URL 字元串陣列,則根據它們所參考的上下文假定這些 URL 相等。驗證這些 URL 是否相等或是否需要相等取決於上下文處理器。陣列中 URL 的順序無關緊要。由 getObjectInstance() 返回的物件類似於單個 URL 的情況下返回的物件。該物件是由 URL 指定的物件。
  4. 如果 obj 屬於其他任何型別,則 getObjectInstance() 的行為由上下文處理器實作確定。

nameenvironment 參數都歸調用者所有。該實作不會修改這些物件或保存對它們的參考,儘管它可能保存對這些物件的副本的參考。

名稱和上下文參數。     可以有選擇地使用 namenameCtx 參數來指定將創建的物件的名稱。name 是該物件相對於上下文 nameCtx 的名稱。如果有幾個可以從中指定物件的可能上下文(通常會是這種情況),則由調用者決定選擇哪一個。根據經驗,應選擇“最深的”可用上下文。如果 nameCtx 為 null,則 name 相對於預設初始上下文。如果沒有名稱將被指定,則 name 參數應該為 null。如果某一處理器使用 nameCtx,則它應該將其使用與共時存取同步,因為無法保證上下文實作是執行緒安全的。

參數:
obj - 套件含可在創建物件時使用的位置或參考資訊的物件(可能為 null)。
name - 此物件相對於 nameCtx 的名稱,如果沒有指定名稱,則該參數為 null。
nameCtx - 一個上下文,name 參數是相對於該上下文指定的,如果 name 相對於預設初始上下文,則該參數為 null。
environment - 創建物件時使用的環境(可能為 null)。
返回:
已創建的物件;如果無法創建物件,則返回 null。
拋出:
Exception - 如果此物件處理器在試圖創建物件時遇到異常,並且不再嘗試其他物件處理器。
另請參見:
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), NamingManager.getURLContext(java.lang.String, java.util.Hashtable)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only