CDI装饰器可以是无状态ejb吗?
我试过了:
@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;本地接口是新的
发布于 2012-01-11 16:12:53
装饰器和拦截器不能是EJB。您可以在EJB上放置装饰器和拦截器,但EJB不能是装饰器或拦截器。
您可以将EJB注入到装饰器或拦截器中,因此可以打开一些选择。也许将EJB注入到@Decorator中,并让它委托您为@Stateless设想的工作。
实际上,您可以在装饰器的@PostConstruct中向EJB传递对@Delegate的引用,然后将所有调用委托给EJB,而不是原来的委托。
发布于 2012-01-11 22:36:08
我的问题是将对委托ejb的调用和对另一个ejb的调用包装在单个事务中,假设上面的方法是装饰器方法:
protected void method(Object param1, Object param2){
//decorated method
delegate.method(param1,param2);
//another ejb call
anotherEJB.doSomething(param1);
}如果我注入UserTransaction,假设是在Java容器中,上面的代码片段是正确的吗?
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){}
}
}https://stackoverflow.com/questions/8807798
复制相似问题