Tomcat下JNDI的配置
??? JNDI全名為Java Naming and Directory Interface.JNDI主要提供應用程序所需要資源上命名與目錄服務.在Java EE環境中,JNDI扮演了一個很重要的角色,
它提供了一個接口讓用戶在不知道資源所在位置的情形下,取得該資源服務.
??? 就好比網絡磁盤驅動器的功能一樣。如果有人事先將另一臺機器上的磁盤驅動器接到用戶的機器上,用戶在使用的時候根本就分辨不出現在的驅動器是存在本端,
還是在另一端的機器上,用戶只需取得資源來用,根本就不知道資源在什么地方。
??? JNDI這個接口基本上是LDAP,LDAP全名為Lightweight Directory Access Protocol.
?? ?
??? 要設定JNDI的JDBC數據源和DBCP連接池需要做以下的工作:(for example Oracle DataBase)
??? 一. 安裝JDBC Driver
??? 將你DB的JDBC Driver部署到{Tomcat_Install]\common\lib目錄下。
??? 二. 設定Tomcat下的server.xml
??? 修改{Tomcat_Install|\conf\server.xml文件中你的站臺標簽里的<Host></Host>之間的內容.如下:
??? server.xml
???? <Host>
??????? <Context path="/Develop" docBase="Develop" debug="0" reloadable="true"?????????????? crossContext="true">
??????? <Resource name="jdbc/dy" auth="Container" type="javax.sql.DataSource"/>
??????????? <ResourceParams name="jdbc/dy">
?????????????? <parameter>
????????????????? <name>factory</name>
????????????????? <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
?????????????? </parameter>
?????????????? <parameter>
????????????????? <name>driverClassName</name>
????????????????? <value>oracle.jdbc.driver.OracleDriver</value>
?????????????? </parameter>
?????????????? <parameter>
????????????????? <name>url</name>
????????????????? <value>jdbc:oracle:thin:@yang:1521:orcl</value>
?????????????? </parameter>????????????? ?
?????????????? <parameter>
????????????????? <name>username</name>
????????????????? <value>scott</value>
?????????????? </parameter>
?????????????? <parameter>
????????????????? <name>password</name>
????????????????? <value>ss</value>
?????????????? </parameter>
?????????????? <parameter>
????????????????? <name>maxActive</name>
????????????????? <value>20</value>
?????????????? </parameter>
?????????????? <parameter>
????????????????? <name>maxIdle</name>
????????????????? <value>10</value>
?????????????? </parameter>
?????????????? <parameter>
????????????????? <name>maxWait</name>
????????????????? <value>-1</value>
?????????????? </parameter>? ????????????????????????????????????????????????????????????? ?
??????????? </ResourceParams>
??????? </Context>
????? </Host>
? 上述社定所表示的意思是在Develop站臺中,定義一個JDBC數據來源,名稱為jdbc/dy.
? 通過以下的代碼來設置的這個jdbc/dy的數據來源和DBCP連接池:
? <parameter>
???? <name>factory</name>
???? <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
? </parameter>
? 設定使用DBCP連接池,這是有Jakarta Project組織所制定的連接池程序,它一樣是OpenSource的.
參數說明:
???? <Context></Context>用于設置你的站臺.
???? <Context>標簽中的path="/Develop"代表網站名稱,即: http://IP_DomaninName/Develop; docBase="Develop"代表站臺的目錄位置,debug則是設定debug level
???? ,0表示提供最少的信息,9表示提供最都多的信息;reloadable則表示Tomcat執行時,當class,web.xml被更新時,都會自動重新加載,不需要重新啟動Tomcat;
???? maxActive表示連接池的最大數據庫連接數;設為0表示無限制;maxIdle表示設定連接池中最小能有幾個Connection,若為0表示不限制;maxWait 最大建立連接等待時間。
??? 如果超過此時間將接到異常,設為-1表示無限制,單位為ms;driverClassName JDBC驅動程序;url表示數據庫連接字符串.
?三. 設定應用站臺中的web.xml
?eg:設定Develop的web.xml如下:
? <resource-ref>
???? <description>JNDI JDBC DataSource of Develop</description>?? //一個描述
???? <res-ref-name>jdbc/dy</res-ref-name>??????????????????????? //這里必須為你之前指定的<ResourceParams name="jdbc/dy">
???? <res-type>javax.sql.DataSource</res-type>
???? <res-auth>Container</res-auth>
? </resource-ref>
?四. 使用JDBC數據來源獲得Connection對象
?? Context initContext=new InitialContext();
?? Context envContext=(Context)initContext.lookup("java:/comp/env");
?? 或者
?? Context envContext=(Context)initContext.lookup("java:comp/env");
?? DataSourceds conn=(DataSource)envContext.lookup("jdbc/dy");
?? conn=ds.getConnection();
按照這四個步驟做下來后,那么你就可以寫個Test Page來測試一下了.
Test Page1:
_________________________________________________________________________________________________________
testpool.jsp
<!--測試JNID數據源的配置-->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
? DataSource ds=null;
? try
? {
????? Context initCtx=new InitialContext();
????? Context envCtx=(Context)initCtx.lookup("java:comp/env");
????? //從Context中loopup 數據源
????? ds=(DataSource)envCtx.lookup("jdbc/dy");
????? if(ds!=null)
????? {
??????? out.println("已經獲得DataSource!");
??????? out.println("<br>");
??????? Connection conn=ds.getConnection();
??????? Statement stmt=conn.createStatement();
??????? ResultSet rst=stmt.executeQuery("select * from emp");
??????? out.println("以下是從數據庫里讀出來的數據");
??????? out.println("<hr>");
??????? while(rst.next())
??????? {
????????? out.println("empName:"+rst.getString("ename"));
????????? out.println("<br>");
??????? }
????? }
??? else
?? ??? ?out.println("連接失敗");
? }
? catch(Exception e)
? {
????? out.println(e);
? }
%>
如果成功那么輸出結果:
========================================
已經獲得DataSource!
以下是從數據庫里讀出來的數據:
empName:SMITH
empName:ALLEN
empName:WARD
empName:JONES
empName:MARTIN
empName:BLAKE
empName:CLARK
empName:SCOTT
empName:KING
empName:TURNER
empName:ADAMS
empName:JAMES
empName:FORD
empName:MILLER
empName:feiyang
empName:yang
empName:feifei
empName:fei