- 浏览: 80919 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
neptunecai:
2.创建nutch2.1的编译环境 这部分能详细些吗?比如:T ...
Nutch2.1 in eclipse
首先由于项目的关系需要使用IBM的Rational Assert Manager做ROA的资源存储。所以需要编写一个队RAM进行池化的东西。大致实现类似JDBC下DBCP的功能。当然这里记录下的只是利用pool进行简单池化,并没有添加其他额外的功能。后期在使用中可能会增强该方法的功能。
首先列出该池化实现的需要jar:
junit-4.8.2.jar
log4j-1.2.16.jar
commons-pool-1.6.jar
com.ibm.ram.common_7.5.1.v20110224.jar
ramclient-ant.jar
ramclient.jar
首先pool中主要有三个接口:ObjectPool,ObjectPoolFactory和PoolableObjectFactory。这一组接口是基于Object的,而相对的还有一组也是三个接口就是基于KeyObject,底层使用Map实现。这里我们不需要使用Map的这种数据结构,所以只选择了Object讲解。
而ObjectPool接口implement后,主要就是用于实现池存储的功能。
ObjectPoolFactory这个接口主要是用于池的创建。当需要批量创建配置相同的池时,可以实现该工厂接口去批量穿件ObjectPool。
PoolableObjectFactory这个接口主要就是对我们需要池化的对象的创建,销毁,挂起,和激活等操作的管理工厂。
而pool包中,已经implement了以上接口实现了部分类。我们只需要通过继承那些类,稍作添加一些功能和重写一些方法即可。这种方式也是最简单实用的方式。不用自己去实现一些存储的实现。
而这里对于Object的,有genericObject和stackObject。两者只是存储的方式不同而已。前者使用arraylist实现,后者使用stack实现。本人选择arraylist实现的genericObject系列。作为池子的父类。
简简单单就可以对对象进行池化了。
由于这里我们只使用一个池子,所以不使用池子创建的工厂。就再实现一个对象的创建销毁工厂即可。因为这里我们需要使用的功能很简单,所以只是继承了BasePoolableObjectFactory类就可以了。
而对象工厂如果每次都去创建的话,会比较麻烦,而如果写成单例的话,创建出来的RAMSession会不大好管理,所以创建了一个专门用于从池中获取RAMSession进行管理的对象。并用单例模式进行创建。单例模式使用的是bob lee的单例模式。
最后就是BaseConfig和LoadObjectPoolConfig两个配置进行读取类的编写就可以了。这里就不附上代码了。详情请参考附件。
首先列出该池化实现的需要jar:
junit-4.8.2.jar
log4j-1.2.16.jar
commons-pool-1.6.jar
com.ibm.ram.common_7.5.1.v20110224.jar
ramclient-ant.jar
ramclient.jar
首先pool中主要有三个接口:ObjectPool,ObjectPoolFactory和PoolableObjectFactory。这一组接口是基于Object的,而相对的还有一组也是三个接口就是基于KeyObject,底层使用Map实现。这里我们不需要使用Map的这种数据结构,所以只选择了Object讲解。
而ObjectPool接口implement后,主要就是用于实现池存储的功能。
ObjectPoolFactory这个接口主要是用于池的创建。当需要批量创建配置相同的池时,可以实现该工厂接口去批量穿件ObjectPool。
PoolableObjectFactory这个接口主要就是对我们需要池化的对象的创建,销毁,挂起,和激活等操作的管理工厂。
而pool包中,已经implement了以上接口实现了部分类。我们只需要通过继承那些类,稍作添加一些功能和重写一些方法即可。这种方式也是最简单实用的方式。不用自己去实现一些存储的实现。
而这里对于Object的,有genericObject和stackObject。两者只是存储的方式不同而已。前者使用arraylist实现,后者使用stack实现。本人选择arraylist实现的genericObject系列。作为池子的父类。
public class RAMObjectPool extends GenericObjectPool<RAMSession> { public RAMObjectPool() { super(); } public RAMObjectPool(PoolableRAMObjectFactory factory) { super(factory); } public RAMObjectPool(PoolableRAMObjectFactory factory,Config config) { super(factory, config); } @Override public RAMSession borrowObject() throws Exception { return borrowObject(); } @Override public void invalidateObject(RAMSession obj) throws Exception { invalidateObject(obj); } @Override public void returnObject(RAMSession obj) throws Exception { returnObject(obj); }
简简单单就可以对对象进行池化了。
由于这里我们只使用一个池子,所以不使用池子创建的工厂。就再实现一个对象的创建销毁工厂即可。因为这里我们需要使用的功能很简单,所以只是继承了BasePoolableObjectFactory类就可以了。
public class PoolableRAMObjectFactory extends BasePoolableObjectFactory<RAMSession> { private static Logger logger = Logger.getLogger(PoolableRAMObjectFactory.class); private String url = null; private String userId = null; private String userPwd = null; public PoolableRAMObjectFactory(String ramURL, String ramUserID, String ramPassword) { url = ramURL; userId = ramUserID; userPwd = ramPassword; } /** * create a RAMSession * @return * @throws Exception */ @Override public RAMSession makeObject() throws Exception { // Create a connection to Rational Asset Manager RAMSession session = new RAMSession(url,userId, userPwd); if(logger.isDebugEnabled())logger.debug("obj is created"); return session; } /** * * @param obj * @return */ @Override public boolean validateObject(RAMSession obj) { return true; } @Override public void destroyObject(RAMSession obj) throws Exception { if(obj!=null) { if(logger.isDebugEnabled())logger.debug("obj is destroyed"); obj.release(); obj = null; } } @Override public void activateObject(RAMSession obj) throws Exception { } @Override public void passivateObject(RAMSession obj) throws Exception { if (obj!=null) { if(logger.isDebugEnabled())logger.debug("obj is cleared"); obj.clear(); obj = null; } } }
而对象工厂如果每次都去创建的话,会比较麻烦,而如果写成单例的话,创建出来的RAMSession会不大好管理,所以创建了一个专门用于从池中获取RAMSession进行管理的对象。并用单例模式进行创建。单例模式使用的是bob lee的单例模式。
public class RAMSessionManager { private static Logger logger = Logger.getLogger(RAMSessionManager.class); private RAMObjectPool objectPool = null; private ThreadLocal<RAMSession> localSession = new ThreadLocal<RAMSession>(); private RAMSessionManager() { GenericObjectPool.Config config = null; Properties properties = BaseConfig.load(); String ramURL = properties.getProperty("ramURL"); String ramUserID = properties.getProperty("ramUserID"); String ramPassword = properties.getProperty("ramPassword"); try { config = LoadObjectPoolConfig.load(properties.getProperty("poolConfigURL")); } catch (Exception e) { config = null; } if(config==null) { objectPool = new RAMObjectPool(new PoolableRAMObjectFactory(ramURL, ramUserID, ramPassword)); } else { objectPool = new RAMObjectPool(new PoolableRAMObjectFactory(ramURL, ramUserID, ramPassword),config); } printDebugInfo(); } static class RAMSessionHolder { public static RAMSessionManager instance = new RAMSessionManager(); } public static RAMSessionManager getInstance() { return RAMSessionHolder.instance; } /** * create session * @return * @throws Exception */ public RAMSession createSession() throws Exception { RAMSession obj = objectPool.borrowObject(); if(obj!=null) { printDebugInfo(); localSession.set(obj); } else { throw new NullPointerException("RAMSession is null from pool!"); } return obj; } /** * if created Session get it, else create Session * @return * @throws Exception */ public RAMSession openSession() throws Exception { RAMSession obj = localSession.get(); if(obj==null) { obj = createSession(); } return obj; } /** * close Session * @param obj * @throws Exception */ public void closeSession(RAMSession obj) throws Exception { if(obj!=null) { objectPool.returnObject(obj); printDebugInfo(); } } private void printDebugInfo() { if (logger.isDebugEnabled()) { logger.debug("Active number : "+objectPool.getNumActive()+"\t Idle number : "+objectPool.getNumIdle()); } } }
最后就是BaseConfig和LoadObjectPoolConfig两个配置进行读取类的编写就可以了。这里就不附上代码了。详情请参考附件。
- PoolPro.zip (3.3 MB)
- 下载次数: 5
发表评论
-
jetty 对请求头的限制
2014-02-13 14:30 5589当浏览器发起请求时 出现http code 413 问题 fu ... -
java 最基础的设置介绍
2013-04-15 23:05 1238用java不长不短快5年了,最近在看一些基础的书籍,也想起很久 ... -
Hessian 初体验
2013-03-27 17:36 1156Hessian 官网:http://hessian.cauch ... -
Nutch2.1 in eclipse
2013-03-10 00:22 9409Nutch2.1 in eclipse 主要目的: 1. 将 ... -
LDAP connection issue
2012-10-23 16:25 1697Problem1: Sometimes we can not ... -
restlet2.0学习——请求超时设置
2012-09-26 11:01 2298一般,我们在请求一个rest service的时候,总是希望可 ... -
[转载]checkStyle使用手册
2012-08-23 20:28 6827Checkstyle是SourceForge下的一个项目,如名 ... -
[转载]高性能JAVA开发之内存管理
2012-08-13 21:53 1312这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题 ... -
[转载]How to write LDAP search filters
2012-08-10 10:57 1389This document outlines how to g ... -
restlet2.0学习(extend)-restlet日志信息写入log4j中
2012-08-07 15:32 4008使用过restlet的人都知道,restlet使用的是JDK的 ... -
log4j级别输出
2012-08-03 11:12 4277我们知道: log4j.logger.XX cover ==& ... -
log4j配置
2012-05-30 11:36 1397log4j.rootLogger 根路径下的所有logger输 ... -
Restlet2.0学习——简单WebApp多Application与表单提交
2012-05-23 23:16 3532之前我们提到过简单的WebApp实现,使用的是一个applic ... -
Restlet2.0学习——文件路径访问
2012-05-22 14:42 1199由于就是官方的实例照搬了一下,简单尝试没有问题。就先把代码贴出 ... -
Restlet2.0学习——文件路径访问+BASIC认证
2012-05-22 14:38 1730这篇主要是让我们学习对于一些静态页面如何更加简单有效的去访问他 ... -
Restlet2.0学习——简单WebApp实现
2012-05-21 22:09 6492由于自己最近正在学习R ... -
HTMLPOST和GET编码问题(深入篇)
2011-07-07 02:12 11366浏览器 IE/FireFox -------——----> ...
相关推荐
将双口RAM分为简单双口RAM和真双口RAM。 简单双口RAM只有一个写端口,一个读端口。 真双口RAM分别有两个写端口和两个读端口。 无论是简单双口RAM还是真双口RAM,在没有读...
3E系列XC3S500E)为例详细介绍一下双口RAM的IP核配置流程,说到这里还不得不提一个有意思的事,Xilinx的双口RAM是真的双口RAM,而Altera的双口RAM则是两片RAM背靠背模拟实现的,不过Xilinx内部的时钟管理是DLL而...
用计数器生成的输出作为地址的同时作为RAM的输入数据。写入到92时,就转为读出。读出偶数地址的数据,也即读出了写入的偶数(输出2的倍数)。
此程序是用verilog编写的RAM模块,各种信号都很全,已经通过仿真验证。
VHDL实现双口RAM的设计,程序经过测试。
使用vivado软件中的ram的IP核实现真双口ram的仿真,向ram中设定的地址读写数据,读写操作只用了A口
DSP EMIF与FPGA双口RAM高速通信实现.pdf
Verilog HDL乒乓RAM工程实现
采用RAM实现计数器及FPGA功能:用一个10×8的双口RAM完成10个8位计数器,计数器的初值分别为1~10,时钟频率为1MHz,计数器计数频率为1Hz。用FPGA开发板上的按键作为计数器计数值的输出选择控制,数码管(或led)作为...
利用Verilog 实现双口RAM 的源代码。
将同步fifo和双口ram合二为一,在fifo先进先出的基础上实现ram的寻址功能。
STM32外扩RAM做变量定义与内部RAM做堆栈的设置[借鉴].pdf
FPGA实现双口arm的读写,详细代码介绍,注释,零基础也能收获
这是关于单端口RAM的VHDL程序代码, nut_spram --rtl 这是源代码 --sim 这是modelsim仿真目录
基于RAM7的简易电子琴设计,s3c44b0x的开发板上
单片机的C语言实现的对RAM进行测试的C语言的源代码。可供单片机开发人员验证RAM时参考。
基于FPGA的双口RAM实现及应用,采用FPGA技术构造双口RAM,实现高速信号的采集。
用块RAM实现卷积交织解交织,fpga的实现有很大指导意义
RAM ,IFFO实现字节的存储器设计,经过验证