淺談JNDI的使用

原文: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 ServiceJ2EE容器 包括TomcatJettyWeblogicWebSphere等,提供對JNDI的支持

SPIs:基於JNDI實現的目錄服務包括DNSLDAPCORBAWindow註冊表等(有能力你也可以做)

JNDI ENVJNDI上下文,關於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);
	
%>

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服務自己根據需求去了解就可以了。


        


  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章