欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

开源J2EE框架bbossgroups 3.5 发布

程序员文章站 2022-04-18 11:29:31
...
版本: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

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

本次版本的主要改进:

  • 本版本及后续版本的源码托管到 github
  • 改进ioc机制,支持循环依赖注入功能,支持类似于C指针引用方式的对象属性引用及任何对象内部局部属性的引用,引用层级不受限制,bboss aop框架逐步成为能够做到该功能的少数几个框架之一。
  • 序列化机制支持复杂对象及对象之间关系(单向引用,双向引用,树结构,网状结构)序列化和恢复功能,使得bboss序列化工具成为少数几个能够实现完全序列化功能的工具之一。
  • 全面改进bbossgroups系列组件中使用的java反射机制,支持asm 4.0,全面改进性能和易用性:aop框架管理的业务对象、mvc控制器方法参数对象、标签展示对象、持久层or mapping对象中属性不再需要定义get/set方法即可完成值得注入和展示、绑定等功能
  • sourceforge 发布文件增加文件distrib.zip文件,包含所有框架发布的jars文件目录和框架完整的可运行的web应用bboss.war
更多的信息如下:
   
一、bboss aop框架更新

●  为了和避免和官方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包中。

●  改进ioc依赖注入机制,支持循环依赖注入功能(之前得版本不支持循环依赖注入),并且支持任何层面的对象引用,引用的定义如下。

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对应的构造函数参数(容器服务组件为构造函数注入)
其中属性的引用是不限制层级的

●  统一将rpc协议序列化机制切换到bboss的序列化机制。已经完成切换的协议:http,webservice,netty,rmi,mina,jms;未完成的协议(暂不做改进):jgroups

因此采用jgroups协议时,所有的参数数据都要实现序列化接口,其他协议则不需要

●  改进http协议和webservice rpc协议性能,改进反射机制

●  ioc属性注入中相应的属性不再需要set方法

●  引进最新的bboss soa序列化机制,对于static,final,transient类型的属性不进行序列化,对于添加了@ExcludeField的注解不序列化
需要序列化的字段不再需要get/set方法

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

二、bboss mvc更新

------2012-2-7------------

●  集合类型(List,Map),如果没有数据记录,则直接返回,修复没有数据情况下返回一条空记录的问题

------2011-12-11------------

●  更新最新的bboss aop框架,控制器需要注入的业务组件不再需要set方法

●  改进以下注解,name或者value属性不再是必须选项,如果没有指定name属性,则使用方法参数名称作为name属性的值:RequestParam、PathVariable、CookieValue、RequestHeader、Attribute

为了确保能够正确获取到mvc控制器方法的参数名称,必须在编译java代码时保证在class文件中生成java本地变量表。eclipse工具默认会生成,ant编译工具也会生成。

同时除了PathVariable注解,以下注解不在是控制器方法参数的必须注解,如果没有指定,基础类型参数将直接用方法名称从request中获取相关属性的值:RequestParam、PathVariable、RequestHeader、Attribute、CookieValue

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------------

●  改进jason转换器,避免和文件下载转换器的冲突

----------------------------------------------------------------------
三、bboss persistent更新

●  解决连接池中无法查找到tomcat 6和weblogic 容器数据源的问题

●  解决sql server jtd驱动无法正确找到DB adaptor的问题

●  PreparedDBUtil增加public void setBlob(int i, String x) throws SQLException 方法,用来直接向blob类型字段中存入字符串

修改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;
	}

●  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);
	}


●  修复执行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);	

●  优化or mapping性能

●  更新最新的frameworkset-util.jar,持久层or mapping机制的bean的属性不再需要get/set方法

●  将动态添加的数据源的removeAbandoned属性设置为false

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

四、bboss taglib更新

------2011-12-11------------

●  更新最新的frameworkset-util.jar,cell标签读取的bean的属性不再需要get方法

------2011-11-20------------

●  调整jquery-1.4.2.min.js的load方法支持数组参数的传递

●  调整pager.js的loadPageContent方法支持数组参数的传递

●  分页参数传递支持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>
		<attribute>
			<name>name</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		
		<attribute>
			<name>encode</name>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	
	<!--
		功能说明:为分页列表标签中自动设置的超链接添加参数,参数来自java对象属性或者Map中键值对
	-->
	<tag>
		<name>beanparams</name>
		<tagclass>com.frameworkset.common.tag.pager.tags.BeanParamsTag</tagclass>
		<bodycontent>empty</bodycontent>
		<attribute>
			<name>id</name>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>name</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		
		<attribute>
			<name>encode</name>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>

------2011-11-18------------

增加params、beanparams标签。

params:为分页列表标签中自动设置的超链接添加参数数组

beanparams:为分页列表标签中自动设置的超链接添加参数,参数来自java对象属性或者Map中键值对

bean属性可以指定com.frameworkset.common.tag.pager.IgnoreParam注解,beanparams标签会忽略带有IgnoreParam注解的属性

------2011-11-2------------

●  修改covert标签空指针异常

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

五、bboss util更新

●  ClassInfo对象增加isprimary方法,标识对应的类型是否是bboss定义的基础数据类型范畴

●  增加获取方法参数名称的工具类LocalVariableTableParameterNameDiscoverer

●  获取LocalVariableTableParameterNameDiscoverer的方法如下:

ParameterNameDiscoverer parameterNameDiscoverer = ClassUtil.getParameterNameDiscoverer();


获取方法参数名称的方法如下:

ParameterNameDiscoverer parameterNameDiscoverer = ClassUtil.getParameterNameDiscoverer();
Method method = ClassInfo.class.getMethod("getDeclaredMethod", String.class);
String[] names = parameterNameDiscoverer.getParameterNames(method);

●  内置asm 4.0版本
---------------------------------------------------------------

六、bboss 序列化更新

●  引进序列化机制,对于static,final,transient类型的属性不进行序列化,对于添加了@ExcludeField的注解不序列化
●  对象中序列化的字段不再需要get/set方法
●  支持复杂对象及对象之间关系序列化和恢复功能