﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BloveSaga-文章分类-实用技术</title><link>http://www.blogjava.net/blovesaga/category/11877.html</link><description>在希腊帕尔纳斯山南坡上,有一个驰名世界的戴尔波伊神托所,在它的入口处的巨石上赫然锈刻着这样几个大字: 认识你自己!</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:09:33 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:09:33 GMT</pubDate><ttl>60</ttl><item><title>Connection Pool:Proxool </title><link>http://www.blogjava.net/blovesaga/articles/50274.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Sun, 04 Jun 2006 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/50274.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/50274.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/50274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/50274.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/50274.html</trackback:ping><description><![CDATA[
		<div class="postText">  Tomcat从5.x开始就可以在server.xml里配置数据源,后来用到了Proxool对比了一下觉得Proxool更方便更好用,它提供了更多的方法,简单,推荐大家使用.<br />  下载地址:http://proxool.sourceforge.net/ 最新版本为: Proxool 0.9.0RC2<br />  下载后解压缩Proxool 0.9.0RC2后,把Proxool 0.9.0RC2/lib下的.jar文件部署到WEB-INF/lib下.<br />  看看下面的范例(example for Oracle):<br />  Proxool.jsp<br />________________________________________________________________________________________________________________________________________<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br /><br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;Proxool.jsp&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        &lt;h2&gt;使用Proxool.jsp&lt;/h2&gt;<br />        &lt;%<br />           Connection con=null;<br />           Statement stmt=null;<br />           ResultSet rs=null;<br />           <br />           String ename="";<br />           <br />           try<br />           {<br />             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");<br />             con=DriverManager.getConnection("proxool.JSPBook:oracle.jdbc.driver.OracleDriver:<br />                       jdbc:oracle:thin:@yang:1521:orcl","scott","ss");             <br />             stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,<br />                                      ResultSet.CONCUR_UPDATABLE);<br />             String query="select * from emp";<br />             rs=stmt.executeQuery(query);<br />             while(rs.next())<br />             {<br />               ename=rs.getString("ename");<br />      %&gt;<br />        从emp表中取出姓名&lt;%=ename%&gt;&lt;br&gt;<br />      &lt;%<br />             }<br />             stmt.close();<br />             con.close();<br />           }<br />           catch(SQLException e)<br />           {<br />             out.println("发生异常"+e);<br />           }<br />           finally<br />           {<br />             try<br />             {<br />               if(con!=null)<br />               {<br />                 con.close();<br />               }<br />             }<br />             catch(SQLException ne)<br />             {<br />               out.println("SQLException:"+ne);<br />             }<br />           }<br />        %&gt;<br />    &lt;/bdoy&gt;<br />&lt;/html&gt;<br />Proxool.jsp通过Proxool连接池取得Connection,然后显示emp表格中的ename.<br />首先动态加载Proxool的driver:<br />  Class.forName("org.logicalcobwebs.proxool.ProxoolDriver);<br />然后将Proxool URL分为三个部分: 连接池的别名,JDBC驱动程序(DataBase JDBC Drivers),连接URL.<br /><br />设定Proxool<br />proxool提供了许多连接池的参数,例如:连接池最多有几个Connection,最少有几个Connection,Connection生命期限等等。<br />Proxool主要有以下四种设定方式:<br />(一) 通过java.util.Properties对象来设定,例如:<br />Properties info=new Properties();<br />info.setProperty("proxool.maximum-connection-count","20");<br />info.setProperty("proxool.house-keeping-test-sql","select CURRENT_DATE");<br />info.setProperty("user","your DB username");<br />info.setProperty("password","your DB prassword");<br />String alias="Develop"; //Proxool连接池的别名,根据自己喜好随便写^_^<br />String driverClass="oracle.jdbc.driver.OracleDriver";<br />String driverUrl="jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName";<br />String url="proxool."+alias+":"+drvierClass+":"+driverUrl;<br />connection=DrvierManager.getConnection(rul,info);<br /><br />(二) 通过XML文件来设定,例如:<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!--the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored.--&gt;<br />&lt;proxool&gt;<br />  &lt;alias&gt;Develop&lt;/alias&gt;<br />  &lt;driver-url&gt;<br />    jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />  &lt;/driver-url&gt;<br />  &lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&lt;/driver-class&gt;<br />  &lt;driver-properties&gt;<br />    &lt;property name="user" value="your database name"/&gt;<br />    &lt;property name="password" value="your DB password"/&gt;<br />  &lt;/driver-properties&gt;<br />  &lt;maximum-connection-count&gt;10&lt;/maximum-connection-count&gt;<br />  &lt;house-keeping-test-sql&gt;select CURRENT_DATE&lt;/house-keeping-test-sql&gt;<br />&lt;/proxool&gt;<br />然后通过JAXPConfiguration读取XML文件:<br />JAXPConfigurator.configure("/WEB-INF/classes/proxool.xml",false);<br /><br />(三) 先通过Properties文件来设定,例如:<br />jdbc-0.proxool.alias=Develop<br />jdbc-0.proxool.drvier-url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver;<br />jdbc-0.user=your database username<br />jdbc-0.password=your database password<br />jdbc-0.proxool.maximum-connection-count=10<br />jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE<br />然后通过PropertyConfigurator读取Properties文件:<br />PropertyConfigurator.configure("/WEB-INF/classes/Proxool.properties");<br /><br />(四)在web.xml中,通过servlet来设定.方法又有三种,前两种是按照格式来的:<br />1.XML文件<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;param-name&gt;xmlFile&lt;/param-name&gt;<br />     &lt;param-value&gt;WEB-INF/classes/Proxool.xml&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />&lt;/servlet&gt;<br /><br />2.Properties文件<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />     &lt;param-value&gt;WEB-INF/classes/Proxool.properties&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />&lt;/servlet&gt;<br /><br />3.Init Prameter<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.alias&lt;/init-param&gt;<br />     &lt;init-value&gt;Develop&lt;/init-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.driver-rul&lt;/init-param&gt;<br />     &lt;init-value&gt;<br />        jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />     &lt;/init-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.driver-class&lt;/init-param&gt;<br />     &lt;init-value&gt;oracle.jdbc.driver.OracleDriver&lt;/init-value&gt;<br />  &lt;init-param&gt;<br />&lt;/servlet&gt;<br /><br />建议大家使用第四种方法,好处在于当Container启动时,Proxool的参数会自动设定加载到内存中,原因在于:<br />&lt;servlet&gt;<br />......略<br />&lt;load-on-start&gt;1&lt;/load-on-start&gt;<br /><br />一个完整的示例如下:<br />web.xml<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />         version="2.4"&gt;<br />.......略<br />  &lt;servlet&gt;<br />     &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />     &lt;servlet-class&gt;<br />       org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />     &lt;/servlet-class&gt;<br />     &lt;init-param&gt;<br />       &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />       &lt;param-value&gt;WEB-INF/classes/Proxool.properties&lt;/param-value&gt;<br />     &lt;/init-param&gt;<br />     &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />  &lt;/servlet&gt;<br />.......略<br />&lt;/web-app&gt;<br /><br />Proxool.proterties<br />jdbc-0.proxool.alias=Develop<br />jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver<br />jdbc-0.proxool.driver.url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />jdbc-0.proxool.maximum-connection-count=10<br />jdbc-0.proxool.prototype-count=4<br />jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE<br />jdbc=0.proxool.verbose=true<br /><br />我们可以用下面的Test Page来进行测试<br />Proxool-config.jsp<br />____________________________________________________<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br /><br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;Proxool.jsp&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        &lt;h2&gt;使用Proxool.jsp&lt;/h2&gt;<br />        &lt;%<br />           Connection con=null;<br />           Statement stmt=null;<br />           ResultSet rs=null;<br />           <br />           String ename="";<br />           <br />           try<br />           {<br />             con=DriverManager.getConnection("proxool.Develop");             <br />             stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,<br />                                      ResultSet.CONCUR_UPDATABLE);<br />             String query="select * from emp";<br />             rs=stmt.executeQuery(query);<br />             while(rs.next())<br />             {<br />               ename=rs.getString("ename");<br />      %&gt;<br />        从emp表中取出姓名&lt;%=ename%&gt;&lt;br&gt;<br />      &lt;%<br />             }<br />             stmt.close();<br />             con.close();<br />           }<br />           catch(SQLException e)<br />           {<br />             out.println("发生异常"+e);<br />           }<br />           finally<br />           {<br />             try<br />             {<br />               if(con!=null)<br />               {<br />                 con.close();<br />               }<br />             }<br />             catch(SQLException ne)<br />             {<br />               out.println("SQLException:"+ne);<br />             }<br />           }<br />        %&gt;<br />    &lt;/bdoy&gt;<br />&lt;/html&gt;<br />测试结果为:<br />=====================================<br />使用Proxool.jsp<br />从emp表中取出姓名SMITH<br />从emp表中取出姓名ALLEN<br />从emp表中取出姓名WARD<br />从emp表中取出姓名JONES<br />从emp表中取出姓名MARTIN<br />从emp表中取出姓名BLAKE<br />从emp表中取出姓名CLARK<br />从emp表中取出姓名SCOTT<br />从emp表中取出姓名KING<br />从emp表中取出姓名TURNER<br />从emp表中取出姓名ADAMS<br />从emp表中取出姓名JAMES<br />从emp表中取出姓名FORD<br />从emp表中取出姓名MILLER<br />从emp表中取出姓名feiyang<br />从emp表中取出姓名yang<br />从emp表中取出姓名feifei<br />从emp表中取出姓名fei </div>
