首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CDI:@Decorator @Stateless

CDI:@Decorator @Stateless
EN

Stack Overflow用户
提问于 2012-01-11 01:39:49
回答 2查看 1.7K关注 0票数 2

CDI装饰器可以是无状态ejb吗?

我试过了:

代码语言:javascript
复制
@Decorator
@Stateless
public class WarehouseHandlingDecorator implements SerialKitServiceWarehouseHandling {


@Inject
@Any
@Delegate
protected SerialKitServiceWarehouseHandling serialKitServiceWarehouseHandling;

...

}

我在JBoss 6.1上部署,得到以下消息:

WELD-000038不能将@Delegate放在不在装饰器上的注入点:@New Session bean [带有限定符@ com.eggsweb.production.services.WarehouseHandlingDecorator的类SerialKitServiceWarehouseHandling;本地接口是新的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-11 16:12:53

装饰器和拦截器不能是EJB。您可以在EJB上放置装饰器和拦截器,但EJB不能是装饰器或拦截器。

您可以将EJB注入到装饰器或拦截器中,因此可以打开一些选择。也许将EJB注入到@Decorator中,并让它委托您为@Stateless设想的工作。

实际上,您可以在装饰器的@PostConstruct中向EJB传递对@Delegate的引用,然后将所有调用委托给EJB,而不是原来的委托。

票数 5
EN

Stack Overflow用户

发布于 2012-01-11 22:36:08

我的问题是将对委托ejb的调用和对另一个ejb的调用包装在单个事务中,假设上面的方法是装饰器方法:

代码语言:javascript
复制
protected void method(Object param1, Object param2){
 //decorated method
 delegate.method(param1,param2);
 //another ejb call
 anotherEJB.doSomething(param1);    
}

如果我注入UserTransaction,假设是在Java容器中,上面的代码片段是正确的吗?

代码语言:javascript
复制
protected void method(Object param1, Object param2){

try{
 userTransaction.begin();

 delegate.method(param1,param2);

 anotherEJB.doSomething(param1);

 userTransaction.commit();

 }catch(){
   try{
    userTransaction.rollback();
   }catch(Exception e){}
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8807798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档