Hibernate鏈接Server中的JNDI數據源(MYSQL)

Tomcat中數據源的配置及原理 html

 

一:數據源介紹 數據源簡介 java

JDBC2.0提供了javax.sql.DataSource的接口,負責與數據庫創建鏈接,實際應用時不須要編寫鏈接數據庫代碼,能夠直接從數據源得到數據庫的鏈接,使得應用於數據庫的耦合下降。Dataource中事先創建了多個數據庫鏈接,這些數據庫鏈接保持在數據庫鏈接池中,當程序訪問數據庫時,只須要從鏈接池從取出空閒的鏈接,訪問數據庫結束,在將這些鏈接歸還給鏈接池。DataSource對象由容器(Tomcat)提供,不能使用建立實例的方法來生成DataSource對象,要採用JAVAJNDIJava Nameing and Directory Interfacejava命名和目錄接口)來得到DataSource對象的引用。(另有一種說法:「其實從技術上來講,數據源鏈接方式是不須要目錄服務的,咱們一樣能夠經過序列化數據源對象直接訪問文件系統。這點是須要明確的。」感興趣的朋友能夠試試。)JNDI是一種將對象和名字綁定的技術,對象工廠負責生產出對象,這些對象都和惟一的名字相綁定。程序中能夠經過這個名字來得到對象的引用。TomcatDataSource做爲一種可配置的JNDI資源來處理,生成DataSource對象的工廠爲rg.apache.comm.ons.dbcp.BasicDataSourceFactory mysql

二:配置數據源 web

配置數據源其實至關簡單,能夠配置單個應用的數據源,也能夠配置整個容器的數據源。如下詳細說明如何配置單個應用的數據源。 1.準備工做 sql

  • Tomcat 4.1.24 (其它版本也能夠,原理相通的)
  •   確認在%Tomcat _Home%\common\lib下有commons-collections.jarcommons-dbcp.jarcommons-pool.jar包(tomcat默認有這些包),若是沒現有,請到此地下載:http://tomcat.apache.org/ 。這三個包是必需的。
  • 下載相應數據庫驅動,放在%Tomcat _Home%\common\lib下。本例以oracle數據庫爲例,使用的驅動包爲:jdbc14.jar
  •   數據庫爲Oracle9i
  • 確認在%Tomcat _Home%\common\lib下有jndi.jardbc2_0-stdext.jartomcat默認有這些包)。
  •  

2.配置單個應用的數據源 數據庫

21配置server.xml文件 apache

首先打開%Tomcat _Home%\conf server.xml文件,在相應的<Context>中加入<Resource>元素,在<Context>(你的應用配置上下文)中加入如下代碼(以MySql爲例): tomcat

 

 


<Context path="/test" docBase="E:\JAVA\mytest\webapp" >
服務器

    <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/> oracle

    <ResourceParams name="jdbc/test">

       <parameter>

           <name>username</name>

           <value>root</value>

       </parameter>

       <parameter>

           <name>password</name>

           <value></value>

       </parameter>

       <parameter>

           <name>driverClassName</name>

           <value>com.mysql.jdbc.Driver</value>

       </parameter>

       <parameter>

           <name>url</name>

           <value>jdbc:mysql://localhost/dlog</value>

       </parameter>

    </ResourceParams>

</Context>


22< Resource >配置說明以下:

 

屬性

描述

name

指定ResourceJNDI的名字

auth

指定管理ResourceManager,由兩個可選值:ContainerApplicationContainer表示由容器來建立和管理ResourceApplication表示由WEB應用來建立和管理Resource。若是在web application deployment descriptor中使用<resource-ref>,這個屬性是必需的,若是使用<resource-env-ref>,這個屬性是可選的。

type

指定Resource所屬的java類名

 

2.3<ResourceParams>元素的屬性以下:

 

屬性

描述

name

指定ResourceParamsJNDI的名字,必須和Resourcename保持一致

factory

指定生成DataSource對象的factory的類名

maxActive

指定數據庫鏈接池中處於活動狀態的數據庫鏈接最大數目,0表示不受限制

maxldle

指定數據庫鏈接池中處於空閒狀態的數據庫鏈接的最大數目,0表示不受限制

maxwait

指定數據庫鏈接池中的數據庫鏈接處於空閒狀態的最長時間(單位爲毫秒),超過這一事件,將會拋出異常。-1表示能夠無限期等待。

username

指定鏈接數據庫的用戶名

password

指定鏈接數據庫的密碼

driverClassName

指定鏈接數據庫的JDBC驅動程序

url

指定鏈接數據庫的URL

 

