JNDI簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
一、JNDI是什么?
JNDI--Java 命名和目錄接口(Java Naming and Directory Interface),是一組在Java應(yīng)用中訪問(wèn)命名和目錄服務(wù)的API。
二、JNDI好處
解耦:通過(guò)注冊(cè)、查找JNDI服務(wù),可以直接使用服務(wù),而無(wú)需關(guān)心服務(wù)提供者,這樣程序不至于與訪問(wèn)的資源耦合!
JNDI優(yōu)點(diǎn)
包含了大量的命名和目錄服務(wù),使用通用接口來(lái)訪問(wèn)不同種類的服務(wù);
可以同時(shí)連接到多個(gè)命名或目錄服務(wù)上;
建立起邏輯關(guān)聯(lián),允許把名稱同Java對(duì)象或資源關(guān)聯(lián)起來(lái),而不必知道對(duì)象或資源的物理ID。
JNDI程序包:
javax.naming:命名操作;
javax.naming.directory:目錄操作;
javax.naming.event:在命名目錄服務(wù)器中請(qǐng)求事件通知;
javax.naming.ldap:提供LDAP支持;
javax.naming.spi:允許動(dòng)態(tài)插入不同實(shí)現(xiàn)。
利用JNDI的命名與服務(wù)功能來(lái)滿足企業(yè)級(jí)APIs對(duì)命名與服務(wù)的訪問(wèn),諸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通過(guò)JNDI來(lái)使用CORBA的命名服務(wù)。
三、JNDI架構(gòu)與原理
相比較架構(gòu)與原理,更關(guān)注與使用,故略!
四、JNDI使用
在J2EE容器(如weblogic、websphere、jboss等)中使用:
在weblogic環(huán)境下查找tuxedo 連接
//在weblogic環(huán)境查找tuxedo連接 Context ctx = new InitialContext(); TuxedoConnectionFactory tuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
在web容器查找數(shù)據(jù)源
Context ctx=new InitialContext(); DataSource ds=(Datasource)ctx.lookup("java:comp/env/jdbc/mydatasource");
重點(diǎn)關(guān)注Context ctx = new InitialContext(),上面的代碼在容器下能夠很好的工作,尤其是查找數(shù)據(jù)源的代碼,無(wú)論是在tomcat,還是在weblogic、jboss,但如果脫離了容器,我們將得到異?!癗oInitialContextException”,這是為什么呢?
原因很簡(jiǎn)單,就是不存在相關(guān)的context,其本質(zhì)是JNDI的服務(wù)提供者環(huán)境,即誰(shuí)將提供此環(huán)境!
為了能夠使上面的代碼工作,我們需要使用帶參的構(gòu)造子InitialContext(Hashtable),指定JNDI服務(wù)提供者環(huán)境信息,以weblogic環(huán)境為例:
Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); env.put(Context.PROVIDER_URL,"t3://localhost:7001"); InitialContext ctx = new InitialContext(env);
但上面的代碼不適合WebSphere、jboss等環(huán)境,原因在于所需環(huán)境信息不同,那么,Context ctx = new InitialContext()是如何做到在各個(gè)j2ee容器下有效地呢?原因在于這個(gè)默認(rèn)的構(gòu)造子是從System.properties讀取相關(guān)的環(huán)境信息的,由此不難猜出在各種J2EE容器下,如weblogic、jboss,它們都自己為自己設(shè)置了相應(yīng)的信息!下面是一個(gè)關(guān)于System.properties設(shè)置JNDI服務(wù)環(huán)境的例子:
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); System.setProperty(Context.PROVIDER_URL, "t3://localhost:7001"); InitialContext ctx = new InitialContext();
五、借助Spring完成JNDI查找
對(duì)于手頭的weblogic,給出常用的兩個(gè)查找例子,做個(gè)備忘吧!
查找tuxedo connnection:
<bean id="tuxedoConnFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>tuxedo/services/TuxedoConnection</value> </property> <property name="resourceRef"> <value>false</value> </property> <property name="jndiEnvironment"> <props> <!-- The value of ContextPROVIDER_URL --> <prop key="java.naming.provider.url">t3://localhost:7001</prop> <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop> </props> </property> </bean>
查找DataSource:
<bean id="tuxedoConnFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/myDatasource</value> </property> </bean>
相關(guān)文章
Java基于socket實(shí)現(xiàn)的客戶端和服務(wù)端通信功能完整實(shí)例
這篇文章主要介紹了Java基于socket實(shí)現(xiàn)的客戶端和服務(wù)端通信功能,結(jié)合完整實(shí)例形式分析了Java使用socket建立客戶端與服務(wù)器端連接與通信功能,需要的朋友可以參考下2018-05-05IDEA創(chuàng)建方法時(shí)如何快速添加注釋
這篇文章主要介紹了IDEA創(chuàng)建方法時(shí)如何快速添加注釋問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02從零構(gòu)建可視化jar包部署平臺(tái)JarManage教程
這篇文章主要為大家介紹了從零構(gòu)建可視化jar包部署平臺(tái)JarManage教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05idea perttier的使用和縮進(jìn)改為4不成功問(wèn)題及解決
這篇文章主要介紹了idea perttier的使用和縮進(jìn)改為4不成功問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Mybatis Plus 字段為空值時(shí)執(zhí)行更新方法未更新解決方案
這篇文章主要介紹了Mybatis Plus 字段為空值時(shí)執(zhí)行更新方法未更新解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09java前后端加密解密crypto-js的實(shí)現(xiàn)
這篇文章主要介紹了java前后端加密解密crypto-js的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)
這篇文章主要給大家介紹了關(guān)于MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05