<img src ="http://www.blogjava.net/blovesaga/aggbug/50274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-04 15:30 <a href="http://www.blogjava.net/blovesaga/articles/50274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDNI---数据来源(Data Source) </title><link>http://www.blogjava.net/blovesaga/articles/50272.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Sun, 04 Jun 2006 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/50272.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/50272.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/50272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/50272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/50272.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">Tomcat下JNDI的配置</font>
		<br />
		<br />    JNDI全名为Java Naming and Directory Interface.JNDI主要提供应用程序所需要资源上命名与目录服务.在Java EE环境中,JNDI扮演了一个很重要的角色,<br />它提供了一个接口让用户在不知道资源所在位置的情形下,取得该资源服务.<br />    就好比网络磁盘驱动器的功能一样。如果有人事先将另一台机器上的磁盘驱动器接到用户的机器上,用户在使用的时候根本就分辨不出现在的驱动器是存在本端,<br />还是在另一端的机器上,用户只需取得资源来用,根本就不知道资源在什么地方。<br />    JNDI这个接口基本上是LDAP,LDAP全名为Lightweight Directory Access Protocol.<br />    <br />    要设定JNDI的JDBC数据源和DBCP连接池需要做以下的工作:(for example Oracle DataBase)<br /><br />    一. 安装JDBC Driver<br />    将你DB的JDBC Driver部署到{Tomcat_Install]\common\lib目录下。<br />    二. 设定Tomcat下的server.xml<br />    修改{Tomcat_Install|\conf\server.xml文件中你的站台标签里的&lt;Host&gt;&lt;/Host&gt;之间的内容.如下:<br />    server.xml<br />     &lt;Host&gt;<br />        &lt;Context path="/Develop" docBase="Develop" debug="0" reloadable="true"               crossContext="true"&gt;<br />        &lt;Resource name="jdbc/dy" auth="Container" type="javax.sql.DataSource"/&gt;<br />            &lt;ResourceParams name="jdbc/dy"&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;factory&lt;/name&gt;<br />                  &lt;value&gt;<font color="#0000ff">org.apache.commons.dbcp.BasicDataSourceFactory</font>&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;driverClassName&lt;/name&gt;<br />                  &lt;value&gt;<font color="#ffa500">oracle.jdbc.driver.OracleDriver</font>&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;url&lt;/name&gt;<br />                  &lt;value&gt;<font color="#ffa500">jdbc:oracle:thin:@yang:1521:orcl</font>&lt;/value&gt;<br />               &lt;/parameter&gt;               <br />               &lt;parameter&gt;<br />                  &lt;name&gt;username&lt;/name&gt;<br />                  &lt;value&gt;scott&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;password&lt;/name&gt;<br />                  &lt;value&gt;ss&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxActive&lt;/name&gt;<br />                  &lt;value&gt;20&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxIdle&lt;/name&gt;<br />                  &lt;value&gt;10&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxWait&lt;/name&gt;<br />                  &lt;value&gt;-1&lt;/value&gt;<br />               &lt;/parameter&gt;                                                                 <br />            &lt;/ResourceParams&gt;<br />        &lt;/Context&gt;<br />      &lt;/Host&gt;<br />  上述社定所表示的意思是在Develop站台中,定义一个JDBC数据来源,名称为jdbc/dy.<br />  通过以下的代码来设置的这个jdbc/dy的数据来源和DBCP连接池:<br />  &lt;parameter&gt;<br />     &lt;name&gt;factory&lt;/name&gt;<br />     &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />  &lt;/parameter&gt;<br />  设定使用DBCP连接池,这是有Jakarta Project组织所制定的连接池程序,它一样是OpenSource的.<br />参数说明:<br />     &lt;Context&gt;&lt;/Context&gt;用于设置你的站台.<br />     &lt;Context&gt;标签中的path="/Develop"代表网站名称,即: http://IP_DomaninName/Develop; docBase="Develop"代表站台的目录位置,debug则是设定debug level<br />     ,0表示提供最少的信息,9表示提供最都多的信息;reloadable则表示Tomcat执行时,当class,web.xml被更新时,都会自动重新加载,不需要重新启动Tomcat;<br />     maxActive表示连接池的最大数据库连接数;设为0表示无限制;maxIdle表示设定连接池中最小能有几个Connection,若为0表示不限制;maxWait 最大建立连接等待时间。<br />    如果超过此时间将接到异常,设为－1表示无限制,单位为ms;driverClassName JDBC驱动程序;url表示数据库连接字符串.<br /><br /> 三. 设定应用站台中的web.xml<br /> eg:设定Develop的web.xml如下:<br />  &lt;resource-ref&gt;<br />     &lt;description&gt;JNDI JDBC DataSource of Develop&lt;/description&gt;   //一个描述<br />     &lt;res-ref-name&gt;jdbc/dy&lt;/res-ref-name&gt;                        //这里必须为你之前指定的&lt;ResourceParams name="jdbc/dy"&gt;<br />     &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />     &lt;res-auth&gt;Container&lt;/res-auth&gt;<br />  &lt;/resource-ref&gt;<br /><br /> 四. 使用JDBC数据来源获得Connection对象<br />   Context initContext=new InitialContext();<br />   Context envContext=(Context)initContext.lookup("<font color="#0000ff">java:/comp/env</font>");<br />   或者<br />   Context envContext=(Context)initContext.lookup("<font color="#0000ff">java:comp/env</font>");<br />   DataSourceds conn=(DataSource)envContext.lookup("jdbc/dy");<br />   conn=ds.getConnection();<br /><br />按照这四个步骤做下来后,那么你就可以写个Test Page来测试一下了.<br />Test Page1:<br />_________________________________________________________________________________________________________<br />testpool.jsp<br />&lt;!--测试JNID数据源的配置--&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="javax.naming.Context"%&gt;<br />&lt;%@ page import="javax.sql.DataSource"%&gt;<br />&lt;%@ page import="javax.naming.InitialContext"%&gt;<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%<br />  DataSource ds=null;<br />  try<br />  {<br />      Context initCtx=new InitialContext();<br />      Context envCtx=(Context)initCtx.lookup("java:comp/env");<br />      //从Context中loopup 数据源<br />      ds=(DataSource)envCtx.lookup("jdbc/dy");<br />      if(ds!=null)<br />      {<br />        out.println("已经获得DataSource!");<br />        out.println("&lt;br&gt;");<br />        Connection conn=ds.getConnection();<br />        Statement stmt=conn.createStatement();<br />        ResultSet rst=stmt.executeQuery("select * from emp");<br />        out.println("以下是从数据库里读出来的数据");<br />        out.println("&lt;hr&gt;");<br />        while(rst.next())<br />        {<br />          out.println("empName:"+rst.getString("ename"));<br />          out.println("&lt;br&gt;");<br />        }<br />      }<br />    else<br />        out.println("连接失败");<br />  }<br />  catch(Exception e)<br />  {<br />      out.println(e);<br />  }<br />%&gt;<br />如果成功那么输出结果:<br />========================================<br />已经获得DataSource!<br />以下是从数据库里读出来的数据:<br />empName:SMITH<br />empName:ALLEN<br />empName:WARD<br />empName:JONES<br />empName:MARTIN<br />empName:BLAKE<br />empName:CLARK<br />empName:SCOTT<br />empName:KING<br />empName:TURNER<br />empName:ADAMS<br />empName:JAMES<br />empName:FORD<br />empName:MILLER<br />empName:feiyang<br />empName:yang<br />empName:feifei<br />empName:fei <br /><img src ="http://www.blogjava.net/blovesaga/aggbug/50272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-04 15:29 <a href="http://www.blogjava.net/blovesaga/articles/50272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>