+ -
当前位置:首页 → 问答吧 → EJB 交易问题

EJB 交易问题

时间:2011-11-08

来源:互联网

最近想到一个问题,在 JEE 中交易都由 EJB 来管理,

但有时候..不,很多时候 可能只是一个很简单的新增/删除/修改 的动作需要额外的包装成新交易,非复杂的业务流程

ex: 单纯纪录执行过程的log

像这种 method 可能就会有很多种,当如果我在 EJB method 的交易范围内想要使用这些 method 时,
就必须要再另外一个 EJB 中宣告一个 RequiredNew 的 method ,
而这个 method 的目的单纯的只是想要产生出一个新的交易

这样让人很困扰的是 如果这样的 method 很多,那 EJB facade 岂不是要为了这种需求都各宣告不同的 method
数量一多 整个 facade 就充满了这种为了 requireNew 的垃圾 method....Orz

尝试想要使用 @Interceptors 来包装 POJO 的交易 不过 @Interceptors 似乎只能在 EJB method 中使用

ex:

@Interceptors( TxInterceptor.class )
class POJO{
public vod method2(Data data){
insert 一笔 log 到资料库去 ;
}
}

@Stateless
class EJB{

@TransactionAttribute ( TransactionType.Required)
public void method1(){
update something ;
...
new POJO().method2(data) ; //在这里想要把 POJO 的 method2 缠绕一个新交易的服务
...
}

}

@Stateless
@Interceptor
class TxInterceptor{

@EJB TxInterceptor ejb ;

@TransactionAttribute ( TransactionType.RequireNew )
public Object requireNew( InvocationContext ic ){
return ic.procees() ;
}

@Around
//使用 EJB 来包新交易
public Object intercept( InvocationContext ic ){
return ejb.requireNew( ic ) ;
}

}

上例结果在 J2EE5 是没办法成功的,因为在 POJO 上好像挂了 Interceptor 不会有作用

不晓得没有有高手想过这样的问题? 或是有其它建议的Design Pattern 作法 (除了一直在 facade 上加 method 外....)

感谢

作者: luoqr   发布时间: 2011-11-08

你的 POJO 不能做成另一个 EJB 吗?

作者: jimmy14   发布时间: 2011-11-08