是否可以“自注入”EJB 以将本地方法调用为 bean 方法?在某些情况下这可能是有利的,例如,如果使用容器管理的事务并且应该在新事务中完成某些事情。
这是如何工作的一个例子:
Foo.java:
@Local
public interface FoO {
public void doSomething();
public void processWithNewTransaction(); // this should actually be private
}
FooBean.java:
@Stateless
public class FooBean implements Foo {
@EJB
private Foo foo;
public void doSomething() {
...
foo.processWithNewTransaction();
...
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void processWithNewTransaction() {
...
}
}
如果我提取processWithNewTransaction()
到另一个 bean,它需要在接口中作为公共方法公开,即使它应该只由FooBean
. (我上面的代码也有同样的问题,这就是接口定义中有注释的原因。)
一种解决方案是切换到 bean 管理的事务。然而,这将需要更改整个 bean 来管理它自己的事务,并且会为所有方法添加大量样板。