是否可以“ self 注入(inject)”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,它需要作为接口(interface)中的公共(public)方法公开,即使它应该仅由 FooBean
调用. (我上面的代码也有同样的问题,这就是接口(interface)定义中有注释的原因。)
一种解决方案是切换到 bean 管理的事务。然而,这将需要更改整个 bean 来管理它自己的事务,并且会向所有方法添加大量样板。
最佳答案
可以进行 self 注入(inject)
。您需要使用 SessionContext
。
SessionContext sc = ...
sc.getBusinessObject(FooBean.class).processWithNewTransaction()
关于java - EJB3 bean "self inject"可以通过 EJB 容器调用它自己的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/633687/