- 浏览: 668555 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
bboss自定义类对象序列化机制介绍
1.概述
bboss提供了自定义类对象的序列化/反序列化插件机制,这个机制与bboss序列化功能相辅相成,为应用程序提供了简单高效的对象序列化功能。
采用bboss自定义类对象序列化机制可以方便地实现无法通过bboss本身序列化机制进行序列化的类对象的序列化功能,例如:
没有定义默认构造函数(不带参数构造函数)的类对象
兼容jvm自带的序列化功能(某些遗留系统库类、已有第三方组件库类、jdk类库中的类,这些类利用jvm序列化机制高度定制他们的序列化行为)。
本质上讲,bboss在序列化和反序列化类对象时,如果检测到特定的类提供了自定义序列化和反序列化插件,就会利用找到的插件来完成对应类对象的序列化和反序列化操作,同时如果配置了对象预处理类,那么首先会对对象进行预处理再序列化。
序列化插件机制作为序列化功能的辅助功能,通过编写自定义序列化插件机制,可以达到以下目标:
1.自定义对象的序列化和反序列化行为
2.对序列化对象进行预处理
3.为类路径定义magic数字别名,降低序列化报文大小
2.实现自定义序列化插件
所有的自定义列化插件都必须继承抽象类
org.frameworkset.soa.BaseSerial<T>
并实现BaseSerial中定义的两个抽象方法:
//序列化方法,将对象转换为String ,如何转换取决于具体方法实现
public String serialize(T object);
//反序列化方法,将String 转换为对象,如何转换取决于具体方法实现
public T deserialize(String object);
所有的预处理类都必须实现接口:
org.frameworkset.soa.PreSerial<T>
prehandle方法接收预处理的对象,处理完毕再返回相同类型的对象。
以下是bboss默认提供的jvm序列化插件:
org.frameworkset.soa.JDKSerial
JDKSerial插件可用于那些必须采用jvm序列化机制才能序列化的类对象,比如
net.sf.jasperreports.engine.JasperPrint
下面是专门序列化java.util.Locale对象的插件
org.frameworkset.soa.LocaleSerial
3.自定义类型序列化插件配置
序列化插件定义完毕,即可以将其配置到序列化插件配置文件serialconf.xml
中,文件存放路径为:
org/frameworkset/soa/serialconf.xml
bboss默认提供java.util.Locale和net.sf.jasperreports.engine.JasperPrint两个类对象的序列化插件JDKSerial:
插件配置采用bboss ioc配置语法,property 元素包含四个属性,含义分别说明如下:
name代表需要序列化的class
magic属性代表类编号(类序列化编号不能重复)
serial指定序列化的插件,插件必须继承抽象类org.frameworkset.soa.BaseSerial
preserial-指定po对象进行预处理处理类,以便在序列化对象时先进行预处理,再对预处理后的对象进行序列化,预处理类必须实现接口org.frameworkset.soa.PreSerial
serial和preserial两个属性可以指定其中的一个,可以同时都指定,也可以都不指定;如果都指定,首先用preserial对应的预处理类对序列化对象进行预处理,然后在用serial对应的插件来序列化和反序列化预处理后的对象,如果都不指定则表示定义了name对应的类的一个简单别名以便降低报文大小。
serial和preserial都是单例的。
bboss序列化对象时,只要碰到java.util.Locale类型的对象或者对象属性就会采用LocaleSerial插件来实现序列化和反序列化,只要碰到net.sf.jasperreports.engine.JasperPrint类型的对象或者对象属性就会采用JDKSerial插件来实现序列化和反序列化。
4.自定义类型序列化插件使用场景
简单的实例:序列化java.util.Locale对象
稍复杂的实例:改造session共享场景下JasperPrint的存储和读取
利用bboss自定义序列化插件机制,文章《bboss session共享时序列化存储jasperreports报表对象JasperPrint方法》中将JasperPrint对象设置到共享session中和从共享session中获取JasperPrint方法可以改写为:
改造后代码显得更加简洁,充分展示出采用bboss序列化机制向共享session中存储和获取各种复杂对象的能力。
1.概述
bboss提供了自定义类对象的序列化/反序列化插件机制,这个机制与bboss序列化功能相辅相成,为应用程序提供了简单高效的对象序列化功能。
采用bboss自定义类对象序列化机制可以方便地实现无法通过bboss本身序列化机制进行序列化的类对象的序列化功能,例如:
没有定义默认构造函数(不带参数构造函数)的类对象
兼容jvm自带的序列化功能(某些遗留系统库类、已有第三方组件库类、jdk类库中的类,这些类利用jvm序列化机制高度定制他们的序列化行为)。
本质上讲,bboss在序列化和反序列化类对象时,如果检测到特定的类提供了自定义序列化和反序列化插件,就会利用找到的插件来完成对应类对象的序列化和反序列化操作,同时如果配置了对象预处理类,那么首先会对对象进行预处理再序列化。
序列化插件机制作为序列化功能的辅助功能,通过编写自定义序列化插件机制,可以达到以下目标:
1.自定义对象的序列化和反序列化行为
2.对序列化对象进行预处理
3.为类路径定义magic数字别名,降低序列化报文大小
2.实现自定义序列化插件
所有的自定义列化插件都必须继承抽象类
org.frameworkset.soa.BaseSerial<T>
并实现BaseSerial中定义的两个抽象方法:
//序列化方法,将对象转换为String ,如何转换取决于具体方法实现
public String serialize(T object);
//反序列化方法,将String 转换为对象,如何转换取决于具体方法实现
public T deserialize(String object);
所有的预处理类都必须实现接口:
org.frameworkset.soa.PreSerial<T>
public interface PreSerial<T> { public T prehandle(T object); }
prehandle方法接收预处理的对象,处理完毕再返回相同类型的对象。
以下是bboss默认提供的jvm序列化插件:
org.frameworkset.soa.JDKSerial
package org.frameworkset.soa; import java.io.Serializable; import org.frameworkset.util.ObjectUtils; /** * <p>Title: LocalSerial.java</p> * <p>Description: </p> * <p>bboss workgroup</p> * <p>Copyright (c) 2007</p> * @Date 2014年5月23日 上午9:06:42 * @author biaoping.yin * @version 1.0 */ public class JDKSerial extends BaseSerial<java.io.Serializable> { public String serialize(Serializable object) { // TODO Auto-generated method stub return ValueObjectUtil .byteArrayEncoder(ObjectUtils.toBytes(object)); } public Serializable deserialize(String object) { try { byte[] bytes = ValueObjectUtil.byteArrayDecoder(object); return (Serializable)ObjectUtils.toObject(bytes); } catch(RuntimeException e) { throw e; } catch(Exception d) { throw new SerialException(d); } } }
JDKSerial插件可用于那些必须采用jvm序列化机制才能序列化的类对象,比如
net.sf.jasperreports.engine.JasperPrint
下面是专门序列化java.util.Locale对象的插件
org.frameworkset.soa.LocaleSerial
public class LocaleSerial extends BaseSerial<Locale>{ public LocaleSerial() { // TODO Auto-generated constructor stub } public String serialize(Locale object) { // TODO Auto-generated method stub return object.toString(); } public Locale deserialize(String object) { // TODO Auto-generated method stub return new Locale(object); } }
3.自定义类型序列化插件配置
序列化插件定义完毕,即可以将其配置到序列化插件配置文件serialconf.xml
中,文件存放路径为:
org/frameworkset/soa/serialconf.xml
bboss默认提供java.util.Locale和net.sf.jasperreports.engine.JasperPrint两个类对象的序列化插件JDKSerial:
<!-- 自定义对象序列化插件,对于bboss无法序列化的对象,可以自行定义序列化插件,只要将对象序列化和反序列化机制定义好即可 改造序列化插件,增加preseial机制,以便支持用户自行对通过hibernate查询得到代理po对象进行预处理(比如值复制)再进行序列化 解决hibernate查询对象无法序列化问题 --> <properties> <property name="java.util.Locale" magic="1" serial="org.frameworkset.soa.LocaleSerial"/> <property name="net.sf.jasperreports.engine.JasperPrint" magic="2" serial="org.frameworkset.soa.JDKSerial"/> <!-- <property name="com.xxx.xxx.POXxxxx" magic="3" preserial="org.frameworkset.soa.POXxxxxSerial"/> --> </properties>
插件配置采用bboss ioc配置语法,property 元素包含四个属性,含义分别说明如下:
name代表需要序列化的class
magic属性代表类编号(类序列化编号不能重复)
serial指定序列化的插件,插件必须继承抽象类org.frameworkset.soa.BaseSerial
preserial-指定po对象进行预处理处理类,以便在序列化对象时先进行预处理,再对预处理后的对象进行序列化,预处理类必须实现接口org.frameworkset.soa.PreSerial
serial和preserial两个属性可以指定其中的一个,可以同时都指定,也可以都不指定;如果都指定,首先用preserial对应的预处理类对序列化对象进行预处理,然后在用serial对应的插件来序列化和反序列化预处理后的对象,如果都不指定则表示定义了name对应的类的一个简单别名以便降低报文大小。
serial和preserial都是单例的。
bboss序列化对象时,只要碰到java.util.Locale类型的对象或者对象属性就会采用LocaleSerial插件来实现序列化和反序列化,只要碰到net.sf.jasperreports.engine.JasperPrint类型的对象或者对象属性就会采用JDKSerial插件来实现序列化和反序列化。
4.自定义类型序列化插件使用场景
简单的实例:序列化java.util.Locale对象
try { java.util.Locale locale = java.util.Locale.CHINESE; String xml = ObjectSerializable.toXML(locale); locale = ObjectSerializable.toBean(xml, java.util.Locale.class); System.out.println(locale); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
稍复杂的实例:改造session共享场景下JasperPrint的存储和读取
利用bboss自定义序列化插件机制,文章《bboss session共享时序列化存储jasperreports报表对象JasperPrint方法》中将JasperPrint对象设置到共享session中和从共享session中获取JasperPrint方法可以改写为:
public static void toSession(HttpServletRequest request,String key,JasperPrint jasperPrint) throws IOException { request.getSession().setAttribute(key, jasperPrint); } public static JasperPrint getJasperPrint(HttpServletRequest request,String key) { return (JasperPrint)request.getSession().getAttribute(key); }
改造后代码显得更加简洁,充分展示出采用bboss序列化机制向共享session中存储和获取各种复杂对象的能力。
发表评论
-
bboss ioc快速入门教程
2017-08-13 11:28 1200bboss是一个非常不错的ioc框架,功能类似于spr ... -
bboss kafka组件使用介绍
2017-07-22 14:03 1251bboss kafka组件使用介绍 本文使用的实例对应的gra ... -
bboss log4j滚动日志文件扩展插件使用介绍
2017-06-25 11:05 1375bboss扩展了log4j滚动切割文件插件org.apache ... -
bboss redis组件使用实例
2017-03-04 16:57 1111在工程中导入bboss redis组件 gradle comp ... -
bboss 与ecipse gradle buildship插件结合使用方法
2017-02-23 09:48 1143本文介绍bboss 与ecipse gradle builds ... -
bboss session手动移除用户会话方法介绍
2016-12-31 21:01 929bboss session手动移除用户会话方法介绍。 在一些 ... -
bboss session集成权威指南
2016-10-15 13:15 1385本文档已做调整,访问地址: bboss session集成权威 ... -
bboss session listener实现和配置方法
2016-10-14 10:50 902bboss session listener类似于servle ... -
如何快速高效地开发和调试基于gradle管理的web应用
2016-09-28 23:39 1396本文探讨如何高效快速地开发和调试基于gradle管理的web应 ... -
bboss ioc配置文件中使用外部属性文件介绍
2016-09-20 11:35 1065bboss ioc配置文件中使用外部属性文件介绍 与spri ... -
bboss wordpdf构建部署介绍
2016-09-02 15:47 517bboss wordpdf构建部署介绍 下载 源码下载地址: ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 863首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss gradle工程导入eclipse介绍
2016-07-24 14:01 2839bboss gradle工程导入eclipse介绍(本文适用于 ... -
bboss session版本构建和demo部署运行介绍
2016-07-24 10:19 1183bboss session版本构建和demo部署运行介绍 1. ... -
bboss session自定义session id生成机制介绍
2016-06-04 11:18 2626bboss session自定义session id生成机制介 ... -
采用gradle构建和发布bboss方法介绍
2016-05-01 23:23 4439采用gradle构建和发布bboss版本及从maven中央库下 ... -
bboss session redis插件使用指南
2016-03-29 14:46 1622bboss session 采用redis存储会话功能介绍,b ... -
bboss ioc提供的组件初始化工具类介绍
2016-03-18 16:17 685bboss ioc提供的组件初始化工具类介绍 bboss i ... -
bboss文件缓存组件FileContentCache介绍
2016-02-27 15:23 641bboss文件缓存组件FileContentCache介绍 ... -
bboss 会话管理session操作使用示例
2015-12-24 09:21 1019bboss 会话管理session操作使用示例(遵循servl ...
相关推荐
Bboss和xstream序列化反序列化性能对比1
bboss es特点请访问: https://www.oschina.net/p/bboss-elastic
bboss会话共享培训文档,学习bboss不可多得的资料,值得拥有。
Elasticsearch rest client bboss介绍-Elastic2018中国开发者大会演讲稿
NULL 博文链接:https://yin-bp.iteye.com/blog/2174863
NULL 博文链接:https://yin-bp.iteye.com/blog/1449900
Bboss国际化实践.ppt
企业级 J2EE 开源框架:bboss
bboss+es基本操作示例,elasticsearch,bboss,java使用demo
bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。
NULL 博文链接:https://yin-bp.iteye.com/blog/926166
springboot集成ElasticsearchBboss调用Elasticsearch的案例分享
官方版本,亲测可用
资源目录: 项目源码(eshelloword.rar) bboss elasticsearch开发入门教程.wmv 搭建bboss elasticsearch开发环境.wmv 说明.txt
NULL 博文链接:https://yin-bp.iteye.com/blog/2325602
NULL 博文链接:https://yin-bp.iteye.com/blog/2177475
浙江移动BBOSS系统快速入门手册V0.1归类.pdf
bboss功能涵盖ioc,mvc,jsp自定义标签库,持久层,全局事务托管,安全认证,SSO,web会话共享,cxfwebservice服务发布和管理,hessian服务发布和管理等功能。另外还提供了符合中国式自由流的bboss activiti工作流...
NULL 博文链接:https://yin-bp.iteye.com/blog/1131637
官方版本,亲测可用