JNDI之旅--各應用伺服器JNDI初始配置
使用Java EE應用伺服器開發應用程式時,不管是在Web應用還是簡單的Java Main中,當需要使用JDBC DataSource、JMS連線工廠、EJB的Home介面時,均需要通過應用伺服器提供的JNDI服務,從JNDI Context中獲取相應的物件。而且在獲取初始的JNDI Context時,不同的應用伺服器需要指定不同的屬性傳給InitialContext才能使用特定應用伺服器的JNDI服務。本系列文章旨在透析為什麼需要這些設定,一步一步解開JNDI的稍微神祕的面紗......,本文是"JNDI之旅"系列的第一篇
首先給出一個非常常見的程式碼Demo,以下典型的JNDI程式碼先是初始化一個InitialContext,然後從該Context中獲得EJB的Home介面,從而便可進行EJB的呼叫。
當然,以上的方式僅限於在Web應用中訪問本伺服器例項的JNDI服務時可以這樣簡單的獲得JNDI Context,當客戶端程式是一個需要訪問遠端JNDI服務的Web應用或者是一個Java Main的時候,通常需要指定JNDI初始化工廠類、JNDI服務所在的主機、JNDI服務所在主機的相應埠等這些比較標準的資訊。當需要實現叢集功能的話,還可以根據各個應用伺服器廠商的特性,指定多個JNDI服務節點(實際就是多個伺服器例項或者說是多臺機器)資訊,比如Glassfish在JNDI叢集時需要指定com.sun.appserv.iiop.endpoints屬性,用逗號分隔多個url。
各個應用伺服器在使用JNDI服務的步驟上基本分為以下幾步:
1,new一個Properties,properties是為了儲存JNDI服務所需的屬性
2,往properties中新增java.naming.factory.initial,這一步通常各個廠商都不一樣
3,往properties中新增JNDI服務的主機和埠資訊,這一步幾乎每個廠商都支援設定"java.naming.provider.url"或者是"org.omg.CORBA.ORBInitialHost/org.omg.CORBA.ORBInitialPort"配置,其次就是各個廠商私有的指定主機和埠的方式了
4,有的應用伺服器可能還需要設定java.naming.security.principal和java.naming.security.credentials屬性指定使用者和密碼
5,最後把以上properties物件傳遞給InitialContext的建構函式便可完成JNDI Context的初始化,繼而做lookup的動作
以下列舉各個伺服器的JNDI設定,其中特別要注意的是java.naming.factory.initial一定要根據不同的應用伺服器做不同的配置
Glassfish
JBoss
Weblogic
Websphere
Geronimo
綜上,各個伺服器基本都實現了自己的JNDI工廠類,在設定主機和埠時基本都支援標準的java.naming.provider.url屬性。在後續的文章中,會有如果實現自己的JNDI工廠類的相關講解,敬請期待~!