JDNI---數據來源(Data Source)

          Posted on 2006-06-28 09:48 多力宇揚 閱讀(550) 評論(0)  編輯  收藏 所屬分類: View tier
          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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 东海县| 泾川县| 宜昌市| 台东市| 兴仁县| 东阳市| 五华县| 房产| 芦溪县| 民县| 梅河口市| 名山县| 扶绥县| 安仁县| 微山县| 商水县| 公主岭市| 桓仁| 贵溪市| 大埔区| 德钦县| 新乡县| 遂昌县| 绵阳市| 吕梁市| 高要市| 河北区| 南平市| 丹寨县| 逊克县| 方正县| 东乌珠穆沁旗| 涞源县| 襄垣县| 无锡市| 五大连池市| 玛曲县| 四会市| 新田县| 徐汇区| 康平县|