Connection Pooling Proxool

博客围绕开源应用展开,涉及Servlet、JDBC、Hibernate等信息技术相关内容,还提及了编码方面的信息。这些技术在开源应用开发中具有重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第21期-Connection Pooling Proxool


作者:jini         来源:java 公开原始码报
申明:未经作者同意,谢绝转载

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

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



test.jsp

<%@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
URLjdbc:mysql://localhost:3306/test
Driverorg.gjt.mm.mysql.Driver
Connections0 (min), 15 (max)
Prototypingoff
Connection Lifetime11:00:00
Maximum active time07:05:00
House keeping sleep time30s
House keeping test SQLoff
Fatal SQL exceptionsoff
Statisticsoff

Snapshot at 21:12:53
Start date01-??-2003 21:12:30
Connections1 (active), 0 (available), 15 (max)
  
Served1
Refused0
Details
#bornlast
start
lap
(ms)
 thread
1 21:12:31 21:12:3122432   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); 配置文件设置如下

WEB-INF/proxool.xml
<?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"); 文件设置

WEB-INF/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

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值