版本:bbossgroups-3.5
官網:http://www.bbossgroups.com
項目部落格:http://yin-bp.iteye.com/
Sourceforge站點:http://sourceforge.net/projects/bboss/files/
Github站點:https://github.com/bbossgroups/bbossgroups-3.5
----------------------------------------------------------------------
本次版本的主要改進:
1.本版本及後續版本的源碼托管到 github
2.aop/ioc支援循環依賴注入功能,支援類似于C指針引用方式的對象屬性引用及任何對象内部局部屬性的引用,引用層級不受限制,bboss aop架構逐漸成為能夠做到該功能的少數幾個架構之一。
3.序列化機制支援複雜對象及對象之間關系(單向引用,雙向引用,樹結構,網狀結構)序列化和恢複功能,
使得bboss序列化工具成為少數幾個能夠實作完全序列化功能的工具之一。
4.全面改進bbossgroups系列元件中使用的java反射機制,支援asm 4.0,全面改進性能和易用性:
aop架構管理的業務對象、mvc控制器方法參數對象、标簽展示對象、持久層or mapping對象中屬性不再需要定義get/set方法即可完成值得注入和展示、綁定等功能
5.sourceforge 釋出檔案增加檔案
distrib.zip檔案,包含所有架構釋出的jars檔案目錄和架構完整的可運作的web應用bboss.war
更多的資訊如下:
一.bboss aop架構更新
o 修複IOC機制中三層及三層以上循環依賴注入引用關系無法正常解析的漏洞
o 為了和避免和官方jgroups包沖突,将bboss中的jgroups包路徑全部由org.jgroups改為bboss.org.jgroups
jg-magic-map.xml檔案名稱改為bboss-magic-map.xml
jg-protocol-ids.xml檔案名稱改為bboss-protocol-ids.xml
為了避免不必要的麻煩,jgroups.jar包名稱暫時沒有改,如果存在包名稱沖突使用者可根據實際情況進行修改名稱(一般不需要修改)
系統管理平台、應用支援平台、資料交換平台、請求服務平台等系統更新架構到3.5時需要注意,更新完畢後需要修改src-sys/com/chinacreator/remote/Utils.java檔案中的以下引用路徑:
import org.jgroups.Channel;
import org.jgroups.util.RspList;
為:
import bboss.org.jgroups.Channel;
import bboss.org.jgroups.util.RspList;
修改完畢後,将編譯好的類檔案更新到相應系統的system.jar包中。
o 改進ioc依賴注入機制,支援循環依賴注入功能(之前得版本不支援循環依賴注入),并且支援任何層面的對象引用,引用的定義為:
refid格式: 含義
1.attr:serviceid 根據服務辨別引用容器服務元件
2.attr:serviceid[0] 根據服務辨別及數組下标引用容器服務元件對應的下标為0對應的元素(容器服務元件類型為list,set,array三種類型)
3.attr:serviceid[key] 根據服務辨別及map key引用容器服務元件對應的索引為key對應的元素(容器服務元件類型為map類型)
4.attr:serviceid{0} 根據服務辨別及構造函數參數位置下标引用容器服務元件對應的下标為0對應的構造函數參數(容器服務元件為構造函數注入)
5.attr:serviceid->innerattributename 根據服務辨別及服務元件的屬性名稱引用容器服務元件屬性值
6.attr:serviceid->innerattributename[0] 根據服務辨別及服務屬性名稱以及屬性數組下标引用容器服務元件屬性中對應的下标為0對應的元素(容器服務元件類型為list,set,array三種類型)
7.attr:serviceid->innerattributename[key] 根據服務辨別及服務屬性名稱以及map key引用容器服務元件屬性對應的索引為key對應的元素(容器服務元件類型為map類型)
8.attr:serviceid->innerattributename{0} 根據服務辨別及服務屬性名稱對應屬性的造函數參數位置下标引用容器服務元件對應的下标為0對應的構造函數參數(容器服務元件為構造函數注入)
其中屬性的引用是不限制層級的
o 統一将rpc協定序列化機制切換到bboss的序列化機制
已經完成切換的協定:
http,webservice,netty,rmi,mina,jms
未完成的協定(暫不做改進):
jgroups
是以采用jgroups協定時,所有的參數資料都要實作序列化接口,其他協定則不需要
o 改進http協定和webservice rpc協定性能,改進反射機制
o ioc屬性注入中相應的屬性不再需要set方法
o 引進最新的bboss soa序列化機制,對于static,final,transient類型的屬性不進行序列化,對于添加了@ExcludeField的注解不序列化
需要序列化的字段不再需要get/set方法
---------------------------------------------------------------------
二.bboss mvc更新
------2012-2-7------------
o 集合類型(List,Map),如果沒有資料記錄,則直接傳回,修複沒有資料情況下傳回一條空記錄的問題
------2011-12-11------------
o 更新最新的bboss aop架構,控制器需要注入的業務元件不再需要set方法
o 改進以下注解,name或者value屬性不再是必須選項,如果沒有指定name屬性,則使用
方法參數名稱作為name屬性的值:
RequestParam
PathVariable
CookieValue
RequestHeader
Attribute
為了確定能夠正确擷取到mvc控制器方法的參數名稱,必須在編譯java代碼時保證在class檔案中生存java本地變量表
eclipse工具預設會生成,ant編譯工具也會生成。
同時除了PathVariable注解,以下注解不在是控制器方法參數的必須注解,如果沒有指定,基礎類型參數将直接用方法名稱從request中擷取相關屬性的值:
bboss中界定的基礎資料類型如下:
String.class,int.class ,Integer.class,
long.class,Long.class,
java.sql.Timestamp.class,java.sql.Date.class,java.util.Date.class,
boolean.class ,Boolean.class,
BigFile.class,
float.class ,Float.class,
short.class ,Short.class,
double.class,Double.class,
char.class ,Character.class,
byte.class ,Byte.class,
BigDecimal.class
------2011-11-2------------
o 改進jason轉換器,避免和檔案下載下傳轉換器的沖突
三.bboss persistent更新
o 解決連接配接池中無法查找到tomcat 6和weblogic 容器資料源的問題
o 解決sql server jtd驅動無法正确找到DB adaptor的問題
o PreparedDBUtil增加public void setBlob(int i, String x) throws SQLException 方法,用來直接向blob類型字段中存入字元串
o 修改TestLob測試用例,用來示範SQLExecutor/ConfigSQLExecutor元件向Blob和clob中插入字元串的方法:
@Test
public void testNewSQLParamInsert() throws Exception
{
SQLParams params = new SQLParams();
params.addSQLParam("id", "1", SQLParams.STRING);
// ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY
params.addSQLParam("blobname", "abcdblob",
SQLParams.BLOB);
params.addSQLParam("clobname", "abcdclob",
SQLParams.CLOB);
SQLExecutor.insertBean("insert into test(id,blobname,clobname) values(#[id],#[blobname],#[clobname])", params);
}
@Test
public void testNewBeanInsert() throws Exception
{
LobBean bean = new LobBean();
bean.id = "2";
bean.blobname = "abcdblob";
bean.clobname = "abcdclob";
SQLExecutor.insertBean("insert into test(id,blobname,clobname) values(#[id],#[blobname],#[clobname])", bean);
}
注意如果
public static class LobBean
{
private String id;
@Column(type="blob")//blob會通知持久層架構将屬性blobname的值作為資料庫blob字段類型進行存儲
private String blobname;
@Column(type="clob")")//clob會通知持久層架構将屬性blobname的值作為資料庫clob字段類型進行存儲
private String clobname;
}
中type分别為blobfile或者clobfile時,就必須要求字段的值類型為以下三種:
1.java.io.File
2.MultipartFile
3.InputStream
例如:
public static class LobBean
{
private String id;
@Column(type="blobfile")
private File blobname;
@Column(type="clobfile")
private File clobname;
}
o SQLExecutor/ConfigSQLExecutor元件增加單字段多記錄結果類型為List<String>的查詢功能,使用方法如下:
使用方法:
@Test
public void dynamicquery() throws SQLException
List<ListBean> result = SQLExecutor.queryList(ListBean.class,"select id from LISTBEAN");
System.out.println(result.size());
List<String> result_string = SQLExecutor.queryList(String.class,"select id from LISTBEAN");
System.out.println(result_string.size());
List<Integer> result_int = SQLExecutor.queryList(Integer.class,"select id from LISTBEAN");
System.out.println(result_int.size());
@Test
public void dynamicqueryObject() throws SQLException
ListBean result = SQLExecutor.queryObject(ListBean.class,"select id from LISTBEAN");
System.out.println(result.getId());
String result_string = SQLExecutor.queryObject(String.class,"select id from LISTBEAN");
System.out.println(result_string);
int result_int = SQLExecutor.queryObject(int.class,"select id from LISTBEAN");
System.out.println(result_int);
o 修複執行clob 檔案插入操作導緻空指針的問題
sql = "INSERT INTO CLOBFILE (FILENAME,FILECONTENT,fileid,FILESIZE) VALUES(#[filename],#[FILECONTENT],#[FILEID],#[FILESIZE])";
SQLParams sqlparams = new SQLParams();
sqlparams.addSQLParam("filename", file.getOriginalFilename(), SQLParams.STRING);
sqlparams.addSQLParam("FILECONTENT", file,SQLParams.CLOBFILE);
sqlparams.addSQLParam("FILEID", UUID.randomUUID().toString(),SQLParams.STRING);
sqlparams.addSQLParam("FILESIZE", file.getSize(),SQLParams.LONG);
SQLExecutor.insertBean(sql, sqlparams);
o 優化or mapping性能
o 更新最新的frameworkset-util.jar,持久層or mapping機制的bean的屬性不再需要get/set方法
o 将動态添加的資料源的removeAbandoned屬性設定為false
---------------------------------------------------------------
四.bboss taglib更新
o 更新最新的frameworkset-util.jar,cell标簽讀取的bean的屬性不再需要get方法
------2011-11-20------------
o 調整jquery-1.4.2.min.js的load方法支援數組參數的傳遞
o 調整pager.js的loadPageContent方法支援數組參數的傳遞
o 分頁參數傳遞支援map,bean中包含資料參數傳遞,支援數組參數傳遞,通過以下标簽實作:
params标簽:<pg:params name="userName" />
beanparams标簽:<pg:beanparams name="user"/>
如果要使用這兩個标簽,需要更新以下程式:
/WEB-INF/lib/frameworkset.jar
/include/jquery-1.4.2.min.js
/include/pager.js
同時需要檢查pager-taglib.tld中是否定義了一下params标簽和beanparams标簽:
<!--
功能說明:為分頁清單标簽中自動設定的超連結添加參數數組
-->
<tag>
<name>params</name>
<tagclass>com.frameworkset.common.tag.pager.tags.ParamsTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>id</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<name>name</name>
<required>true</required>
<name>encode</name>
</tag>
<!--
功能說明:為分頁清單标簽中自動設定的超連結添加參數,參數來自java對象屬性或者Map中鍵值對
<name>beanparams</name>
<tagclass>com.frameworkset.common.tag.pager.tags.BeanParamsTag</tagclass>
------2011-11-18------------
o 增加params,beanparams标簽
params:為分頁清單标簽中自動設定的超連結添加參數數組
beanparams:為分頁清單标簽中自動設定的超連結添加參數,參數來自java對象屬性或者Map中鍵值對
bean屬性可以指定com.frameworkset.common.tag.pager.IgnoreParam注解,beanparams标簽會忽略帶有
IgnoreParam注解的屬性
o 修改covert标簽空指針異常
-----------------------------------------------------------------
五.bboss util更新
o ClassInfo對象增加isprimary方法,辨別對應的類型是否是bboss定義的基礎資料類型範疇
o 增加擷取方法參數名稱的工具類LocalVariableTableParameterNameDiscoverer
擷取LocalVariableTableParameterNameDiscoverer的方法如下:
ParameterNameDiscoverer parameterNameDiscoverer = ClassUtil.getParameterNameDiscoverer();
擷取方法參數名稱的方法如下:
Method method = ClassInfo.class.getMethod("getDeclaredMethod", String.class);
String[] names = parameterNameDiscoverer.getParameterNames(method);
o 内置asm 4.0版本
六.bboss 序列化更新
o 引進序列化機制,對于static,final,transient類型的屬性不進行序列化,對于添加了@ExcludeField的注解不序列化
o 對象中序列化的字段不再需要get/set方法
o 支援複雜對象及對象之間關系序列化和恢複功能