Connection Pooling Proxool

原创 2004年10月10日 16:53:00
第21期-Connection Pooling Proxool


作者:jini         来源:java 公开原始码报
申明:未经作者同意,谢绝转载
image003.jpg
Proxool
( ASF )
JCP ( Java Community Process ) 是负责 Java Spec 标准的制定, Reference Implementations( RI: 实现参考 ), Technology Compatibility kits ( 技术兼容性测试 )的公开组织, 所有和 Java 有关的公司, SUN, IBM, BEA, Oracle, SAP, HP 等等, 要制定相关的标准都会来这里提案, 那么经过公开讨论, 投票, 得到的结果, 就是相互努力下创造出的结晶.


为何标准非常重要, 因为没有标准的东西, 兼容性的部分非常薄弱, 各家厂商彼此实现出来的产品, 将会造成系统整合沉重的负担, 因此, 我以沉重的心情建议大家, 如果你发现你做的东西, 和标准不符合, 或者有相同类似功能的标准, 更是应该减少重新造轮的时间, 还有, 昙花一现的作品, 更是让未来的维护人员最难过的地方.


凡事都有例外, 有些比标准还要早出来, 或者领先标准的东西, 都是可以去学习的, 例如 log4j 远比 jdk logging 好用, hibernate 可以与 ejb 抗衡, 这种例子非常地多, 但是都有同一个特点, 就是 opensource, 就是因为 opensource , 才能吸引更多优秀的人来加强, 来创造 !


回到这周主题, connection pooling 的实现, 很多人都搞不清楚 connection pooling 该如何真正实现, 目前比较有名的 db connection pool 的项目有 jakarta commons-dbcp, PoolMan, RP Database Connection Pool 等等, 以及这次要介绍的 proxool, 被用在许多项目中, 最有名的就是强大 OR-Mapping 的项目 Hibernate 及 JMS 的专案 OpenJMS 所采用 ~.


增加 license 说明, 相关细节请参考 license 解说 [by Tempo]

ps:如果要赞助本电子报发行, 请与我们联络->Johnny
本周主题 -- proxool



SECTION 01 为何需要 connection pooling

当我们进入了 Java 的开发世界, pool 也是一门学问, 如何让 connection 先建立好与 DB 的连结, 后来的人可以使用已经存在于 pool 的 connection, 减少连结的时间, 这么优秀的功能, 在许多 application server 都已经实现好了, 你只要简单地按照说明文件配置, 包括最大连结数量, 初始连结数量, 最大等待数量等等的参数, 当然, Tomcat 也有内建 commons-dbcp 相关的 connection pooling 机制, 请查阅 Tomcat JNDI Datasource 设定!!


而 proxool 是一个强大的 connection pooling 项目, 兼容于 jdk 1.3 以及 1.4. 也已经实现了 监控, 纪录等等的功能, 对于一个有限制 connection 数量, 及注重 performation 的项目来说, 是一套非常完整的解决方案.

下载区, 目前版本 0.7.2

http://sourceforge.net/projects/proxool/


SECTION 02 设置 AdminServlet

首先, 你要把下载 proxool 的 lib 下面所有的 jar 文件, 放到 WEB-INF/lib 下面,

另外, 把你的 jdbc driver 也放到相同的 lib,

接著就是配置 /WEB-INF/web.xml



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app 
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"/WEB-INF/dtds/web-app_2_3.dtd">
<web-app>
<display-name>proxool</display-name>
<servlet>
  <servlet-name>Admin</servlet-name>
  <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>Admin</servlet-name>
  <url-pattern>/admin</url-pattern>
</servlet-mapping> 

</web-app>



SECTION 03 通过 ProxoolDriver 取得 connection

建立一个 jsp or DAO Bean, 通过 org.logicalcobwebs.proxool.ProxoolDriver 建立 Connection





<%@page import="java.sql.*"%>
<%
Connection connection = null;
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");

connection = DriverManager.getConnection(
"proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test",
"root",
"password"
);
} catch (Exception e) {
	out.println(e)
}
out.println("OK");
%>



SECTION 04 检视 pooling 现在状态

执行 http://localhost:8080/proxool-test/admin ( proxool-test 是你的应用名称 ) 如果没有任何 pool 状态的时候, 你只会看到 Pools 这几个字, 所以你先执行 http://localhost:8080/proxool-test/test.jsp 建立一个 connection, 就可以监控 connection pooling 的状态了.

Pools
> test -> jdbc:mysql://www:3306/test

Defintition for test
URL jdbc:mysql://localhost:3306/test
Driver org.gjt.mm.mysql.Driver
Connections 0 (min), 15 (max)
Prototyping off
Connection Lifetime 11:00:00
Maximum active time 07:05:00
House keeping sleep time 30s
House keeping test SQL off
Fatal SQL exceptions off
Statistics off

Snapshot at 21:12:53
Start date 01-??-2003 21:12:30
Connections 1 (active), 0 (available), 15 (max)
   
Served 1
Refused 0
Details
# born last
start
lap
(ms)
 thread
1  21:12:31  21:12:31 22432    Thread-15
less information

Proxool 0.7.2 (29-Apr-2003 00:33)



SECTION 05 使用 properties 或者 xml 来设置 DB URL 及 Driver

