java - EJB3 bean "self inject"可以通过 EJB 容器调用它自己的方法吗?

标签 java ejb-3.0

是否可以“ 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/

相关文章:

java - 如何使用 Twilio 在当前通话中添加另一个号码?

java开关性能优化

java - 内联 Thread 对象的运行速度比从 Thread 继承的类快得多

java - 在不使用线程的情况下处理 EJB3 中的超时

java - JBoss 5.1.0 GA 中的@EJB?

Weblogic 上的 Java EE 应用程序部署

jpa - EJB3 实体类的单独 jar

java - JAX-RS/REST 资源究竟是什么?

java - 运行 JAR 时为 "java.lang.ClassNotFoundException: javax.ejb.EJBObject"

java - Google Java格式+验证Google Java格式组合无效