高效 Java Web 開發框架 JessMA v3.3.1 正式發佈

Project-JessMA.png

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%E6%80%BB%E4%BD%93%E6%9E%B6%E6%9E%

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應用程序依賴關係

JessMA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%

基礎應用框架、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配置文件條目)
<!--
default-locale:應用程序默認語言選項(默認:與當前操作系統一致)
default-bundle:應用程序默認Bundle(默認:res.application-message)
-->

<i18ndefault-locale="en_US"default-bundle="com.bruce.res.application-message"/>
2)支持基於URL、Cookie或瀏覽器語言選項的國際化方式
A)org.jessma.mvc.i18n.URLI18nFilter:基於URL請求參數的國際化攔截器
B)org.jessma.mvc.i18n.CookieI18nFilter:基於Cookie的國際化攔截器
C)org.jessma.mvc.i18n.BrowserI18nFilter:基於瀏覽器語言選項的國際化攔截器
D)JessMA默認基於Session實現國際化,但可以通過配置上述攔截器改爲相應的實現方式
E)上述攔截器的國際化屬性是基於RequestAttribute的,因此會屏蔽Session的國際化設置
F)上述攔截器可以組合使用,一般順序爲:URL->Cookie->Browser
(例如:下面同時配置了URL、Cookie和Browser三個國際化攔截器)
<action-filters>
<!--優先檢查客戶請求中是否帶有名稱爲'__locale'的請求參數-->
<filterclass="org.jessma.mvc.i18n.URLI18nFilter"/>
<!--然後檢查請求是否帶有名稱爲'__locale'的Cookie-->
<filterclass="org.jessma.mvc.i18n.CookieI18nFilter"/>
<!--最後根據客戶端瀏覽器的語言選項設置當前請求的語言屬性-->
<filterclass="org.jessma.mvc.i18n.BrowserI18nFilter"/>
</action-filters>

2、支持JSR303BeanValidation機制

1)如果開啓了BeanValidation機制,應用程序可對由@FormBean註解的FormBean執行自動驗證
2)@FormBean註解增加'validate()'和'groups()'兩個屬性,分別指示是否對FormBean執行自動驗證,以及自動驗證的驗證組
3)如果自動驗證成功則轉入Action的validate()方法繼續執行,否則會把錯誤信息寫入Action的errors集合並跳轉到Action的INPUT視圖
4)應用程序還可以隨時調用ActionSupport的validateBean()/validateBeanAndAddErrors()方法驗證其它任何Bean
5)增加錯誤信息輸出標籤<p:err/>,支持多種方式和格式展示錯誤信息(參考:<p:err/>及其實現類org.jessma.tag.Error相關注釋)
(參考:下面的MVC配置文件條目)
<!--
enable:是否開啓BeanValidation機制(默認:開啓)
bundle:驗證文本消息的Bundle(默認:res.validation-message)
validator:驗證器類(默認:org.jessma.mvc.validation.HibernateBeanValidator)
-->

<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”或在<i18n/>配置項中指定
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
protectedCollection<Module>configModules()
{
Set<Module>modules=newHashSet<Module>();
//加入第一個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)

<form>
<inputname="a"value="...">
<inputname="b.c"value="...">
<inputname="b.d"value="...">
<inputname="x.y.z"value="...">
</form>

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’中)

<managername="mgr-1"class="org.jessma.dao.hbn.HibernateSessionMgr">
<initialize-args>
<arg></arg>
<arg>com\.bruce\..+\.model</arg>
</initialize-args>
</manager>

2、org.jessma.dao.mybatis.MyBatisSessionMgr支持自動掃描SQLMapper接口

1)不必在mybatis.cfg.xml中配置‘mapper’
2)app-config.xml中配置MyBatisSessionMgr時,用第三個可選參數以正則表達式的格式指定SQLMapper接口所在包

(例如:SQLMapper接口位於‘com.bruce.<任意子包>.mapper’中)

<managername="mgr-2"class="org.jessma.dao.mybatis.MyBatisSessionMgr">
<initialize-args>
<arg></arg>
<arg></arg>
<arg>com\.bruce\..+\.mapper</arg>
</initialize-args>
</manager>

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中<result-path-aliases>別名配置應用範圍

1)支持在<result-path-aliases>配置中引用前面定義的別名

(示例:下面配置中${index}的實際路徑爲'/jsp/test/index.jsp')
<result-path-aliases>
<aliasname="jsp_base"path="/jsp/test"/>
<aliasname="index"path="${jsp_base}/index.jsp"/>
</result-path-aliases>

2)允許在<action-convention>的'dispatch-file-path'和'dispatch-file-path'配置中使用別名

(示例:下面配置中'dispatch-file-path'的實際路徑爲'/jsp')
<action-convention

dispatch-file-path="${ac_path}"
<!--其它配置(略)...-->
/>
<result-path-aliases>
<aliasname="ac_path"path="/jsp"/>
</result-path-aliases>

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》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章