回覆列表
  • 1 # 腿毛小仙子

    因為: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中進行宣告!

  • 中秋節和大豐收的關聯?
  • 月球繞地球轉,地球繞太陽轉,太陽繞銀河系轉,銀河系繞什麼轉?