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

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

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

    隨筆-5  評(píng)論-56  文章-2  trackbacks-0

    環(huán)境:
    1. 數(shù)據(jù)庫(kù):Microsoft SQL Server 2000
    2. 數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序:net.sourceforge.jtds.jdbc.Driver
    JNDI(Java Naming and Directory Interface)概述:
    Tomcat4(5)提供了一個(gè)與Java Enterprise Edition應(yīng)用服務(wù)相兼容的JNDI--InitialContext實(shí)現(xiàn)實(shí)例。它的初始數(shù)據(jù)設(shè)置在$CATALINA_HOME/conf/server.xml文件里,并可能在網(wǎng)頁(yè)應(yīng)用環(huán)境描述(/WEB-INF/web.xml)里被下列元素引用:
    1) <env-entry>--環(huán)境入口,設(shè)置應(yīng)用程序如何操作。
    2) <resource-ref>--資源參數(shù),一般是數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序、JavaMail Session、自定義類工廠等。
    3) <resource-env-ref>--在Servlet 2.4里用來(lái)簡(jiǎn)化設(shè)置不需認(rèn)證信息的資源資源如環(huán)境參數(shù)、resource-ref變量。
    InitialContext在網(wǎng)頁(yè)應(yīng)用程序初始化時(shí)被設(shè)置,用來(lái)支持網(wǎng)頁(yè)應(yīng)用程序組件。所有的入口和資源都放在JNDI命名空間里的java:comp/env段里。點(diǎn)擊下列網(wǎng)址以獲取更多信息:
    1) Java命名和目錄接口(Java Naming and Directory Interface)
    2) J2EE平臺(tái)說(shuō)明(J2EE Platform Specification)
    設(shè)置JNDI資源
    設(shè)置JNDI資源要在$CATALINA_HOME/conf/server.xml文件里使用下列標(biāo)志符:
    1) <Environment>--設(shè)置域個(gè)可變的JNDI InitialContext入口的名字和值(同上面說(shuō)的<env-entry>等價(jià))。
    2) <Resource>--設(shè)置應(yīng)用程序可用的資源的名字和類型(同上面說(shuō)的<resource-ref>等價(jià))。
    3) <ResourceParams>--設(shè)置Java資源類工廠的名稱或?qū)⒂玫腏avaBean屬性。
    4) <ResourceLink>--給全局JNDI環(huán)境(JNDI Context)添加一個(gè)鏈接。
    上述這些標(biāo)志符必須放在<Context>和</Context>之間(針對(duì)專門(mén)的網(wǎng)頁(yè)應(yīng)用程序)或<DefaultContext>和</DefaultContext>之間。
    此外,設(shè)在網(wǎng)頁(yè)應(yīng)用環(huán)境描述(Web Application Descriptor)(/WEB-INF/web.xml)里的名字和值也在初始環(huán)境(Initial Context)里被設(shè)置,當(dāng)被<Environemt>元素值允許時(shí)將被重設(shè)初始值。
    全局變量能在<Server>子元素的<GlobalNamingResources>里設(shè)置。
    數(shù)據(jù)庫(kù)連接池概述:
    數(shù)據(jù)庫(kù)連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁(yè)應(yīng)用程序中體現(xiàn)得尤為突出。對(duì)數(shù)據(jù)庫(kù)連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫(kù)連接池正是針對(duì)這個(gè)問(wèn)題提出來(lái)的。
    數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而再不是重新建立一個(gè);釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來(lái)避免因?yàn)闆](méi)有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏。這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能。
    數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中,這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的。無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過(guò)最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。數(shù)據(jù)庫(kù)連接池的最小連接數(shù)和最大連接數(shù)的設(shè)置要考慮到下列幾個(gè)因素:
    1) 最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫(kù)連接,所以如果應(yīng)用程序?qū)?shù)據(jù)庫(kù)連接的使用量不大,將會(huì)有大量的數(shù)據(jù)庫(kù)連接資源被浪費(fèi);
    2) 最大連接數(shù)是連接池能申請(qǐng)的最大連接數(shù),如果數(shù)據(jù)庫(kù)連接請(qǐng)求超過(guò)此數(shù),后面的數(shù)據(jù)庫(kù)連接請(qǐng)求將被加入到等待隊(duì)列中,這會(huì)影響之后的數(shù)據(jù)庫(kù)操作。
    3) 如果最小連接數(shù)與最大連接數(shù)相差太大,那么最先的連接請(qǐng)求將會(huì)獲利,之后超過(guò)最小連接數(shù)量的連接請(qǐng)求等價(jià)于建立一個(gè)新的數(shù)據(jù)庫(kù)連接。不過(guò),這些大于最小連接數(shù)的數(shù)據(jù)庫(kù)連接在使用完不會(huì)馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時(shí)后被釋放。
    配置Tomcat數(shù)據(jù)庫(kù)連接池的前提:
    1. 必須裝有Java運(yùn)行環(huán)境;
    2. 必須有SQL Server2000數(shù)據(jù)庫(kù)服務(wù)器(可以不在本地);
    3. 必須有jtds.jar,并將它放在$CATALINA_HOME/common/lib目錄下(只能是這里)。使用它是因?yàn)镸icrosoft公司的Java SQL Server驅(qū)動(dòng)程序不支持二次查詢,可到網(wǎng)上搜到。目前使用的是jtds-0.6.jar。
    在$CATALINA_HOME/conf/server.xml里設(shè)置數(shù)據(jù)庫(kù)連接池:
    下面是配置的代碼,必須放在<Host>和</Host>之間。
    <Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
    <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
    <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/connectDB">
    ?<parameter>
    ? <name>maxActive</name>
    ? <!-- Maximum number of DB connections in pool.Set to 0 for no limit. -->
    ? <value>100</value>
    ?</parameter>
    ?<parameter>
    ? <name>maxIdle</name>
    ? <!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. -->
    ? <value>30</value>
    ?</parameter>
    ?<parameter>
    ? <name>maxWait</name>
    ? <!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. -->
    ? <value>10000</value>
    ?</parameter>
    ?<parameter>
    ? <name>removeAbandoned</name>
    ? <!-- Abandoned DB connections are removed and recycled -->
    ? <value>true</value>
    ?</parameter>
    ?<parameter>
    ? <name>removeAbandonedTimeout</name>
    ? <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.? -->
    ? <value>60</value>
    ?</parameter>
    ?<parameter>
    ? <name>logAbandoned</name>
    ? <!-- Log a stack trace of the code which abandoned -->
    ? <value>false</value>
    ?</parameter>
    ?<parameter>
    ? <name>factory</name>
    ? <!-DBCP Basic Datasource Factory -->
    ? <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    ?</parameter>
    ?<parameter>
    ? <name>username</name>
    ? <!-- Database User Name -->
    ? <value>Iorishinier</value>
    ?</parameter>
    ?<parameter>
    ? <name>password</name>
    ? <!-- User Password -->
    ? <value>mypasswd</value>
    ?</parameter>
    ?<parameter>
    ? <name>driverClassName</name>
    ? <!-- Database Driver Class Name -->
    ? <value>net.sourceforge.jtds.jdbc.Driver</value>
    ?</parameter>
    ?<parameter>
    ? <name>url</name>
    ? <!-- Database Address -->
    ? <value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
    ?</parameter>
    </ResourceParams>
    </Context>
    下面是一些參數(shù)的說(shuō)明:
    <Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
    其中:
    1) path? 指定路徑,這里設(shè)定的是$CATALINA_HOME/webapps下的quality目錄;
    2) docBase 文件根目錄。
    3) reloader? 當(dāng)網(wǎng)頁(yè)被更新時(shí)是否重新編譯。
    4) maxActive 連接池的最大數(shù)據(jù)庫(kù)連接數(shù)。設(shè)為0表示無(wú)限制。
    5) maxIdle? 數(shù)據(jù)庫(kù)連接的最大空閑時(shí)間。超過(guò)此空閑時(shí)間,數(shù)據(jù)庫(kù)連接將被標(biāo)記為不可用,然后被釋放。設(shè)為0表示無(wú)限制。
    6) maxWait 最大建立連接等待時(shí)間。如果超過(guò)此時(shí)間將接到異常。設(shè)為-1表示無(wú)限制。
    7) removeAbandoned 回收被遺棄的(一般是忘了釋放的)數(shù)據(jù)庫(kù)連接到連接池中。
    8) removeAbandonedTimeout 數(shù)據(jù)庫(kù)連接過(guò)多長(zhǎng)時(shí)間不用將被視為被遺棄而收回連接池中。
    9) logAbandoned 將被遺棄的數(shù)據(jù)庫(kù)連接的回收記入日志。
    10) driverClassName JDBC驅(qū)動(dòng)程序。
    11) url?? 數(shù)據(jù)庫(kù)連接字符串
    在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里設(shè)置被引用的資源:
    下面是配置代碼,必須放在<web-app>和</web-app>里。
    <!-- Database Config start -->
    <resource-ref>
    <description>connectDB test</description>
    <res-ref-name>jdbc/connectDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    <!-- Database Config end -->
    下面是一下參數(shù)的必要說(shuō)明:
    1) description? 對(duì)被引用的資源的描述。
    2) res-ref-name? 資源名稱。見(jiàn)上面的<ResourceParams name="jdbc/connectDB">
    3) res-type? 資源類型。見(jiàn)上面的<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
    在JSP中使用資源:
    這是在$CATALINA_HOME/webapps/quality下的某級(jí)子目錄里的jsp網(wǎng)頁(yè)文件部分代碼:
    <%@ page contentType="text/html;charset=GBK"%>
    <%@ page errorPage="error.jsp"%>
    <%@ page import="javax.naming.*"%>
    <%@ page import="javax.sql.*"%>
    <%@ page import="java.sql.*"%>
    <html>
    ?<head>
    ?</head>
    ?<body>
    ? <%

    ?? ………………
    ?? ………………

    ?? // 數(shù)據(jù)庫(kù)操作
    ?? Context ctx=null;
    ?? Connection cnn=null;
    ?? Statement stmt=null;
    ?? ResultSet rs=null;
    ?? try
    ?? {
    ??? ctx=new InitialContext();
    ??? if(ctx==null)
    ???? throw new Exception("沒(méi)有匹配的環(huán)境");
    ??? DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
    ??? if(ds==null)
    ???? throw new Exception("沒(méi)有匹配數(shù)據(jù)庫(kù)");
    ???
    ??? cnn=ds.getConnection();
    ??? stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    ??? rs=stmt.executeQuery("select * from table1");

    ??? ………………
    ??? ………………

    ?? }
    ?? finally
    ?? {
    ??? if(rs!=null)
    ???? rs.close();
    ??? if(stmt!=null)
    ???? stmt.close();
    ??? if(cnn!=null)
    ???? cnn.close();
    ??? if(ctx!=null)
    ???? ctx.close();
    ?? }
    ??? %>
    ?</body>
    </html>
    代碼說(shuō)明:
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
    上面這句應(yīng)用了剛才設(shè)的資源。
    資源使用完要釋放,尤其是Context資源,見(jiàn)try-catch-finally部分的finally代碼段,這是一種好的習(xí)慣。資源釋放時(shí)如果釋放了上級(jí)資源,下級(jí)資源將先被釋放。如:釋放了ctx,那么資源釋放順序?qū)⑹莚s,stmt,cnn,ctx。換句話說(shuō),如果釋放了ctx,那么rs,stmt和cnn都將不可用了。
    這里的釋放資源只是將數(shù)據(jù)庫(kù)連接返回連接池中,并不是把資源真正釋放掉,見(jiàn)數(shù)據(jù)庫(kù)連接池概述。

    posted on 2006-05-21 22:07 javaPlayer 閱讀(166) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产精品一区二区久久| 亚洲热妇无码AV在线播放| 久久综合亚洲色一区二区三区| 一区二区三区免费高清视频| 免费一看一级毛片人| 亚洲日韩一区精品射精| 成年女人视频网站免费m| 亚洲国产乱码最新视频| 午夜精品在线免费观看| 亚洲国产欧美一区二区三区| 女人被男人躁的女爽免费视频| 亚洲日本在线电影| 在线观看永久免费视频网站| 黄网站色视频免费看无下截| 自拍偷自拍亚洲精品被多人伦好爽| a级毛片高清免费视频就| 亚洲AV永久无码区成人网站| 在免费jizzjizz在线播| 亚洲国产精品综合久久20| 嫩草影院在线免费观看| 男性gay黄免费网站| 国产a v无码专区亚洲av| a级成人毛片免费视频高清| 亚洲综合小说久久另类区| 免费看韩国黄a片在线观看| 在线精品自拍亚洲第一区| 亚洲综合激情另类专区| 亚欧免费无码aⅴ在线观看| 亚洲成人午夜电影| 国产美女被遭强高潮免费网站| 精品多毛少妇人妻AV免费久久| 亚洲AV日韩AV永久无码下载| 久久午夜免费视频| 又粗又长又爽又长黄免费视频 | 亚洲色大18成人网站WWW在线播放| 国产在线观看免费完整版中文版 | 久久午夜夜伦鲁鲁片无码免费| 77777午夜亚洲| 国产精品亚洲高清一区二区| 久久www免费人成看片| 亚洲日韩在线中文字幕综合 |