jndi配置屬性的含義

來源:互聯網
上載者:User

有關tomcat配置jndi的一些簡單介紹:

先說流程:(根據tomcat有關jndi的文檔,這個文檔應該是針對單個項目配置,下面有比較好的可以配置全域使用的例子)

1.先安裝jdbc驅動,這一步很簡單,只需將對應資料庫驅動放到tomcat對應common/lib目錄下就行了;

2.修改對應項目的WEB-INF/web.xml檔案,用來聲明你的jndi名字以供你的項目使用:

在你的web.xml檔案中加入如下代碼:

<resource-ref></resource-ref>  <description></description>
<resource-ref>  <description>    Resource reference to a factory for java.sql.Connection    instances that may be used for talking to a particular    database that is configured in the server.xml file.  </description>  <res-ref-name>    jdbc/EmployeeDB  </res-ref-name>  <res-type>    javax.sql.DataSource  </res-type>  <res-auth>    Container  </res-auth></resource-ref>

3.對應java代碼中獲得串連方法:(代碼摘要)

Context initCtx = new InitialContext();Context envCtx = (Context) initCtx.lookup("java:comp/env");DataSource ds = (DataSource)  envCtx.lookup("jdbc/EmployeeDB");Connection conn = ds.getConnection();... use this connection to access the database ...conn.close();

4.配置你的tomcat資源工廠:

在WEB-INF目錄下建立檔案context.xml,內容如下:

<context></context>
<Context ...>  ...  <Resource name="jdbc/EmployeeDB" auth="Container"            type="javax.sql.DataSource" username="dbusername" password="dbpassword"            driverClassName="org.hsql.jdbcDriver" url="jdbc:HypersonicSQL:database"            maxActive="8" maxIdle="4"/>  ...</Context>
以下摘自tomcat關於jndi的官方文檔:
所有安裝tomcat的可以在tomcat目錄下找到對應文章,路徑如下:
D:/apache-tomcat-5.5.25/webapps/tomcat-docs/jndi-resources-howto.html
紅字標出的是tomcat解壓目錄,大家改成自己對應目錄就可以了
關於context.xml中對應欄位解釋地址如下:
http://commons.apache.org/dbcp/configuration.html
或者大家看後面我引用別人的例子也行,裡面有詳細的中文介紹

以下是網上找的一篇文章,感覺寫的也很好,抄過來供大家看看:

資料來源:

JDBC2.0提供了javax.sql.DataSource的介面,負責與資料庫建立串連,實際應用時不需要編寫串連資料庫代碼,直接從資料來源獲得資料庫的串連。Dataource中事先建立了多個資料庫連接,這些資料庫連接保持在資料庫連接池中,當程式訪問資料庫時,只需要從串連池從取出閒置串連,訪問資料庫結束,在將這些串連歸還給串連池。DataSource對象由容器(Tomcat)提供,不能使用建立執行個體的方法來產生 DataSource對象,要採用JAVA的JNDI(Java Nameing and Directory Interface,java命名和目錄介面)來獲得DataSource對象的引用。(另有一種說法:“其實從技術上來說,資料來源串連方式是不需要目錄服務的,我們同樣可以通過序列化資料來源對象直接存取檔案系統。這點是需要明確的。”感興趣的朋友可以試試。)JNDI是一種將對象和名字綁定的技術,對象工廠負責生產出對象,這些對象都和唯一的名字相綁定。程式中可以通過這個名字來獲得對象的引用。Tomcat把DataSource作為一種可配置的 JNDI資源來處理,產生DataSource對象的工廠為 org.apache.comm.ons.dbcp.BasicDataSourceFactory。

 

配置資料來源:

配置資料來源其實相當簡單:

首先在server.xml中加入<resource></resource>元素,開啟server.xml,在<context></context>中加入以下代碼(以oracle為例):

 

 

<resource type="javax.sql.DataSource" auth="Container" name="jdbc/ JNDI名字"></resource>

<resourceparams name="jdbc/JNDI名字"></resourceparams>

<parameter></parameter>

<name></name>factory
 
<value></value>org.apache.commons.dbcp.BasicDataSourceFactory

<parameter></parameter>

<name></name>maxActive

<value></value>100

<parameter></parameter>
 
<name></name>maxIdle
 
<value></value>30

<parameter></parameter>

<name></name>maxWait
 
<value></value>10000

<parameter></parameter>
 
<name></name>username

<value></value>使用者名稱

<parameter></parameter>

<name></name>password

<value></value>密碼

<parameter></parameter>

<name></name>driverClassName

<value></value>oracle.jdbc.driver.OracleDriver

<parameter></parameter>

<name></name>url
 
<value></value>jdbc:oracle:thin:@ip:連接埠:sid

 

<resource></resource>元素的屬性如下:

 

屬性 描述
name 指定Resource的JNDI的名字
auth 指定管理Resource的Manager,由兩個可選值:Container和Application。Container表示由容器來建立和管理 Resource,Application表示由WEB應用來建立和管理Resource。如果在web application deployment descriptor中使用<resource-ref></resource-ref>,這個屬性是必需的,如果使用<resource-env-ref></resource-env-ref>,這個屬性是可選的。
type 指定Resource所屬的java類名

 

<resourceparams></resourceparams>元素的屬性如下:

 

 

屬性 描述
name 指定ResourceParams的JNDI的名字,必須和Resource的name保持一致
factory 指定產生DataSource對象的factory的類名
maxActive 指定資料庫連接池中處於活動狀態的資料庫連接最大數目,0表示不受限制
maxIdle 指定資料庫連接池中處於空閑狀態的資料庫連接的最大數目,0表示不受限制
maxWait 指定資料庫連接池中的資料庫連接處於空閑狀態的最長時間(單位為毫秒),超過這一事件,將會拋出異常。-1表示可以無限期等待。
username 指定串連資料庫的使用者名稱
password 指定串連資料庫的密碼
driverClassName 指定串連資料庫的JDBC驅動程式
url 指定串連資料庫的URL

 

其他文章說以上配置就OK了,對於web.xml的配置可有可無,其實不是這樣子的。如果在web應用中訪問了由Servlet容器管理的某個 JNDI Resource,則必須在web.xml中聲明對這個JNDI Resource的引用。表示資源引用的元素為<resource-ref></resource-ref>,該元素加在<wepapp></wepapp>中。

 

 

<resource-ref></resource-ref>

<descryiption></descryiption>DB Connection

<res-ref-name></res-ref-name>jdbc/JNDI名字

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

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

 

<resource-ref></resource-ref>元素的屬性如下:

 

 

屬性 描述
description 對所引用的資源的說明
res-ref-name 指定所引用資源的JNDI名字,與<resource></resource>元素中的name屬性保持一致
res-type 指定所引用資源的類名字,與<resource></resource>元素中的type屬性保持一致
res-auth 指定所引用資源的Manager,與<resource></resource>元素中的auth屬性保持一致

 

到這裡,資料來源就已經配置成功了。但是我在測試的時候除了一點小麻煩,主要原因是對DataSource的概念沒搞清楚。我是這麼測試的,寫一個測試類別,然後在eclipse中進行junit測試,捕獲的異常為:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial。

同樣的代碼在JSP檔案中正常運行,後來翻了一些資料,終於找到了問題的所在了。原來DataSource是由容器(TOMCAT)提供的,所以我的測試會拋出異常。為了再次驗證想法是否正確,在jsp檔案中import剛才拋出異常的類,在進行串連資料庫,結果一切正常。

下面的例子是實際應用中使用DataSource,在jsp檔案中串連oracle。

 

 

 

另:tomcat5.5的配製方法為:

               maxActive="100" maxIdle="30" maxWait="10000"
               username="使用者名稱" password="密碼" driverClassName="oracle.jdbc.driver.OracleDriver"
               url="jdbc:oracle:thin:@ip:連接埠:sid"/>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.