可以采用 xml 配置文件, 在程序中使用 JAXPConfigurator.configure("proxool.xml", false); 配置文件设置如下


<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
  <proxool>
    <alias>xml-test</alias>
    <driver-url>jdbc:mysql://localhost:3306/test</driver-url>
    <driver-class>org.gjt.mm.mysql.Driver</driver-class>
    <driver-properties>
      <property name="user" value="root"/>
      <property name="password" value="password"/>
    </driver-properties>
    <maximum-connection-count>10</maximum-connection-count>
    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
  </proxool>
</something-else-entirely>






也可以采用 properties, 在程序 PropertyConfigurator.configure("proxool.properties"); 文件设置


jdbc-0.proxool.alias=property-test
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/test
jdbc-0.proxool.driver-class=org.gjt.mm.mysql.Driver
jdbc-0.user=root
jdbc-0.password=password
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE






如果在 Web 使用, 在 web.xml 也可以设置 ServletConfigurator Servlet 来注册

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app 
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"/WEB-INF/dtds/web-app_2_3.dtd">
<web-app>
	<display-name>proxool</display-name>

	<servlet>
	  <servlet-name>ServletConfigurator</servlet-name>
	  <servlet-class>
	  org.logicalcobwebs.proxool.configuration.ServletConfigurator
	  </servlet-class>
	 
	  <init-param>
		<param-name>xmlFile</param-name>
		<param-value>WEB-INF/proxool.xml</param-value>
	  </init-param>

	   <load-on-startup>1</load-on-startup>

	</servlet> 


	<servlet>
	  <servlet-name>Admin</servlet-name>
	  <servlet-class>
	  org.logicalcobwebs.proxool.admin.servlet.AdminServlet
	  </servlet-class>
	</servlet>

	<servlet-mapping>
	  <servlet-name>Admin</servlet-name>
	  <url-pattern>/admin</url-pattern>
	</servlet-mapping> 

</web-app>

在程序中, 只需要利用到别名就可以呼叫 connection pool 里面的 connection 来使用了

<%@page import="java.sql.*;"%>
<%
Connection connection = null;
try {
	Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
	connection = DriverManager.getConnection("proxool.xml-test");

} catch (Exception e) {
	out.println(e);
}

out.println("ok");
%>



SECTION 06 使用 connection.close() 关闭 connection

以上的范例我都没有写 close, 希望大家在 connection 做完之后记得使用 close() 来关闭, 将 connection 还到 pool , 以免有 java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: ConnectionCount is 10. Maximum connection count of 10 cannot be exceeded. 的现象发生.
参考 -- 相关书目或相关文章

  1. Proxool :
    http://proxool.sourceforge.net/
  2. Proxool API:
    http://proxool.sourceforge.net/api-dev/index.html
新闻 -- OpenSource News

oracle database resident connection pooling(驻留连接池)

oracle在11g中引入了database resident connection pooling(DRCP)。在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic...
  • joeadai
  • joeadai
  • 2013年10月08日 17:30
  • 1869

Proxool Problem getting connection java.lang.IndexOutOfBoundsException(bug)

问题描述:获取数据库连接时,数组下标越界 原因:org.logicalcobwebs.proxool.ConnectionPool类中有一个全局变量标明下一个连接在数组里的下标,如果在回收连接...
  • JIESA
  • JIESA
  • 2017年06月27日 20:55
  • 208

Connection Pooling

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 03:20
  • 109

paip.环境配置整合 ibatis mybatis proxool

paip.环境配置整合 ibatis mybatis proxool  索引: ///////////1.调用 ///////////////2. ibatis 主设置文件  com/m...
  • attilax
  • attilax
  • 2014年01月10日 17:51
  • 1302

java database connection pool 备用

import java.sql.Connection;  import java.sql.DatabaseMetaData;  import java.sql.Driver;  import java...
  • jaxi9
  • jaxi9
  • 2014年10月12日 06:23
  • 216

Hibernate ProXool关于hibernate.proxool.existing_pool设值问题

今天在使用hibernate用proxool连接池的时候出了一些问题 具体问题是当不通过web对数据库进行操作时,会提示 Unable to open JDBC connection for sche...
  • qq_23466461
  • qq_23466461
  • 2016年09月30日 01:52
  • 557

Database Connection Pooling with Tomcat

Software object pooling is not a new concept. There are manyscenarios where some type of object pool...
  • jinhuiyu
  • jinhuiyu
  • 2008年12月20日 05:26
  • 1109

c3p0在spring的配置(详解)

C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和 jdbc2扩展规范说明的Connection 和Statement 池的DataSour...
  • kun20031029
  • kun20031029
  • 2012年07月12日 16:44
  • 1887

Proxool线程池JAVA调用范例

使用:proxool-0.9.1.zip http://ncu.dl.sourceforge.net/project/proxool/proxool/0.9.1/proxool-0.9.1.zi...
  • ozwarld
  • ozwarld
  • 2012年08月06日 15:56
  • 5770

第三方connection pooling 组件

connection pooling 的实现, 很多人都搞不清楚 connection pooling 该如何真正实现, 目前比较有名的 db connection pool 的项目有 jakarta...
  • roshui
  • roshui
  • 2004年08月05日 16:40
  • 999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Connection Pooling Proxool
举报原因:
原因补充:

(最多只允许输入30个字)