JessMA(原名:Portal-Basic)是一套功能完备的高性能Full-StackWeb应用开发框架,内置可扩展的MVCWeb基础架构和DAO数据库访问组件(内部已提供了Hibernate、MyBatis与JDBCDAO组件),集成了Action拦截、Form/Dao/SpringBean装配、国际化、文件上传下载和页面静态化等基础Web应用组件,提供高效灵活的纯Jsp/ServletAPI编程模型,可完美整合Spring/Guice,支持ActionConvention,能快速开发传统风格和RESTful风格应用程序,文档和示例完善,非常容易学习。
JessMA官方网站:http://www.jessma.org
JessMA下载地址:http://www.oschina.net/p/portal-basic
JessMA在线示例:http://demo.jessma.org
JessMA在线API文档:http://www.jessma.org/doc
JessMA在设计之初就充分注重功能、性能与使用体验。JessMA主要特点:
★功能全面:内置稳定高效的MVC基础架构和DAO框架,支持Action拦截、FormBean/DaoBean/SpringBean装配和声明式事务,提供国际化、文件上传下载、缓存和页面静态化等常用Web组件,能满足绝大部分Web应用的需要。
★高度扩展:JessMA通过的plug-in机制可以灵活扩展,JessMA发布包中自带的jessma-ext-rest和jessma-ext-spring均以插件的形式提供,用户可根据需要加载或卸载这些插件。应用程序开发者也可以根据实际需要编写自定义插件来扩展JessMA。
★强大的整合能力:JessMA是一个Full-Stack框架,同时也是一个开放式框架,可以以非常简单的方式整合第三方组件。本开发手册会详细阐述如何在JessMA中整合Freemarker、Velocity、Urlrewrite、EHCache-Web、Spring、Hibernate和Mybaits等常用框架和组件。
★高性能:性能要求是JessMA的硬性指标,从每个模块的设计到每行代码的实现都力求简洁高效。另外,Portal-Basic并没有对JSP/ServetAPI进行过多封装,开发者仍然使用JSP/ServetAPI开发应用程序,没有过多的迂回,性能得到保证。
★优秀的使用体验:JessMA的设计目标之一是提供良好的开发体验,尽量减少应用程序开发者的工作,API的设计力求简单、完整、明确。同时,JessMA为应用开发提供了大量Util工具,用来处理应用程序开发过程中通常会遇到的一般性问题,进一步减少应用程序开发者的工作负担。
★平缓的学习曲线:学习使用JessMA只需掌握一定的CoreJava与JSP/Servlet知识,本开发手册会循序渐进阐述每个知识点,每个知识点都会结合完整的示例进行讲述,知识点之间前后呼应,确保学习者在学习时温故知新,融会贯通。
★完善的技术支持:除了提供完善的开发手册和示例代码以外,还提供博客和QQ群用于解答使用JessMA过程中碰到的所有问题,也可以访问JessMA官方网站了解更多资讯。
*JessMA总体架构
JessMA主要包括以下5个部分:
●基础应用框架
基础应用框架加载应用程序配置文件(默认:app-config.xml),监听应用程序的生命周期事件,并向上层应用发送应用程序启动和关闭通知,应用程序可以处理这些通知进行额外的初始化或清理工作。基础应用框架在org.jessma.app包中是实现。
●MVC框架
MVC框架加载MVC配置文件(默认:mvc-config.xml),通过前端控制器ActionDispatcher接收和解析所有的客户HTTP请求,然后交由相应的Action进行处理,最后生成相应的视图返回给客户端。MVC框架在org.jessma.mvc包中实现。
●DAO框架
DAO框架封装了所有的数据库访问操作,内置JDBC、Hibernate和MyBaits数据库访问组件以及Druid、Proxool、JNDI等连接池。DAO框架是可扩展的,用户可以通过扩展org.jessma.dao.AbstractFacade和org.jessma.dao.AbstractSessionMgr实现自己的数据库访问组件。DAO框架在以下包中实现:
org.jessma.dao
org.jessma.dao.hbn
org.jessma.dao.jdbc
org.jessma.dao.mybatis
●公共组件
公共组件提供多种通用功能帮助类(如:字符串处理、类型转换、分页算法、压缩/解压、加解密、邮件发送等),这些类与框架无关,可在任何应用程序中使用。公共组件在以下包中实现:
org.jessma.util
org.jessma.util.archive
org.jessma.util.cache
org.jessma.util.http
org.jessma.util.mail
●扩展插件
扩展差插件是基于JessMA核心框架基础上的功能延伸,不是JessMA的必要组件。可由应用程序开发人员根据需要自行定制。JessMA发行包中也自带了一些扩展插件(如:jessma-ext-spring和jessma-ext-rest)。
*JessMA应用程序依赖关系
基础应用框架、MVC框架和DAO框架都依赖于公共组件,其中基础应用框架同时依赖于DAO框架,因此,MVC框架和DAO框架能脱离JessMA单独使用(当然,要附带上公共组件)。例如:可以把MVC框架和DAO框架用于JessMA之外的其它Web项目;也可以把DAO框架用于非Web项目(如:Swing/SWT桌面应用)。
JessMA 3.3.1 更新:
1、增强国际化功能
1)支持设置应用程序器默认Locale和默认Bundle
A)如果不配置器默认Locale则使用系统原来的默认Locale
B)如果不配置默认Bundle,则默认Bundle为'res.application-message'
(参考:下面的MVC配置文件条目)
<i18ndefault-locale="en_US"default-bundle="com.bruce.res.application-message"/>
2、支持JSR303BeanValidation机制
1)如果开启了BeanValidation机制,应用程序可对由@FormBean注解的FormBean执行自动验证
2)@FormBean注解增加'validate()'和'groups()'两个属性,分别指示是否对FormBean执行自动验证,以及自动验证的验证组
3)如果自动验证成功则转入Action的validate()方法继续执行,否则会把错误信息写入Action的errors集合并跳转到Action的INPUT视图
4)应用程序还可以随时调用ActionSupport的validateBean()/validateBeanAndAddErrors()方法验证其它任何Bean
5)增加错误信息输出标签,支持多种方式和格式展示错误信息(参考:及其实现类org.jessma.tag.Error相关注释)
(参考:下面的MVC配置文件条目)
<bean-validation
enable="true"
bundle="com.bruce.res.validation-message"
validator="org.jessma.mvc.validation.HibernateBeanValidator"
/>
3、其它更新
1)org.jessma.ext.dao.*包中的类移到org.jessma.dao
2)应用程序默认Bundle由“res.message-resource”改为“res.application-message”
3)修改MVC主/从配置文件、应用程序配置文件以及REST配置文件的Sechema引用(参考MyJessMA测试工程)
4)更新开发手册《JessMAJavaWeb应用开发框架(v3.3.1)》
5)整理依赖库“jessma-lib”,删除多余的jar包4)事务属性由最外层的DAO方法指定,忽略所有内层DAO方法的事务属性
4、应用程序升级说明
1)JessMA3.2.x升级到JessMA3.3.1需要做以下工作:
A)把原来对org.jessma.ext.dao包的引用改为org.jessma.dao
B)把资源文件“res.message-resource”改为“res.application-message”或在配置项中指定
C)如有必要,修改MVC主从配置文件、应用程序配置文件以及REST配置文件的Sechema
D)如果要在Tomcat-6.0中开启BeanValidation机制,需要把“tomcat_7_to_6_lib”文件夹下的3个jar文件替换Tomcat-6.0的lib目录下的同名文件
2)Portal-Basic3.1.1及更早版本升级到JessMA3.3.1:(参考JessMA3.2.1的升级说明)
JessMA3.2.3更新:
1、增加Guice支持
1)增加Guice插件包jessma-ext-guice-3.2.3.jar用于整合Guice
2)Action通过@GuiceBean/@GuiceBeans注解声明GuiceBean
3)Action通过拦截器com.bruce.ext.guice.GuiceInjectFilter解析@GuiceBean/@GuiceBeans注解并注入GuiceBean
4)可以在GuiceBean中注入JessMADAO对象,从而能在Guice环境下使用JessMADAO子框架
5)示例工程MyJessMA增加Guice整合示例
(注:通常情况下,应用程序需要创建GuiceInjectFilter的子类并改写configModules()方法,用于定义Module的绑定规则)
publicclassMyGuiceInjectFilterextendsGuiceInjectFilter
{
@Override
protectedCollectionconfigModules()
{
Setmodules=newHashSet();
//加入第一个Module
modules.add(newModule()
{
@Override
publicvoidconfigure(Binderbinder)
{
//配置绑定规则
//......
}
});
//......
//加入第N个Module
modules.add(newModule()
{
@Override
publicvoidconfigure(Binderbinder)
{
//配置绑定规则
//......
}
});
returnmodules;
}
}
2、FormBean支持联级属性注入
1)@FormBean注解支持注入联级属性
2)org.jessma.util.BeanHelper的createBean(...)/setPropertiesOrFieldValues(...)系列方法支持联级装配Bean
(例如:下面的Form对应的Bean中,b、x和y为联级Bean)
b.c"value="...">
b.d"value="...">
x.y.z"value="...">
3、规范“嵌套DAO方法”调用规则(详情参考:开发手册第10.6节)
1)最外层的DAO对象必须由FacadeProxy创建
2)内层的DAO对象可以用new或FacadeProxy等任意方式创建
3)最外层的DAO方法作为一个事务单元,并且不会有嵌套事务
4)事务属性由最外层的DAO方法指定,忽略所有内层DAO方法的事务属性
4、其它更新
1)依赖库“jessma-lib”中的所有jar包更新到最新版本
2)依赖库“spring-lib”中的所有jar包更新到最新版本
3)增加Guice依赖库“guice-lib”
4)更新开发手册《JessMAJavaWeb应用开发框架(v3.2.3)》
5、应用程序升级说明
1)JessMA3.2.2升级到JessMA3.2.3:完全兼容,可直接升级
2)Portal-Basic3.1.1及更早版本升级到JessMA3.2.3:(参考JessMA3.2.1的升级说明)
JessMA3.2.2更新:
(注:本次更新的主要内容是升级DAO组件)
1、org.jessma.dao.hbn.HibernateSessionMgr支持自动扫描实体对象
1)实体对象用@Entity注解取代*.hbm.xml映射文件(同时也不必在hibernate.cfg.xml中配置‘mapping’)
2)app-config.xml中配置HibernateSessionMgr时,用第二个可选参数以正则表达式的格式指定实体对象所在包
(例如:实体对象位于‘com.bruce.<任意子包>.model’中)
com\.bruce\..+\.model
2、org.jessma.dao.mybatis.MyBatisSessionMgr支持自动扫描SQLMapper接口
1)不必在mybatis.cfg.xml中配置‘mapper’
2)app-config.xml中配置MyBatisSessionMgr时,用第三个可选参数以正则表达式的格式指定SQLMapper接口所在包
(例如:SQLMapper接口位于‘com.bruce.<任意子包>.mapper’中)
com\.bruce\..+\.mapper
3、所有JDBCSessionManager均取消‘isXml’配置参数,改为根据配置文件的扩展名自动识别配置文件类型
1)受影响的SessionManager:DruidSessionMgr、JdbcSessionMgr、JndiSessionMgr、ProxoolSessionMgr
4、org.jessma.dao.FacadeProxy增加方法executeCustomTransaction(...)支持执行自定义事务
1)JessMA的事务是DAO层事务,也就是说当外部调用某个DAO方法时,该方法作为一个事务单元执行。但在一些特殊情形下可能需要在DAO外部执行Service层事务(例如:事务需要调用多个DAO对象的多个方法),此时需要创建一个自定义事务(CustomTransaction),并调用FacadeProxy的executeCustomTransaction(...)来执行该自定义事务。
2)增加自定义事务相关接口:
A)CustomTransaction :自定义事务基接口
B)JdbcTransaction :JDBC自定义事务接口
C)MyBatisTransaction :MyBatis自定义事务接口
D)HibernateTransaction :Hibernate自定义事务接口
(示例)
publicstaticvoidserviceMethod()
{
//获取SessionMgr
HibernateSessionMgrmgr=(HibernateSessionMgr)AppConfig.getSessionManager("mgr-1");
//执行自定义事务
FacadeProxy.executeCustomTransaction(mgr,newHibernateTransaction(){
//实现自定义事务方法
@Override
publicvoidexecute(HibernateSessionMgrmgr)throwsDAOException
{
//创建dao1(可以使用FacadeProxy创建DAO对象)
MyDaoAdao1=newMyDaoA(mgr);
//创建dao2(可以使用‘newMyDaoB(mgr)’创建DAO对象)
MyDaoBdao2=Facade.create(MyDaoB.class,mgr);
//执行DAO方法
dao1.methodXxx();
dao2.methodYyy();
dao1.methodZzz();
dao2.methodNnn();
}});
}
5、扩大mvc-confing.xml中别名配置应用范围
1)支持在配置中引用前面定义的别名
(示例:下面配置中${index}的实际路径为'/jsp/test/index.jsp')
jsp_base"path="/jsp/test"/>
index"path="${jsp_base}/index.jsp"/>
2)允许在的'dispatch-file-path'和'dispatch-file-path'配置中使用别名
(示例:下面配置中'dispatch-file-path'的实际路径为'/jsp')
dispatch-file-path="${ac_path}"
/>
ac_path"path="/jsp"/>
6、其它更新
1)修改org.jessma.util.PackageHelper,加入包扫描相关方法
2)依赖库“jessma-lib”中的所有jar包更新到最新版本
3)更新开发手册《JessMA高效JavaMVC&REST开发框架(v3.2.2)》
4)增加一个JessMA项目模板工程:HelloJessMA
7、应用程序升级说明
1)JessMA3.2.1升级到JessMA3.2.2:完全兼容,可直接升级
2)Portal-Basic3.1.1及更早版本升级到JessMA3.2.2:(参考JessMA3.2.1的升级说明)
8、JessMA3.2.1历史更新:《JessMA3.2.1Release》