这几天花了点时间弄了个 db4o 连接池,比较简单,连接池原型是论坛上面的一篇文章。很简单,欢迎拍砖。
从 servlet 开始,在这里初始化连接池:
package
com;
import
java.io.File;
import
java.util.Enumeration;
import
javax.servlet.ServletConfig;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
public
class
ConnectionPollServlet
extends
HttpServlet {
private
static
final
String XML_FILE_PROPERTY
=
"
xmlFile
"
;
/**
* servlet init
*/
public
void
init(ServletConfig servletConfig)
throws
ServletException{
super
.init(servletConfig);
String appDir
=
servletConfig.getServletContext().getRealPath(
"
/
"
);
Enumeration names
=
servletConfig.getInitParameterNames();
while
(names.hasMoreElements()){
String name
=
(String) names.nextElement();
String value
=
servletConfig.getInitParameter(name);
if
(name.equals(XML_FILE_PROPERTY)) {
File file
=
new
File(value);
if
(file.isAbsolute()) {
XMLReader.configure(value);
}
else
{
XMLReader.configure(appDir
+
File.separator
+
value);
}
}
}
}
/**
* servlet destroy
*/
public
void
destroy() {
super
.destroy();
ConnectionPoll.destroy();
}
}
然后是 XML 解析类:
package com;
import java.io.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XMLReader {
/**
* parse XML file
* @param xmlFileName
*/
public static void configure(String xmlFileName) {
try {
File file = new File(xmlFileName);
SAXReader reader = new SAXReader();
Document doc = reader.read(file);
Element root = doc.getRootElement();
String fileName = file.getParent()+"\\"
+root.elementText("fileName");
String sport = root.elementText("port");
String sminConn = root.elementText("minConn");
String sidelTime = root.elementText("idelTime");
int port = Integer.parseInt(sport);
int minConn = Integer.parseInt(sminConn);
int idelTime = Integer.parseInt(sidelTime);
ConnectionPoll.init(fileName,port,minConn,idelTime);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
连接池类:
package com;
import java.util.concurrent.ConcurrentLinkedQueue;
import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectServer;
public class ConnectionPoll {
private static int idelTime;
private static ConcurrentLinkedQueue<ObjectContainer> connectionQueue;
private ConnectionPoll(){
}
/**
* init pool
*/
protected static void init(String fileName,int port,int minConn,int it) {
idelTime=it;
ObjectServer objectServer = Db4o.openServer(fileName,port);
connectionQueue = new ConcurrentLinkedQueue<ObjectContainer>();
for (int i = 0; i<minConn; i++) {
connectionQueue.offer(objectServer.openClient());
}
}
/**
* get connection
* @return ObjectContainer
* @throws ConnectionTimeoutException
* @throws InterruptedException
*/
public static synchronized ObjectContainer getConnection() throws ConnectionTimeoutException{
long expiration = System.currentTimeMillis() + idelTime;
while (connectionQueue.isEmpty())
{
if (expiration < System.currentTimeMillis())
{
throw new ConnectionTimeoutException("connection timeout!");
}
}
ObjectContainer objectContainer = connectionQueue.poll();
return objectContainer;
}
/**
* release connection
* @return ObjectContainer
* @throws InterruptedException
*/
public static synchronized void releaseConnection(ObjectContainer objectContainer) {
connectionQueue.offer(objectContainer);
}
/**
* destroy connection
*
*/
protected static void destroy() {
while (connectionQueue.iterator().hasNext()){
ObjectContainer objectContainer = connectionQueue.poll();
objectContainer.close();
}
}
}
超时异常类:
package com;
public class ConnectionTimeoutException extends Exception{
public ConnectionTimeoutException()
{
}
public ConnectionTimeoutException(String s)
{
super(s);
}
}
XML 配置文件,从上到下依次是,数据库文件名、端口、初始连接数、等待时间:
<?xml version="1.0" encoding="utf-8"?>
<config>
<fileName>auto.yap</fileName>
<port>1010</port>
<minConn>10</minConn>
<idelTime>1000</idelTime>
</config>
web.xml 用于初始化的时候加载:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>ConnectionPoll</servlet-name>
<servlet-class>com.ConnectionPollServlet</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/poolConfig.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
数据库文件和参数配置文件都放在 WEB-INF 文件夹下。这个连接池还未实现 maxConn(最大连接数)和对多数据库文件的支持以及日志等。
请注意!引用、转贴本文应注明原作者:Rosen Jiang 以及出处:http://www.blogjava.net/rosen
分享到:
相关推荐
http://www.db4o.com db4o的官网,可下载最新版本,jar包在项目的database目录下,若构建路径报错请重新添加
对象数据库db4o的示例程序,对象数据库db4o, 对象数据库db4o
db4o8.0以及db4o中文操作指南
db4o 是一个开源的纯面向对象数据库引擎,对于 Java 与 .NET 开发者来说都是一个简单易用的对象持久化工具,使用简单。同时,db4o 已经被第三方验证为具有优秀性能的面向对象数据库, 下面的基准测试图对 db4o 和...
描述了db4o的信息要点和使用指南,讲述了一些特殊类,及其基本的使用
db4o ,net db4o ,net db4o ,net db4o ,net
For the fastest start with db4o please work through the tutorial, available in different formats in the following folder: ./doc/tutorial/ If you are working with db4o for Java, it is recommended...
db4o .net2.0 db4o .net2.0db4o .net2.0 db4o .net2.0db4o .net2.0
可以查看、删除DB4O数据库中的数据,支持*.yap、*.db、*.data等DB4O数据库
DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包
db4o最后发布的版本,包含全部源码、jar包,eclipse下的对象查看插件、全部说明文档等。
该资源为 db4o 之旅 系列文章: 1.介绍了面向对象数据库 db4o 的基本特性,并且与传统关系型数据库以及 OR 映射技术做了比较分析,读者可以体验到 db4o 的全新的面向对象存储的理念,并且给出了性能测试数据。 2....
DB4O 介绍信息.有兴趣的可以看看,了解一下.
非常好的Db4o资料,包括Db4o的七章内容详细介绍及相关的论文。
《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.
本资料转自网上,仅供学习DB4O开发教程使用
DB4O 8.0 Object Manager Enterprise 对象浏览器,db4o-8.0-tutorial.pdf
db4o 是一款开放源码对象导向数据库,能使 Java 和 .NET 开发人员不但大幅减低开发时间和成本, 同时能带来前所未有的效能. 另外, db4o 独有的对象导向数据库引擎能应用于免数据库管理人的流动装置或桌面平台, 套装...
db4o 权威指南 pdf 非常好
描述了DB4O的基础知识,同时其中还包含有更多的DB4O复制系统信息的链接地址.