[转]理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc...
為什么80%的碼農都做不了架構師?>>> ??
在描述JNDI,例如獲得數據源時,JNDI地址有兩種寫法,例如同是? jdbc/testDS 數據源:
A:??????? java:comp/env/jdbc/testDS
B:??????? jdbc/testDS
這兩種寫法,配置的方式也不盡相同,第一種方法應該算是一種利于程序移植或遷移的方法,它的實現與“映射”的概念相同,而B方法,則是一個硬引用。
java:comp/env 是環境命名上下文(environment naming context(ENC)),是在EJB規范1.1以后引入的,引入這個是為了解決原來JNDI查找所引起的沖突問題,也是為了提高EJB或者J2EE應用的移植性。
在J2EE中的引用常用的有:
??????? JDBC 數據源引用在java:comp/env/jdbc 子上下文中聲明
??????? JMS 連接工廠在java:comp/env/jms 子上下文中聲明
??????? JavaMail 連接工廠在java:comp/env/mail 子上下文中聲明
??????? URL 連接工廠在 java:comp/env/url子上下文中聲明
可以通過下面的結構示意來發現這兩種描述的不同之處:
A:?????? java:comp/env/jdbc/testDS(虛地址)?? ------>??? 映射描述符?? ------>??????? jdbc/testDS (實際的地址)
B:?????? jdbc/testDS (實際的地址)
從這種結構上來看,A的確是便于移植的。
再來看一個例子:
假如你需要獲取datasource,例如:dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/testDS");
那么在配置文件中進行資源映射時,在web.xml中,
????? <resource-ref>
??????? <res-ref-name>jdbc/testDS</res-ref-name>
??????? <res-type>javax.sql.DataSource</res-type>
??????? <res-auth>Container</res-auth>
????? </resource-ref>
在相應的資源配置xml中(不同的應用服務器均不同,WSAD中,可以進行可視化的設置),
??? <reference-descriptor>
????? <resource-description>
??????? <res-ref-name>jdbc/DBPool</res-ref-name>
??????? <jndi-name>OraDataSource</jndi-name>
????? </resource-description>
??? </reference-descriptor>
實際服務器中的JNDI名字是OraDataSource,邏輯名jdbc/DBPool只是用來和它作映射的,這樣做的好處是為了提高可移植性,移植的時候只需要把配置文件改一下就可以,而應用程序可不用改動。
假如你寫了一個一般的應用程序,想直接通過JNDI來獲取數據源,那么直接lookup(“mytest”)就可以了(假如服務器上的JNDI為mytest),用第一種寫法反而會報錯的。
轉載于:https://my.oschina.net/play/blog/15988
總結
以上是生活随笔為你收集整理的[转]理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下各种软件安装方法详解
- 下一篇: ASP.NETmvc常用JQUERY插件