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 外....)
感谢
但有时候..不,很多时候 可能只是一个很简单的新增/删除/修改 的动作需要额外的包装成新交易,非复杂的业务流程
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28