首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

EJB 中 事务的粒度有关问题

2012-06-30 
EJB 中 事务的粒度问题今天碰到一个 Hibernate ?flush 里 一些本不想提交的对象。 ?这个问题在本地的测试版

EJB 中 事务的粒度问题

今天碰到一个 Hibernate ?flush 里 一些本不想提交的对象。 ?这个问题在本地的测试版本中不存在, 为什么呢? ?同事为了方便调试EJB 的代码 特地搞了一个proxy 在 本地Tomcat 测试代码里面运行, 因此在本地开发人员很方便的验证mass change 的 validation 逻辑。 ?由于mass change ?要将原业务表的数据取出, 并且 merge 用户要想做的mass change, 然后做一系列复杂的validation 校验。 ? 在服务器上的EJB 中 这些所有逻辑都是在一个EJB 中的事务中做的, ?Hibernate ?的 session ?也就跟这个transaction 的范围一致, ?导致了N 多不想做 提交的对象都 在session 中 , 并且在transaction 结束时flush。 ?

?

?在解决这个问题的时候, ?开始的想法是找出所有不需要save 的对象 在load 它们之后 修改之前做一个clone , 用它们的克隆。 ?由于涉及的对象太多, 在 本人做了 十几次修改, 验证后以失败告终。?

?

最后一招, ?想到本地版本是没有问题的, ?将所有load 出来validation 的逻辑 都放到一个 方法中, 将这个方法 TransactionType ?指定为 Not_Supported. ? 只有最后保存的逻辑放在一个 TransactionType.Required 的方法里面。 ?由于load , validation 都是 只读的, ?修改后 ?发表 测试 ?搞定。 ??

?

以前还用的比较少 将一个EJB 设定为?TransactionType.Required, 然后将个别 方法 ?指定为TransactionType ?Not_Supported。 ?在WebSphere 中 验证为可行的, 特记录在此。

热点排行