因為:java:comp/env/是一個J2EE環境的定義,說白了就是代表當前J2EE應用的環境,比如你自己專案的Web環境或者是EJB環境。那是不是隻要是個Web專案,就能用context.lookup(“java:comp/env/XXX”)這種方式訪問JNDI服務了呢?也不是!!!
使用這樣的方式必須設定當前應用環境到資源名的對映。 在web.xml檔案中有這樣的標籤:
這些標籤就是用來建立當前應用環境到伺服器資源的對映的。
有了這樣的對映之後,就能採用context.lookup(“java:comp/env/XXX”)的方式來訪問JNDI資源了。
注意:context.lookup(“XXX”)在任何時候都是有效的,只要XXX確實是一個存在的JNDI名。
舉個例子: 用weblogic10的控制檯定義了一個oracle資料來源,這個資料來源的JNDI名稱是:adsl,那麼只要正確連線上了weblogic(當然需傳遞URL,使用者名稱和密碼還有weblogic的JNDI工廠物件,這不屬於該文的討論範圍)在任何地方都能用context.lookup(“xxx”)得到這個資料來源了,但是想透過context.lookup(“java:comp/env/jdbc/adsl”)訪問到這個資料來源,就不行了。如果想這樣寫的話需要做兩件事情:
1、確保你的呼叫程式是一個web專案或者EJB(Enterprise JavaBean)專案,並部署到weblogic上。(例子使用web專案)
2、在web專案的web.xml裡面加上如下配置:
那麼你就能在你的web程式裡透過context.lookup(“java:comp/env/jdbc/adsl”)訪問到這個資料來源了。
關於EJB的訪問也類似這樣,可以直接訪問全域性EJB的JNDI名,和可以對映之後從java:comp/env/下進行訪問。
上面的情況只適用於weblogic和J2EE 2.5的規範下。
一:如果不是J2EE 2.5的規範:那麼在你的web專案的web.xml內將根本不會存在這個標籤,那麼怎樣才能對映全域性JNDI資源到你的專案呢?
以weblogic為例,你需要在和web.xml同級的目錄下建立:weblogic.xml檔案,在該檔案裡面寫上:
然後你仍然需要在web.xml裡面配置上:
這樣你才可以在你的程式裡面透過context.lookup(“java:comp/env/jdbc/adsl”)訪問到這個資料來源。
這個是weblogic.xml的官方幫助文件:http://edocs.weblogicfans.net/wls/docs92/webapp/weblogic_xml.html
二:如果不是使用weblogic,可參見這篇文章:http://blog.csdn.net/lovingprince/article/details/6577920
其實各種不同的J2EE容器,都用不同的配置方式。 研究tomcat6之後發現,tomcat可以配置全域性JNDI和私有JNDI(注意這裡說的Tomcat6):
!!!首先想要說明的是Tomcat的配置不需要修改web.xml裡面的任何內容!!! !!!Tomcat的全域性JNDI資源不能直接訪問,必須有java:comp/env/字首!!!
全域性的JNDI配置在server.xml裡面的標籤裡面新增如下配置:
然後某一個專案想要引用這個全域性的JNDI,就需要在專案的META-INF下面建立context.xml檔案,在裡面寫上:
這樣就可以在程式裡面透過context.lookup(“java:comp/env/jdbc/test”)進行訪問了。
私有的JNDI有三種方式可以配置: 1、可以直接在server.xml裡面的節點下新增如下配置:
這樣就可以直接在程式中透過context.lookup(“java:comp/env/jdbc/test”)訪問了,需要注意的是path=”/test_tomcat6_jndi”,這個名字必須和你的專案名稱相同,而且不能少了那個斜槓,而且你的專案是透過複製資料夾到webapps下面的方式進行的部署。
2、 也可以在conf/context.xml裡面增加如下配置:
這樣就可以直接在程式中透過context.lookup(“java:comp/env/jdbc/test”)訪問了
3、還可以在專案的WebRoot下面的META-INF資料夾下面建立context.xml檔案,再在context.xml檔案裡面寫上
你可以發現的是:以上的Tomcat6中的配置不管是全域性還是區域性,都沒有修改專案的web.xml檔案,但是仍然建議在web.xml中進行引用,主要是為了專案的遷移,因為有的伺服器需要在web.xml中進行宣告!
因為:java:comp/env/是一個J2EE環境的定義,說白了就是代表當前J2EE應用的環境,比如你自己專案的Web環境或者是EJB環境。那是不是隻要是個Web專案,就能用context.lookup(“java:comp/env/XXX”)這種方式訪問JNDI服務了呢?也不是!!!
使用這樣的方式必須設定當前應用環境到資源名的對映。 在web.xml檔案中有這樣的標籤:
1234這些標籤就是用來建立當前應用環境到伺服器資源的對映的。
有了這樣的對映之後,就能採用context.lookup(“java:comp/env/XXX”)的方式來訪問JNDI資源了。
注意:context.lookup(“XXX”)在任何時候都是有效的,只要XXX確實是一個存在的JNDI名。
舉個例子: 用weblogic10的控制檯定義了一個oracle資料來源,這個資料來源的JNDI名稱是:adsl,那麼只要正確連線上了weblogic(當然需傳遞URL,使用者名稱和密碼還有weblogic的JNDI工廠物件,這不屬於該文的討論範圍)在任何地方都能用context.lookup(“xxx”)得到這個資料來源了,但是想透過context.lookup(“java:comp/env/jdbc/adsl”)訪問到這個資料來源,就不行了。如果想這樣寫的話需要做兩件事情:
1、確保你的呼叫程式是一個web專案或者EJB(Enterprise JavaBean)專案,並部署到weblogic上。(例子使用web專案)
2、在web專案的web.xml裡面加上如下配置:
12345那麼你就能在你的web程式裡透過context.lookup(“java:comp/env/jdbc/adsl”)訪問到這個資料來源了。
關於EJB的訪問也類似這樣,可以直接訪問全域性EJB的JNDI名,和可以對映之後從java:comp/env/下進行訪問。
上面的情況只適用於weblogic和J2EE 2.5的規範下。
一:如果不是J2EE 2.5的規範:那麼在你的web專案的web.xml內將根本不會存在這個標籤,那麼怎樣才能對映全域性JNDI資源到你的專案呢?
以weblogic為例,你需要在和web.xml同級的目錄下建立:weblogic.xml檔案,在該檔案裡面寫上:
123456然後你仍然需要在web.xml裡面配置上:
1234這樣你才可以在你的程式裡面透過context.lookup(“java:comp/env/jdbc/adsl”)訪問到這個資料來源。
這個是weblogic.xml的官方幫助文件:http://edocs.weblogicfans.net/wls/docs92/webapp/weblogic_xml.html
二:如果不是使用weblogic,可參見這篇文章:http://blog.csdn.net/lovingprince/article/details/6577920
其實各種不同的J2EE容器,都用不同的配置方式。 研究tomcat6之後發現,tomcat可以配置全域性JNDI和私有JNDI(注意這裡說的Tomcat6):
!!!首先想要說明的是Tomcat的配置不需要修改web.xml裡面的任何內容!!! !!!Tomcat的全域性JNDI資源不能直接訪問,必須有java:comp/env/字首!!!
全域性的JNDI配置在server.xml裡面的標籤裡面新增如下配置:
12345678910然後某一個專案想要引用這個全域性的JNDI,就需要在專案的META-INF下面建立context.xml檔案,在裡面寫上:
1234這樣就可以在程式裡面透過context.lookup(“java:comp/env/jdbc/test”)進行訪問了。
私有的JNDI有三種方式可以配置: 1、可以直接在server.xml裡面的節點下新增如下配置:
123456789101112這樣就可以直接在程式中透過context.lookup(“java:comp/env/jdbc/test”)訪問了,需要注意的是path=”/test_tomcat6_jndi”,這個名字必須和你的專案名稱相同,而且不能少了那個斜槓,而且你的專案是透過複製資料夾到webapps下面的方式進行的部署。
2、 也可以在conf/context.xml裡面增加如下配置:
12345678910這樣就可以直接在程式中透過context.lookup(“java:comp/env/jdbc/test”)訪問了
3、還可以在專案的WebRoot下面的META-INF資料夾下面建立context.xml檔案,再在context.xml檔案裡面寫上
12345678910111213這樣就可以直接在程式中透過context.lookup(“java:comp/env/jdbc/test”)訪問了
你可以發現的是:以上的Tomcat6中的配置不管是全域性還是區域性,都沒有修改專案的web.xml檔案,但是仍然建議在web.xml中進行引用,主要是為了專案的遷移,因為有的伺服器需要在web.xml中進行宣告!