1BeetleJ2EEApplicationFramework开发指南(Version1.4.1)Copyright©2001-2009BeetleSoft,ALLRIGHTSRESERVED.甲壳虫软件版权所有网站:邮件:yuhaodong@gmail.com2目录BJAF概述5BJAF是什么5运行环境要求5持久层数据访问6数据源配置7数据存取11单表操作器12查询操作器19更新操作器22存储过程操作器23唯一标识生成组件26数据库分页查询组件28复杂条件组合查询器31DAO模式支持33什么是DAO33模式使用33本地存储器37WEB表示层45WEB框架配置46控制器48控制器介绍48配置控制器50标准视图控制器53非标准视图控制器56虚拟控制器57文件上传控制器58Ajax控制器62页面绘图控制器65文档视图控制器67多动作控制器70视图显示74标准JSP视图743视图配置75标准视图Model数据解析76freemarker模板支持79页面布局80数据绑定与校验81页面数据绑定81页面数据校验82WEBSERVICE开发84请求动态缓存功能88AOP横切编程89非Ajax横切89Ajax横切93其它功能与特性96Web应用启动/关闭接口支持96防止表单重复提交97防止手工URL绕过验证进行请求访问98设置视图的缓存机制99页面验证码支持99特定请求并发控制100错误处理视图101控制器、视图及两者引用关系分析102WEB应用零配置编程104业务层107业务层介绍107COMMAND框架108框架模型108使用示例112DELEGATE框架116横切编程119编程模型119使用示例123异步消息框架124SERVICE服务组件1244Service界定124Service编程124服务程序开发124简介124应用程序模块125线程的简化编程模型129子程序及其执行方式132子程序说明示例132执行方式说明及示例134简易锁140定时计划任务141远程通信模块142CORE层146资源管理146公共配置资源属性147JNDI资源查找149日志组件151邮件发送组件153常见设计模式组件154责任链设计模式154观察者设计模式158简单缓存器160队列/堆栈160常用工具类161BJAF应用部署162WAR应用截图163EAR应用截图1645BJAF概述当前J2EE技术虽然说十分成熟,但可惜的是在实际中很多采取J2EE技术开发的信息系统效果不尽人意,其投资与回报往往令人失望。为了解决J2EE开发领域中所遇到的各种难题,市场上涌现了不少J2EE应用开发框架,BJAF甲壳虫J2EE应用框架便是其中的优秀一员。BJAF对J2EE体系结构中各层次的技术进行了透明的封装,为开发人员提供了一套灵活缩放、高可靠、可扩展、高性能的J2EE企业级应用开发的解决方案。在本开发指南中,我们会向读者展现和介绍BJAF框架中各个功能模块及其具体的技术细节,以便读者使用BJAF框架快速投入具体项目开发中。BJAF是什么BJAF是甲壳虫J2EE应用框架(BeetleJ2EEApplicationFramework)的简写,它并不是一个可以即时看见和运行的应用系统,它为构建于J2EE之上的应用系统定义了一个固定而有效的设计开发框架,简化J2EE应用,尤其加速了J2EE应用的开发过程。BJAF的最终目标是为开发人员提供一个填空式的开发框架。让开发人员在BJAF架构下,只需关注编写和具体业务逻辑相关的程序,而将业务无关的需求(非功能需求,non-functionalrequirement)交给BJAF来完成。图1-1BJAF整体架构运行环境要求BJAF要求使用JDK1.4或以上。6持久层数据访问在J2EE应用中,持久层负责企业资源持久化处理。这些企业数据源包括:文件系统数据、邮件服务器、企业遗留应用及数据库管理系统(DBMS)等等。关系数据库管理系统(RDBMS)又是其中最主要、最重要、应用最为广泛的数据源,对其数据访问的策略将是决定一个J2EE应用成败的关键因素。因而,BJAF框架在持久层重点关注是RDBMS数据存取的解决方案,并实现了一个基于JDBC数据存取框架。与Hibernate、JPA等O/R映射框架不同,它的设计理念脱胎于微软的ADO数据存取框架,它关注的是数据存取的效率、实用和易用性。它具备以下主要功能特征:封装JDBC低级API,类似于微软的ADO框架,结构简单、便于开发、调试和维护。支持数据的批量更新,支持数据库存储过程的操作,支持标准化的结果集处理。预编译SQL语句处理。支持单个数据表CRUD(create增、retrieve查、update改、delete删)等方便操作,无需编写SQL语句。支持结果集与值对象的自动装配。可动态配置数据源,支持通过JNDI服务J2EE容器DataSource,框架本身自带数据源。无须依赖J2EE容器,支持数据库连接池,支持XA数据源。支持常见数据库(如:oracle、sqlserver、sybase、mysql等)的无状态数据分页查询。支持数据库Sequence特性,提供自己维护序列的接口。支持DAO设计模式。保证数据访问对象线程安全,防止并发访问危及数据完整性。高速缓存只读数据,提高系统性能。其框架组件结构示意图如下:图2-1数据存取框架组件示意图从上图可知,BJAF数据存取框架与RDBMS关系数据库系统交互主要提供三大组件:7Access数据访问操作组件,包括:TableOperator单表操作器、QueryOperator查询操作器、UpdateOperator更新操作器、ProcOperator存储过程操作器。Sequence序列号(唯一号)生成器组件。Pagination分页查询器组件。其中,查询结果统一由RsDataSet结果集处理器负责处理;Datasource数据源组件负责协调各种不同数据库访问方式;ConnectionFactory组件负责管理数据库连接的产生和销毁。最后,结合DAO设计模式思想,统一通过DAO组件把具体的数据访问接口暴露给用户。数据源配置在进行数据库编程,首要问题是解决数据源的问题。BJAF数据存取框架支持多种数据源访问形式。主要体现为J2EE应用服务器容器数据源、开发调试数据源和BJAF框架自带数据源3种情形:J2EE容器数据源像WebLogic、JBoss、WebSphere等J2EE应用服务器都有各自的标准数据源的实现,对这些J2EE容器,BJAF框架提供了标准的JDNI方式来访问其数据源。而且,在生产环境,如果应用部署在J2EE容器下,那么我们建议采用J2EE容器本身的数据源。开发调试数据源开发调试数据源是框架为了在IDE环境下方便程序调试而建立的单连接数据源。框架自带数据源BJAF针对没有J2EE数据源容器的情况,实现了以下3种数据源:自带数据源种类说明DriverPooldriver本地驱动连接池,框架自实现,功能简单但性能优秀,不支持XA;便于开发测试;开发本地应用,建议采用GenePool实现javax.sql.DataSource接口。XaPool实现javax.sql.XADataSource接口,支持分布式事务。ProXoolProXool普通连接池,性能优秀,较流行自实现数据源如果觉得BJAF框架提供现有数据源不满足要求,可以自己定制开发一个数据源(或自己写代码集成其它第三方数据库连接池),BJAF对外提供了IConnPool接口,开发人员只要编写其实现类,然后把这个实现在DataSources标签里面的pool-imp值注册一下就可以了。数据源统一在项目工程config目录下DBConfig.xml文件中配置。其定义格式如下:8图2-2DBConfig.xml文件格式?xmlversion=1.0encoding=UTF-8?ConfigAtWork!--1-使用J2EE容器数据源;2-使用本框架自带数据源;3-使用调试数据源--itemname=DATASOURCE_USE_FLAGvalue=2/!--框架序列号实现类型1-通用实现;2-Oracle实现;3-DB2实现;4-POSTGRESQL实现;10-其它--itemname=SEQUENCE_IMP_TYPEvalue=1/!--[使用分页的数据库标记,分页实现会根据此标记自动匹配相应数据库的实现。]1-oracle;2-sqlserver;3-mysql;4-sybase;5-db2;6-PostgreSql;7-InterBase(Firebird)--itemname=PAGINATION_DBMS_FLAGvalue=2/!--系统数据源定义*必须拥有一个[SYSDATASOURCE_DEFAULT]默认数据源*对于使用J2EE容器数据源(DATASOURCE_USE_FLAG=1)的情况,value应为此数据源的JNDI名称;*对于使用本框架自带数据源(DATASOURCE_USE_FLAG=2)的情况,value随便定义(此时value值没有意义)*多个数据源的情况,直接定义多项就可以了,命名应该符合[SYSDATASOURCE_XXXX]的形式。--itemname=SYSDATASOURCE_DEFAULTvalue=sys_db_default/!--添加别的数据源--itemname=SYSDATASOURCE_XXXvalue=xxxx1//AtWork9DataSourcesDebugDBitemname=connection-urlvalue=jdbc:oracle:thin:@127.0.0.1:1521:yhdsid/itemname=driver-classvalue=oracle.jdbc.driver.OracleDriver/itemname=user-namevalue=scott/itemname=passwordvalue=tiger//DebugDBSYSDATASOURCE_DEFAULT!--数据库连接池类型1-driver[com.beetle.framework.persistence.access.datasource.DriverPool]本地驱动连接池,框架自实现,功能简单但性能优秀;2-general[com.beetle.framework.persistence.access.datasource.GenePool]普通连接池,为jotm库自带;3-jotm自带Xa连接池[com.beetle.framework.persistence.access.datasource.XaPool];4-ProXool[com.beetle.framework.persistence.access.datasource.ProxoolPool]普通连接池,性能优秀,较流行此属性在beetle1.3.x版本已经不推荐使用,用pool-imp属性代替保留此属性只为兼容以前版本;若此属性与pool-imp同时配置,以pool-imp属性为主--itemname=pool-typevalue=1/!--连接池实现具体实现类--itemname=pool-impvalue=com.beetle.framework.persistence.access.datasource.DriverPool/itemname=pool-minsizevalue=10/itemname=pool-maxsizevalue=15/!--测试sql语句,空隙时,有利于连接池检查连接状态--itemname=test-sqlvalue=selectCURRENT_DATE/