<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Kimi's NutShell

    我荒廢的今日,正是昨日殞身之人祈求的明日

    BlogJava 新隨筆 管理
      141 Posts :: 0 Stories :: 75 Comments :: 0 Trackbacks
    ?原理:
    ???????? 在DataSource中事先建立多個(gè)數(shù)據(jù)庫(kù)連接,保存在數(shù)據(jù)庫(kù)連接池中。當(dāng)程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí),只用從連接池中取空閑狀態(tài)的數(shù)據(jù)庫(kù)連接即可,訪問(wèn)結(jié)束,銷(xiāo)毀資源,數(shù)據(jù)庫(kù)連接重新回到連接池,這與每次去直接訪問(wèn)數(shù)據(jù)庫(kù)相比,會(huì)節(jié)省大量時(shí)間和資源。
    ???????? JNDI( Java Naming and Directory Interface ),是Java平臺(tái)的一個(gè)標(biāo)準(zhǔn)擴(kuò)展,提供了一組接口、類(lèi)和關(guān)于命名空間的概念。如同其它很多Java技術(shù)一樣,JDNI是provider-based的技術(shù),暴露了一個(gè) API和一個(gè)服務(wù)供應(yīng)接口(SPI)。這意味著任何基于名字的技術(shù)都能通過(guò)JNDI而提供服務(wù),只要JNDI支持這項(xiàng)技術(shù)。JNDI目前所支持的技術(shù)包括 LDAP、CORBA Common Object Service(COS)名字服務(wù)、RMI、NDS、DNS、Windows注冊(cè)表等等。很多J2EE技術(shù),包括EJB都依靠JNDI來(lái)組織和定位實(shí)體。可以把它理解為一種將對(duì)象和名字捆綁的技術(shù),對(duì)象工廠負(fù)責(zé)生產(chǎn)出對(duì)象,這些對(duì)象都和唯一的名字綁在一起,外部資源可以通過(guò)名字獲得某對(duì)象的引用。

    ??? ?? ?? 在javax.naming的包包中提供Context接口,提供了兩個(gè)很好用的方法:
    <1> void bind( String name , Object object )
    ??? ??? 將名稱綁定到對(duì)象。所有中間上下文和目標(biāo)上下文(由該名稱最終原子組件以外的其他所有組件指定)都必須已經(jīng)存在。

    <2>Object lookup( String name )
    ??? ??
    檢索指定的對(duì)象。如果 name為空,則返回此上下文的一個(gè)新實(shí)例(該實(shí)例表示與此上下文相同的命名上下文,但其環(huán)境可以獨(dú)立地進(jìn)行修改,而且可以并發(fā)訪問(wèn))。

    ??? ?? 外部資源訪問(wèn)對(duì)象工廠中的工程圖:

    例:
    =================將以下代碼段添加到server.xml中的<Host>中============
    <!-- configure DataSource. Add the following code into server.xml -->

    <Context path="/bookstore" docBase="bookstore" debug="0"
    reloadable="true" >

    <!-- 數(shù)據(jù)源名稱 -->
    <Resource name="jdbc/BookDB"
    ?????????????? auth="Container"
    ?????????????? type="javax.sql.DataSource" />

    <ResourceParams name="jdbc/BookDB">
    ??? <parameter>
    ????? <name>factory</name>
    ????? <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    ??? </parameter>

    ??? <!-- Maximum number of dB connections in pool. Make sure you
    ???????? configure your mysqld max_connections large enough to handle
    ???????? all of your db connections. Set to 0 for no limit.
    ???????? -->
    <!-- 活動(dòng)狀態(tài)最大連接數(shù) -->
    ??? <parameter>
    ????? <name>maxActive</name>
    ????? <value>100</value>
    ??? </parameter>

    ??? <!-- Maximum number of idle dB connections to retain in pool.
    ???????? Set to 0 for no limit.
    ???????? -->
    <!-- 空閑狀態(tài)數(shù)據(jù)庫(kù)連接最大數(shù) -->
    ??? <parameter>
    ????? <name>maxIdle</name>
    ????? <value>30</value>
    ??? </parameter>

    ??? <!-- Maximum time to wait for a dB connection to become available
    ???????? in ms, in this example 10 seconds. An Exception is thrown if
    ???????? this timeout is exceeded. Set to -1 to wait indefinitely.
    ??????? Maximum time to wait for a dB connection to become available
    ???????? in ms, in this example 10 seconds. An Exception is thrown if
    ???????? this timeout is exceeded. Set to -1 to wait indefinitely.
    ???????? -->
    <!-- 數(shù)據(jù)庫(kù)處于空閑狀態(tài)的最長(zhǎng)時(shí)間 -->
    ??? <parameter>
    ????? <name>maxWait</name>
    ????? <value>10000</value>
    ??? </parameter>

    ??? <!-- MySQL dB username and password for dB connections -->
    <!-- 指定連接數(shù)據(jù)庫(kù)的用戶名及密碼 -->
    ??? <parameter>
    ???? <name>username</name>
    ???? <value>dbuser</value>
    ??? </parameter>
    ??? <parameter>
    ???? <name>password</name>
    ???? <value>1234</value>
    ??? </parameter>

    ??? <!-- Class name for mm.mysql JDBC driver -->
    <!-- 指定JDBC驅(qū)動(dòng) -->
    ??? <parameter>
    ?????? <name>driverClassName</name>
    ?????? <value>com.mysql.jdbc.Driver</value>
    ??? </parameter>

    ??? <!-- The JDBC connection url for connecting to your MySQL dB.
    ???????? The autoReconnect=true argument to the url makes sure that the
    ???????? mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
    ???????? connection. mysqld by default closes idle connections after 8 hours.
    ???????? -->
    <!-- 指定連接數(shù)據(jù)庫(kù)的URL -->
    ??? <parameter>
    ????? <name>url</name>
    ????? <value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>
    ??? </parameter>
    </ResourceParams>

    </Context>
    運(yùn)行機(jī)制:

    ???? 1、 首先程序代碼獲取初始化的 JNDI 環(huán)境并且調(diào)用 Context.lookup() 方法從 JNDI 服務(wù)提供者那里獲一個(gè) DataSource 對(duì)象

    ???? 2、 中間層 JNDI 服務(wù)提供者返回一個(gè) DataSource 對(duì)象給當(dāng)前的 Java 應(yīng)用程序這個(gè) DataSource 對(duì)象代表了中間層服務(wù)上現(xiàn)存的緩沖數(shù)據(jù)源

    ??????3、 應(yīng)用程序調(diào)用 DataSource 對(duì)象的 getConnection() 方法

    ???? 4、 當(dāng) DataSource 對(duì)象的 getConnection() 方法被調(diào)用時(shí),中間層服務(wù)器將查詢數(shù)據(jù)庫(kù) 連接緩沖池中有沒(méi)有 PooledConnection 接口的實(shí)例對(duì)象。這個(gè) PooledConnection 對(duì)象將被用于與數(shù)據(jù)庫(kù)建立物理上的數(shù)據(jù)庫(kù)連接

    ???? 5、 如果在緩沖池中命中了一個(gè) PooledCoonection 對(duì)象那么連接緩沖池將簡(jiǎn)單地更 新內(nèi)部的緩沖連接隊(duì)列并將該 PooledConnection 對(duì)象返回。如果在緩沖池內(nèi)沒(méi) 有找到現(xiàn)成的 PooledConnection 對(duì)象,那么 ConnectionPoolDataSource 接口將會(huì)被 用來(lái)產(chǎn)生一個(gè)新的 PooledConnection 對(duì)象并將它返回以便應(yīng)用程序使用

    ???? 6。 中間層服務(wù)器調(diào)用 PooledConnection 對(duì)象的 getConnection() 方法以便返還一個(gè) java.sql.Connection 對(duì)象給當(dāng)前的 Java 應(yīng)用程序

    ???? 7、 當(dāng)中間層服務(wù)器調(diào)用 PooledConnection 對(duì)象的 getConnection() 方法時(shí), JDBC 數(shù)據(jù) 庫(kù)驅(qū)動(dòng)程序?qū)?huì)創(chuàng)建一個(gè) Connection 對(duì)象并且把它返回中間層服務(wù)器

    ???? 8、 中間層服務(wù)器將 Connection 對(duì)象返回給應(yīng)用程序 Java 應(yīng)用程序,可以認(rèn)為這個(gè) Connection 對(duì)象是一個(gè)普通的 JDBC Connection 對(duì)象使用它可以和數(shù)據(jù)庫(kù)建立。事 實(shí)上的連接與數(shù)據(jù)庫(kù)引擎產(chǎn)生交互操作

    ???? 9、 當(dāng)應(yīng)用程序不需要使用 Connection 對(duì)象時(shí),可以調(diào)用 Connection 接口的 close() 法。請(qǐng)注意這種情況下 close() 方法并沒(méi)有關(guān)閉事實(shí)上的數(shù)據(jù)庫(kù)連接,僅僅是釋 放了被應(yīng)用程序占用的數(shù)據(jù)庫(kù)連接,并將它還給數(shù)據(jù)庫(kù)連接緩沖池,數(shù)據(jù)庫(kù)連接 緩沖池會(huì)自動(dòng)將這個(gè)數(shù)據(jù)庫(kù)連接交給請(qǐng)求隊(duì)列中下一個(gè)的應(yīng)用程序使用。

    posted on 2007-10-22 12:01 Kimi 閱讀(2365) 評(píng)論(7)  編輯  收藏 所屬分類(lèi): Java

    評(píng)論

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢 2007-10-22 16:35 vector
    毛毛,又是東拉一段,西扯一段的啊  回復(fù)  更多評(píng)論
      

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢[未登錄](méi) 2008-04-08 15:54 a
    aaaaaaaa  回復(fù)  更多評(píng)論
      

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢 2008-10-28 16:35 tt
    暈 這也叫作機(jī)制  回復(fù)  更多評(píng)論
      

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢 2008-10-28 16:44 Kimi
    那應(yīng)該如何叫呢,請(qǐng)教這位兄臺(tái)。  回復(fù)  更多評(píng)論
      

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢 2008-12-19 23:35 HAL
    改名叫 DATASOURCE 的JNDI 算了,這樣會(huì)誤認(rèn)子弟滴~~~  回復(fù)  更多評(píng)論
      

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢 2009-01-07 16:10 ton
    我只想知道JNDI的運(yùn)行原理,你說(shuō)的我都知道,但這并非是它的原理。  回復(fù)  更多評(píng)論
      

    # re: JNDI 技術(shù)原理與運(yùn)行機(jī)制 (轉(zhuǎn))--精華噢[未登錄](méi) 2010-11-19 17:18 dd
    什么東西哦  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲欧美黑人猛交群| 嫖丰满老熟妇AAAA片免费看| 亚洲性无码AV中文字幕| 国产av无码专区亚洲av桃花庵| 免费h黄肉动漫在线观看 | 国产成人精品日本亚洲网站| 国产男女猛烈无遮挡免费视频网站 | aaa毛片视频免费观看| 精品国产亚洲AV麻豆| 亚洲人成网站看在线播放| 亚洲一区二区三区高清| 久久亚洲国产精品一区二区| 亚洲情a成黄在线观看| 免费一看一级毛片人| 国产免费观看黄AV片| 成人国产mv免费视频| 成人毛片18女人毛片免费| 久久久久久国产a免费观看黄色大片| 久久永久免费人妻精品| 91成人免费福利网站在线| 国产精品成人69XXX免费视频| 日韩一级片免费观看| 特级毛片A级毛片免费播放| 久久精品国产亚洲AV天海翼| 亚洲国产一区二区三区在线观看| 亚洲精品美女网站| 一本色道久久88亚洲精品综合| 亚洲av一本岛在线播放| 久久精品国产亚洲AV蜜臀色欲| 亚洲婷婷综合色高清在线| 亚洲依依成人精品| 国产一级片免费看| 你懂的网址免费国产| 国产一区二区三区免费| 免费视频一区二区| 最近免费视频中文字幕大全| 亚洲成人在线免费观看| 日日麻批免费40分钟日本的| 久九九精品免费视频| 成年午夜视频免费观看视频 | 亚洲成a∨人片在无码2023|