- 浏览: 121918 次
- 来自: ...
最近访客 更多访客>>
文章分类
最新评论
-
dwangel:
给messageSource设置属性
<property ...
Spring i18n的better practice(相对于appfuse) -
dwangel:
spring 的message tag有一个属性text,可以 ...
Spring i18n的better practice(相对于appfuse) -
sn201:
awk高级篇
有问题啊!有问题!有问题!有问题!有问题!
i ...
awk文本处理总结(入门,中级,高级) -
happy_javaboy:
...
Log4j日志管理系统简单使用说明
这几天花了点时间弄了个 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();
}
}
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();
}
}
}
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();
}
}
}
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);
}
}
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>
<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>
<!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(最大连接数)和对多数据库文件的支持以及日志等。
发表评论
-
浅析Java语言中两种异常的差别
2006-08-24 21:08 575Java提供了两类主要 ... -
JavaMail API详解
2006-09-04 17:12 559摘要:JavaMail API是读 ... -
JAVA操作Excel电子表格
2006-09-09 11:44 735只要有表格,就会有Microsoft Excel,用Micr ... -
让POI架起Java与Office之间的桥梁
2006-09-09 11:45 627本文将阐述如何用POI来 ... -
文件和目录操作的常用方法
2006-09-14 16:21 763package com.xgll.util; ... -
Java中正则表达式使用方法详解
2006-09-19 19:31 775如果你曾经用过Perl或任 ... -
在项目中,用到的关于时间操作的一些常用方法!!
2006-09-19 19:32 692package com.hoten.util; impor ... -
java的md5加密类
2006-09-29 11:35 643MD5算法是将数据进行不可逆加密的算法有较好的安全性,在国内如 ... -
代码动态生成利器ASM
2006-11-04 11:05 872作者:薛谷雨 作 ... -
native2ascii用法
2006-11-21 14:54 653中文资源转换成utf-8编码 native2ascii -en ... -
编写安全的Java代码
2006-12-29 20:47 614作者:Radic 来 ... -
常用 java File 操作类
2007-06-14 16:52 682业务常用,供大家学习: ... -
JAVA之精髓IO流
2007-06-20 21:49 449一. Input和Output 1. stream ... -
【此帖已结】常用数据库JDBC连接写法(整理)
2007-09-14 09:07 651为了方便大家查找,整 ... -
util包中Calendar和Properties用法:
2007-09-14 09:43 453import java.util.Calendar;impor ... -
JSP动作
2007-10-19 12:57 670JSP动作利用XML语法格式的标记来控制Servlet引擎的行 ... -
GBK和UTF-8的区别
2007-11-21 17:35 628GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字 ... -
Java多线程编程详解
2008-06-07 13:42 664一:理解多线程 多线程是这样一种机制,它允许在程序中并发执行 ... -
判定文件编码或文本流编码的方法
2008-06-16 14:44 856在程序中,文本文件经常用来存储标准的ASCII码文本,比 ... -
Content-Disposition的使用和注意事项
2008-10-30 16:07 925Content-Disposition的使用和注意事项 [转 ...
相关推荐
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复制系统信息的链接地址.