原文:http://www.weicoop.com/web/article/52.html
關於什麼是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添加如下配置
<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"
/>
2)在項目的WEB-INF目錄下的web.xml中聲明服務器對其的配置
<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);
%>
注意:1、這裏對上下文環境並沒有進行配置,因爲相對於你的程序而言Tomcat環境就是你的本地環境,說以他會自動找到JNDI上下文中幫頂的資源;2:、我們配置的資源嗎爲"java:/comp/env/"命名空間的這個在不同的可能是不同的。
3、Weblogic中JNDI資源的配置(這裏以數據源配置爲例)
1)基本配置
Weblogic的配置就比較簡單了,這裏就不在浪費流量,注意在配置完數據源時一定要把它應用到你的Server上才能測試成功;
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("test/db");
out.print(ds);
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