- 浏览: 673545 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
qq826928141:
longxing898 写道请教:使用jtds连接sql 20 ...
rapid-framework v3.9新版本发布 -
qq826928141:
美味人间 写道大哥,这个代码生成器怎么无法获取表和列的备注信息 ...
rapid-framework v3.9新版本发布 -
walle1027:
能发一下的测试代码吗?
rabbitmq性能测试 -
在世界的中心呼喚愛:
好东西,我就是参考这个!!!
iBatis3基于方言(Dialect)的分页 -
暂不存在:
怎么将{key}中的值替换掉
rapid系列:发布一款动态构造sql的工具: XsqlBuilder
在一些特殊的场合,我们可能需要使用异步的IO来大幅提高性能.
如日志信息收集.
而rapid-framework提供的异步IO类,使用生产者/消费者的多线程同步模式及Decorator模式,如同使用正常的IO一样,只需套多一层AsyncWriter/AsyncOutputStream,即可将普通IO转换为异步IO来使用.
打开一个异步IO后,将会在后台开启一个异步的线程来写数据.
异步的Writer使用:
BufferedWriter writer = new BufferedWriter(new AsyncWriter(new FileWriter("c:/debug.log"))); writer.write("xxxxx");
异步的OutputStream使用:
BufferedOutputStream output = new BufferedOutputStream(new AsyncOutputStream(new FileOutputStream("c:/debug.log"))); output.write("foo".getBytes());
在output使用完确保output被close,因为在close时,会强制异步线程将数据全部写入最终的targetOutput. 而调用flush()方法则是空操作,不会写数据.
异步IO使用tip(1):
可以将BufferedWriter/BufferedOutputStream的缓冲区加大,以减少写入次数.
异步IO使用tip(2):
在close异步IO时也放在一个单独的线程中,因为在实际应用场景中,close异步IO可能是十分耗时的操作.
AsyncWriter实现源码:
public class AsyncWriter extends Writer { private static Log log = LogFactory.getLog(AsyncWriter.class); private static final int DEFAULT_QUEUE_CAPACITY = 50000; private final static char[] CLOSED_SIGNEL = new char[0]; private Writer out; private DataProcessorThread dataProcessor; private boolean isClosed = false; private BlockingQueue<char[]> queue ; private AsyncExceptinHandler asyncExceptinHandler = new DefaultAsyncExceptinHandler(); private static long threadSeqNumber; private static synchronized long nextThreadID() { return ++threadSeqNumber; } private class DataProcessorThread extends Thread { private boolean enabled = true; private boolean hasRuned = false; DataProcessorThread() { super("AsyncWriter.DataProcessorThread-"+nextThreadID()); setDaemon(true); } public void run() { hasRuned = true; while (this.enabled || !queue.isEmpty()) { char[] buf; try { buf = queue.take(); } catch (InterruptedException e) { // e.printStackTrace(); continue; } if(buf == CLOSED_SIGNEL) { return; } try { out.write(buf); } catch (IOException e) { asyncExceptinHandler.handle(e); } } } } public AsyncWriter(Writer out) { this(out,DEFAULT_QUEUE_CAPACITY,Thread.NORM_PRIORITY + 1); } public AsyncWriter(Writer out,int queueCapacity) { this(out,queueCapacity,Thread.NORM_PRIORITY + 1); } public AsyncWriter(Writer out,int queueCapacity,int dataProcesserThreadPriority) { this(out,new ArrayBlockingQueue(queueCapacity),dataProcesserThreadPriority); } public AsyncWriter(Writer out,BlockingQueue queue,int dataProcesserThreadPriority) { if(out == null) throw new NullPointerException(); if(queue == null) throw new NullPointerException(); this.queue = queue; this.dataProcessor = new DataProcessorThread(); if(dataProcesserThreadPriority != Thread.NORM_PRIORITY) { this.dataProcessor.setPriority(dataProcesserThreadPriority); } this.dataProcessor.start(); this.out = out; } public AsyncWriter(Writer out,AsyncExceptinHandler handler) { this(out); setAsyncExceptinHandler(handler); } public void write(char[] buf, int offset, int length) throws IOException { synchronized (lock) { if(isClosed) throw new IOException("already closed"); try { queue.put(BufferCopyUtils.copyBuffer(buf, offset, length)); } catch (InterruptedException e) { throw new IOException("AsyncWriter occer error",e); } } } public void close() throws IOException { synchronized (lock) { try { isClosed = true; dataProcessor.enabled = false; if(queue.isEmpty()) { queue.offer(CLOSED_SIGNEL); } try { dataProcessor.join(); } catch (InterruptedException e) { //ignore } if(!dataProcessor.hasRuned) { dataProcessor.run(); } }finally { out.close(); } } } public void flush() throws IOException { } protected void finalize() throws Throwable { super.finalize(); if(!isClosed) { log.warn("AsyncWriter not close:"+this); close(); } } public void setAsyncExceptinHandler(AsyncExceptinHandler asyncExceptinHandler) { if(asyncExceptinHandler == null) throw new NullPointerException(); this.asyncExceptinHandler = asyncExceptinHandler; } }
rapid-framework网站:
http://code.google.com/p/rapid-framework
在线javadoc:
http://www.rapid-framework.org.cn/rapid-javadoc-v2.0.x/
发表评论
-
rapid-framework v3.9新版本发布
2010-07-13 21:17 13563hi,all 本次新版本发布最主要的更新内容 ... -
为velocity,freemarker提供jsp:include功能
2010-06-13 19:26 11456一.介绍 使用JSP的都知道jsp:include指令,可以 ... -
rapid-framework发布新版本: v3.5
2010-03-23 19:01 4526本次的主要更新内容是重新拾起flex,重整了flex插件. 而 ... -
扩展freemarker,velocity,实现模板的管道操作
2010-01-12 20:54 4652操作系统中有一个很重要的功能,就是可以使用管道,即将前一个应用 ... -
扩展Velocity,实现模板的继承
2009-12-28 12:00 5541与我之前的扩展freemarker类似,现新增加三个指令:bl ... -
扩展freemarker,实现模板的继承
2009-12-22 10:11 9279现扩展freemarker,新增加三个指令: @ ... -
spring REST中的内容协商(同一资源,多种展现:xml,json,html)
2009-12-21 14:14 21784接上一篇对spring rest的描述. ... -
在jsp中实现"类"的继承关系
2009-12-09 17:59 72691.介绍 使用过python django模板 ... -
rapid-framework发布v3.0 版本
2009-11-11 09:46 4959虽然spring 3.0及ibatis3还未发布,但rap ... -
iBatis3基于方言(Dialect)的分页
2009-10-19 09:29 23826(注:以下代码是基于ibatis3 beta4的扩展,ibat ... -
与Spring BlazeDS Integration相比,更简单的实现来调用spring bean
2009-10-12 11:15 4156注:后面使用SBI替代Spring BlazeDS In ... -
rapid-framework发布v2.5.0版本
2009-09-21 09:54 2297赶在国庆之前发布一个版本,庆祝国庆,:) 更新内 ... -
rapid-validation发布v1.5版本
2008-12-09 11:44 8237在线演示:http://www.rapid-framework ... -
rapid-framework v2.x路线图
2008-09-09 20:43 2711在1.0.2发布以后,很多同学认为切换至struts2 ... -
rapid-framework v1.0.x带控制条的演示视频放出
2008-08-20 13:28 2041很多同学报怨rapid-framework的演示视频太快,现在 ... -
rapid-framework发布v1.0.2版本
2008-08-13 11:39 2694该版本主要增加的相关文档导航,及一些模板及目录的调整 在线文档 ... -
动态构造sql利器:rapid-xsqlbuider 详细说明
2008-08-06 09:07 5058特性列表: 动态构造sql条件语句,提供sql拼接与使用占 ... -
很高兴大家下载rapid-framework
2008-08-04 11:42 7201看到有很多人下载,心情蛮爽的,这个就是做开源最高兴的吧. 大家 ... -
正式发布类似rails的框架:rapid-framework,文档补充中...
2008-07-29 09:11 5145基于spring,struts(struts2),hibe ... -
最适合实际开发需要的:<代码生成器>发布:rapid-generator-v1.0
2008-07-22 09:05 4303现阶段内置模板可以生成的包括: 可以生成java的hibern ...
相关推荐
Rapid-Framework 是一个基于Java的轻量级开发框架,它结合了Hibernate、Spring和SpringMVC等流行技术,旨在提供一站式解决方案,帮助开发者快速构建稳定且高效的Web应用。本文将深入探讨Rapid-Framework与Hibernate...
文件"rapid-framework-3.9.3.20100923"可能是该框架的一个特定版本,发布于2010年9月23日。这个版本可能包含了框架的所有源代码、文档、示例项目和必要的库文件,供开发者下载使用。开发者可以通过这个版本学习和...
在本案例中,我们关注的是名为`rapid-framework`的一个特定版本,即`1.3.0`,它以`.tar.gz`格式压缩。 `.tar.gz`是Linux和Unix系统中常用的文件打包和压缩格式,由`.tar`(归档)和`.gz`(Gzip压缩)组合而成。这种...
rapid-framework-3.9.3.20100923.jar
"rapid-framework-3.9.2.20100720.zip"是一个压缩包文件,其中包含了 Rapid-Framework 的特定版本,即3.9.2,发布于2010年7月20日。Rapid-Framework 是一个用于快速开发的应用框架,旨在提高开发效率并简化软件构建...
标题中的"rapid-framework 生成后的SSH三层架构"可能指的是一个快速开发框架,如Rapid Framework,它能自动生成SSH框架的基础结构,帮助开发者快速搭建项目。 Struts2是基于MVC设计模式的Web框架,它负责处理HTTP...
总结,"Rapid-Framework 3.9.3.20100923"是一个致力于提高开发效率的框架,包含了公共模块的源代码、可直接使用的库文件以及参考文档,提供了一整套工具来简化开发流程,增强代码复用,同时具备良好的性能和安全性。...
"Rapid-Framework v3.0.1.0" 是一个专为开发人员设计的高效、易用的代码生成框架,旨在加速应用开发过程,减少重复劳动,提高开发效率。这个框架的核心理念是通过模板引擎生成符合特定业务逻辑的源代码,让开发者...
"Rapid-Framework v3.0.1.0" 是一个专为开发人员设计的高效、易用的软件开发框架,旨在加速应用的构建过程,提高代码质量和开发效率。这个框架可能包含了各种组件和工具,使得开发者能够快速构建出稳定且可扩展的Web...
此压缩包中的"rapid-framework-common-3.9.3.20100923"可能包含了Rapid-Framework的公共库源代码,这些源码可能包含了各种通用工具类、常量定义、异常处理、日志记录、线程池管理等,这些都是开发中常用的基础设施。...
Rapid Framework Common是一个高效、便捷的快速开发框架,版本号为3.9.3,发布日期为2010年9月23日。这个开源项目旨在简化Java Web应用程序的开发过程,通过集成SSH(Struts2、Spring、Hibernate)框架,以及Ibatis...
"工具"标签则暗示rapid-framework是一个实用工具,能够辅助开发者快速完成Web应用的开发工作。 **文件名称解析:** "rapid-validation"可能是rapid-framework的一个子模块,专注于数据验证。在Web开发中,数据验证...
"最快速的Java代码生成器 Rapid-Generator"是一款专为Java开发者设计的高效工具,旨在提升开发效率,减少手动编写重复代码的工作量。这款工具以其快速、灵活和强大的自定义能力在Java开发社区中受到广泛关注。 ...
"standalone-rapid-generator-3.9.2.20100720.zip" 是一个用于快速生成代码的独立版本工具包,基于Rapid Framework。这个版本号表明它是2010年7月20日的一个特定构建,3.9.2是其主要版本标识。这个工具的主要目标是...
"Rapid-Validation完整包"是一个专注于前端表单验证的工具集合,包含了样例代码以及所有的CSS和JavaScript文件。这个工具旨在帮助开发者快速、高效地实现网页表单的数据验证,提高用户体验并确保数据的准确性和完整...
rapid-generator是一个生成器引擎,让你可以专注与代码生成器模板的编写, 可以生成如ibatis,ibatis3,hibernate,spring_mvc,struts2等等代码. 该项目是 Rapid Framework 框架的一部分。
《Rapid-Generator v3.9 代码生成器独立版》 在软件开发过程中,代码生成器是一个极其有用的工具,能够极大地提高开发效率并降低出错的...如果你正在寻找一款高效的代码生成工具,那么Rapid-Generator绝对值得尝试。
"最快速的Java代码生成器Rapid-Generator"是一款高效能的工具,旨在为开发者提供便捷的Java框架代码自动生成服务。它通过自动化的方式减少了手动编写重复性代码的工作量,提高了开发效率,使得开发者能够更专注于...
这部分文档详细介绍了RapidIO 4.0在输入/输出逻辑层面的具体要求和技术细节,包括但不限于: - **信号定义**:如何定义和传输信号。 - **数据路径**:数据如何在系统中流动。 - **错误检测与校正**:如何检测和纠正...
通过阅读"rapidio介绍"和"rapidio_3g"这两个文档,我们可以更深入地理解RapidIO的最新发展,例如3G版本可能引入的新特性和优化,以及如何将这些知识应用于实际的系统设计和实施中。学习RapidIO不仅可以提升对嵌入式...