淺談JNDI的使用
關於什麼是JNDI的概念這裡不做解釋,本文作為初學者根據所瞭解到內容做些總結,主要內容如下:
1、JNDI使用描述
2、Tomcat中DataSource的配置和使用
3、Weblogic中JNDI的配置和使用
4、訪問分散式JNDI的條件
1、JNDI使用描述
圖1-1
根據圖1-1進行一下描述:
JNDI Service:J2EE容器 包括Tomcat、Jetty、Weblogic、WebSphere等,提供對JNDI的支援
SPIs:基於JNDI實現的目錄服務包括DNS、LDAP、CORBA、Window登錄檔等(有能力你也可以做)
JNDI ENV:JNDI上下文,關於JNDI服務的環境引數在本地訪問和分散式訪問時我們的程式在初始化JNDI上下文時回有所不同(稍後介紹)
Application:我們的應用程式打算使用JNDI提供的服務
在我們的應用程式中會經常使用到JNDI提供的資源(廢話),比如說使用DataSource進行資料庫操作,訪問Window登錄檔,使用NDS服務等,我們可以通過服務提供的支援方便的在伺服器上進行這些服務的配置,我們的應用程式就可以方便的使用這些服務了。使用JNDI服務很簡單,1、得到JNDI上下文;2、在上寫文中更加名字尋找要使用的物件或資源。
Context ctx= new InitialContext();
ctx.lookup("resName");
注意:上述程式碼一定是在本地環境下使用(也就是你的應用跑在和配置的JNDI在同一個伺服器上),這樣你就可以再你的程式碼中直接使用得到的物件或資源了,接下來就看一下我們如何在Tomcat下使用通過JNDI配置提供的DataSource。
2、Tomcat中的DataSource配置和使用(Tomcat7)
1)在Tomcat的conf目錄下找到context.xml新增如下配置
2)在專案的WEB-INF目錄下的web.xml中宣告伺服器對其的配置<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="123456" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" />
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3)程式中使用我們配置的DataSource(這裡簡單起見我你們在Jsp中演示)
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.sql.DataSource"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/test");
out.print(ds);
%>
3‘)顯示結果(Tomcat基於dbcp提供DataSource實現)
注意:1、這裡對上下文環境並沒有進行配置,因為相對於你的程式而言Tomcat環境就是你的本地環境,說以他會自動找到JNDI上下文中幫頂的資源;2:、我們配置的資源嗎為"java:/comp/env/"名稱空間的這個在不同的可能是不同的。
3、Weblogic中JNDI資源的配置(這裡以資料來源配置為例)
1)基本配置
Weblogic的配置就比較簡單了,這裡就不在浪費流量,注意在配置完資料來源時一定要把它應用到你的Server上才能測試成功;
我們配置的資源名為”test/db“; 2)本地訪問Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("test/db");
out.print(ds);
2‘)顯示結果(這是weblogic自己實現的DataSource)
3)通過客戶端遠端訪問
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7003");
Context ctx = new InitialContext(env);
DataSource ds = (DataSource) ctx.lookup("test/db");
System.out.println(ds);
3’)Console輸出
ClusterableRemoteRef(-645461901847124827S:127.0.0.1:[7003,7003,-1,-1,-1,-1,-1]:base_domain:AdminServer [-645461901847124827S:127.0.0.1:[7003,7003,-1,-1,-1,-1,-1]:base_domain:AdminServer/287])/287
4、分散式訪問JNDI的資源 這個也相對比較簡單就是和3中Weblogic中客戶端遠端訪問一樣,要指定JNDI資源所在的位置和上下文產生的工場:1、Context.INITIAL_CONTEXT_FACTORY這個引數指定上下文產生的工場類,這個是不同容器不同配置的,根據所選容器文件來就可以了;2、Context.PROVIDER_URL通過此引數指定JNDI資源的位置。當然JNDI上下文的配置和操作遠不止這些,對上述有些大致瞭解相信會有一定幫助。 總結:這裡只是簡單的描述了一下JNDI通過Tomcat和Weblogic的資料原配進行一個大致的瞭解,對於不同的容器和不同的JNDI服務自己根據需求去了解就可以了。