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 中 验证为可行的, 特记录在此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值