23引用數據源

 

 若是在web應用中訪問了由Servlet容器管理的某個JNDI Resource,則必須在web.xml中聲明對這個JNDI Resource的引用。表示資源引用的元素爲<resource-ref>,該元素加在<wepapp></ wepapp >中。

 打開你的應用配置文件web.xml,輸入如下粗體部分:

 

 <wepapp> ……

<resource-ref>

       <description>connectDB test</description>

       <res-ref-name>jdbc/test</res-ref-name>

       <res-type>javax.sql.DataSource</res-type>

       <res-auth>Container</res-auth>

    </resource-ref>

</ wepapp >

 

 

 

24<resource-ref>元素的屬性以下:

 

 

屬性

描述

description

對所引用的資源的說明

res-ref-name

指定所引用資源的JNDI名字,與<Resource>元素中的name屬性保持一致

res-type

指定所引用資源的類名字,與<Resource>元素中的type屬性保持一致

res-auth

指定所引用資源的Manager,與<Resource>元素中的auth屬性保持一致

 

 

 

25測試數據源    

 首先,檢查Tomcat%Tomcat _Home%\common\lib下有commons-collections.jarcommons-dbcp.jarcommons-pool.jar包,若是沒現有,請到此地下載:http://tomcat.apache.org/     

 注意以上三個包不要引入你的工程類路徑,不然可能報錯。    

  而後,將驅動包放入%Tomcat _Home%\common\lib下,注意包必須爲.jar後綴。Tomcat只認.jar包。 配置完成後,寫個測試,以下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W 3C //DTD 
HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource db = (DataSource)envContext.lookup("jdbc/myoracle ");

//javablogorl
<Resource>元素中name屬性的值
Connection conn = db.getConnection( );
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while(rs.next()){
out.print(rs.getString("admin_name")+" ");
out.print(rs.getString("admin_password")+"<br>");
}
rs.close();
stmt.close();
conn.close();

%>
</body>
</html>

若是輸出你指望的結果,表示數據源配置成功。

 

 

3.配置容器全局數據源

 

   以上,配置的數據源爲單個應用使用的數據源,只能爲單個應用所使用,下面咱們配置全局的數據源,全部的應用均可以使用,經過引用很天然的使用全局數據源。準備工做同上。

 

3.1 配置server.xml文件

首先打開%Tomcat _Home%\conf server.xml文件,在<GlobalNamingResources>下輸入如下粗體部分:

 

<GlobalNamingResources> ……

 

    <Context path="/test" docBase="E:\JAVA\mytest\webapp" >

    <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/>

    <ResourceParams name="jdbc/test">

       <parameter>

           <name>username</name>

           <value>root</value>

       </parameter>

       <parameter>

           <name>password</name>

           <value></value>

       </parameter>

       <parameter>

           <name>driverClassName</name>

           <value>com.mysql.jdbc.Driver</value>

       </parameter>

       <parameter>

           <name>url</name>

           <value>jdbc:mysql://localhost/dlog</value>

           </parameter>

        </ResourceParams>

</Context>

</GlobalNamingResources>

 

3.2 引用數據源

因爲咱們配置的是容器全局數據源,所以全部的應用均可以引用這個數據源。在你的應用中創建引用,在<Context></Context>之間輸入如下粗體部分:

<Context path="/test" docBase="E:\JAVA\mytest\webapp" >

<ResourceLink name="myDB" global="jdbc/test type="javax.sql.DataSource"/>

</Context>

 

33 配置應用文件web.xml

打開你的應用配置文件web.xml,輸入如下粗體部分:

 

<wepapp> ……

<resource-ref>

       <description>connectDB test</description>

       <res-ref-name>jdbc/test</res-ref-name>

       <res-type>javax.sql.DataSource</res-type>

       <res-auth>Container</res-auth>

    </resource-ref>

</ wepapp >

 

 

 

 

 

 

 

 34測試  

建立測試文件:

 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W 3C //DTD 
HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource db = (DataSource)envContext.lookup("myDB ");//
名稱與web.xml配置中的一致

//javablogorl
<Resource>元素中name屬性的值
Connection conn = db.getConnection( );
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while(rs.next()){
out.print(rs.getString("admin_name")+" ");
out.print(rs.getString("admin_password")+"<br>");
}
rs.close();
stmt.close();
conn.close();

%>
</body>
</html>

若是輸出你指望的結果,表示數據源配置成功。

 

 

 

Hibernate.cfg.xml文件中 刪除全部鏈接數據庫的配置參數

添加 connection.datasource屬性

<property name="connection.datasource">java:/comp/env/jdbc/test</property>

其中jdbc/test爲數據源在應用服務器中的JNDI


原文連接: http://www.dlog.cn/nicholascoder/diary/6532
相關文章
相關標籤/搜索