【技巧分享】公布本人所属 Java 与 C++ 开源项目

    添加时间:2013-5-21 点击量:

      Java


    1、Java 全能高效 MVC & REST 开辟框架 Portal-Basic
    2、Java 日记切割清理对象 Log-Cutter


    C++
    1、通用高机能 Windows Socket 组件 HP-Socket
    2、Windows C++ 应用法度通用日记组件 VC-Logger




    一、Java


    1、Java 全能高效 MVC & REST 开辟框架 Portal-Basic


    Portal-Basic 是一套功能完全的高机能 Full-Stack Web 应用开辟框架,内置可扩大的 MVC Web 根蒂根基架构和 DAO 数据库接见组件(内部已供给了 Hibernate、MyBatis 与 JDBC DAO 组件),集成了 Action 阻碍、Form / Dao / Spring Bean 装配、国际化、文件上传和页面静态化等根蒂根基 Web 应用组件,供给高效灵活的纯 Jsp/Servlet API 编程模型,可完美整合 Spring,支撑 Action Convention,能快速开辟传统风格和 RESTful 风格应用法度,文档和示例完美,很是轻易进修。


      Portal-Basic 项目主页:http://www.oschina.net/p/portal-basic


    Portal-Basic在设计之初就充沛重视功能、机能与应用体验。Portal-Basic首要特点:


    ★ 功能周全:内置稳定高效的MVC根蒂根基架构和DAO框架,支撑Action阻碍、Form Bean / Dao Bean / Spring Bean装配和声明式事务,供给国际化、文件上传、缓存和页面静态化等常用Web组件,能满足绝大项目组Web应用的须要。


    ★ 高度扩大:Portal-Basic经由过程的plug-in机制可以灵活扩大,Portal-Basic公布包中自带的portal-basic-ext-rest和portal-basic-ext-spring均以插件的情势供给,用户可按照须要加载或卸载这些插件。应用法度开辟者也可以按照实际须要编写自定义插件来扩大Portal-Basic。


    ★ 强大的整合才能:Portal-Basic是一个Full-Stack框架,同时也是一个开放式框架,可以以很是简单的体式格式整合第三方组件。本开辟手册会具体论说如安在Portal-Basic中整合FreeMarker、Velocity、UrlRewrite、EHCache-Web、Spring、Hibernate和MyBaits等常用框架和组件。


    ★ 高机能:机能请求是Portal-Basic的硬性指标,从每个模块的设计到每行代码的实现都力求简洁高效。别的,Portal-Basic并没有对JSP/Servet API进行过多封装,开辟者仍然应用JSP/Servet API开辟应用法度,没有过多的迂回,机能获得包管。


    ★ 优良的应用体验:Portal-Basic的设计目标之一是供给杰出的开辟体验,尽量削减应用法度开辟者的工作,API的设计力求简单、完全、明白。同时,Portal-Basic为应用开辟供给了多量Util对象,用来处理惩罚应用法度开辟过程中凡是会碰到的一般性题目,进一步削减应用法度开辟者的工作肩负。


    ★ 平缓的进修曲线:平缓的进修曲线:进修应用Portal-Basic只需把握必然的Core Java与JSP/Servlet常识,本开辟手册会循序渐进论说每个常识点,每个常识点都邑连络完全的示例进行讲述,常识点之间前后呼应,确保进修者在进修时温故知新,融合贯通。


    ★ 完美的技巧支撑:除了供给完美的开辟手册和示例代码以外,还供给博客和QQ群用于解答应用Portal-Basic过程中碰着的所有题目。



         Portal-Basic 总体架构




         Portal-Basic 应用法度依附关系



    ----------------------------------------------------------------


    2、Java 日记切割清理对象 Log-Cutter


      Log-Cutter 是一个简单实用的日记切割清理对象。对于办事器的日常保护来说,日记清理是很是首要的工作,若是残留日记过多则严重浪费磁盘空间同时影响办事的机能。若是用手工体式格式进行清理,会花费太多时候,并且很多时辰难以满足实际请求。例如:如安在每个礼拜六凌晨3点把跨越 2G 大的日记文件进行切割,保存新的 100M 日记记录? 网上没有发明能满足本座请求的日记切割对象,是以花了一些闲暇时候本身写了一个。因为要在多个平台上应用,为了便利采取 Java 实现。本对象定名为 Log-Cutter,首要有以下特点:





      • 支撑 Linux、Mac 和 Windows 等所有常见操纵体系平台

      • 支撑号令行交互式运行

      • 支撑后台非交互式运行(Linux/MAC 下应用 daemon 过程实现,Windows 用体系 Service 实现)

      • 支撑两种日记清理体式格式(删除日记文件或切割日记文件)

      • 支撑对 GB18030、UTF-8、UTF-16LE、UTF-16BE 等常用日记文件类型进行切割(不会产生切掉半个字符的景象)

      • 高度可设备(法度履行周期、要删除的日记文件过期时候、要切割的日记文件阀值和保存大小等均可设备



















      Log-Cutter 项目主页:http://ldcsaa.googlecode.com




     二、C++


    1、通用高机能 Windows Socket 组件 HP-Socket


      HP-Socket 是一套通用的高机能 Windows Socket 组件包,包含办事端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛实用于 Windows 平台的 TCP 通信体系。HP-Socket 对通信层实现完全封装,上层应用不必存眷通信层的任何细节;HP-Socket 供给基于事务通知模型的 API 接口,能很是简单高效地整合到各类应用法度中;别的,为了让大师能更便利的进修 HP-Socket,特此精心建造了一个功能测试示例(Test Echo)和一个机能测试示例(Test Echo-PFM),用户可以经由过程这两个测试示例入手,敏捷把握组件的设计思惟和应用办法。


    通用性



    • 通信组件的独一职责就是接管和发送字节俭,绝对不克不及参与上层和谈解析等工作;

    • 与上层应用者解耦、互不依附,组件与应用者经由过程操纵接口和器接口进行交互,组件实现操纵接口为上层供给操纵办法;应用者实现器接口把本身注册为组件的 Listener,接管组件通知。是以,任何应用者只要实现了器接口都可以应用组件;另一方面,甚至可以本身从头写一个实现体式格式完全不合的组件实现给应用者调用,只要该组件遵从组件的操纵接口,这也是 DIP 设计原则的表现。







    可用性


      可用性对所有通用组件都是至关首要的,若是太难用还不如本身重头写一个来得便利。是以,组件的操纵接口和器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的首要办法均不跨越 5 个。别的,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不克不及干涉干与任何通信操纵,Socket 连接被抽象为 Connection ID,该参数作为连接标识供给给上层应用辨认不合的连接。


    高机能


      作为底层的通用组件,机能题目是必须推敲的,绝对不克不及成为体系的瓶颈。而另一方面,从实际出发,按照客户端组件与办事端组件的机能请求采取不合的 Socket 模型。组件在设计上充沛推敲了机能、实际应用情景、可用性和实现错杂性等身分,确保满足机能请求的同时又不会写得太错杂。做出以下两点设计决定计划:



    • 客户端:在零丁线程中实现 Socket 通信交互。如许可以避免与主线程或其他线程彼此干扰;I/O 模型选择 Event Select 通信模型。

    • 办事端:采取 Windows 平台效力高的 IOCP 通信模型;哄骗缓存池技巧,在通信的过程中,凡是须要频繁的申请和开释内存缓冲区,建树了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会紧缩缓存池;别的,组件的动态内存经由过程私有堆(Private Heap)机制分派,避免与 new / malloc 竞争同时又削减内存空洞。







    伸缩性


      可以按照实际的应用景象请求设置组件的各项机能参数(如:工作线程的数量、各类缓存池的大小、收发缓冲区的大小、Socket 队列的大小、Accep 派发的数量以及心跳搜检的间隔等)。


      HP-Socket 项目主页:http://ldcsaa.googlecode.com


    ----------------------------------------------------------------


    2、Windows C++ 应用法度通用日记组件 VC-Logger


      VC-Logger 是一个简单易用的 C++ 法度通用日记组件。设计时侧重推敲三个方面:


      功能: 本日记组件的目标是满足大多半应用法度记录日记的需求 —— 把日记输出到文件或发送到应用法度中,并不供给一些错杂但不常用的功能。本日记组件的功能包含:



    1. 把日记信息输出到指定文件

    2. 每日生成一个日记文件

    3. 对于 GUI 法度,可以把日记信息发送到指定窗口

    4. 对于Console应用法度,可以把日记信息发往标准输出 (std::cout)

    5. 支撑 MBCS / UNICODE,Console / GUI 法度

    6. 支撑动态加载和静态加载日记组件 DLL

    7. 支撑 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多个日记级别







      可用性: 本日记组件侧重推敲了可用性,尽量让应用者用起来感觉简便、舒心:



    1. 简纯真净:不依附任何法度库或框架

    2. 应用接口简单,不需错杂的设备或设置工作

    3. 供给 CStaticLogger 和 CDynamicLogger 包装类用于静态或动态加载以及操纵日记组件,用户无 需存眷加载细节

    4. 法度若是要记录多个日记文件只需为每个日记文件创建响应的 CStaticLogger 或 CDynamicLogger 对象

    5. 只需调用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等办法记录日记

    6. 日记记录办法支撑可变参数

    7. 日记输出格局:<时候> <线程ID> <日记级别> <日记内容>







      机能: 机能是组件是否值得应用的硬指标,本组件从设计到编码的过程都尽量推敲到机能优化:



    1. 支撑多线程同时发送写日记恳求

    2. 应用零丁线程在后台写日记,不影响工作线程的正常履行

    3. 采取批处理惩罚体式格式批量记录日记







      VC-Logger 项目主页:http://ldcsaa.googlecode.com




    CodeProject

    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: