4

是否可以在另一个 EJB 中使用 @EJB?我现在正在尝试这样做,而我的 EJB 最终为空。我将在一个例子中概述我的问题。

@Stateless
@LocalBean
@Local(LoginServiceLocal.class)
public class LoginService implements LoginServiceLocal {    

    public void createLogin(String email, String password) { ... }
}

@Stateless
@LocalBean
@Local(AccountServiceLocal.class)
public class AccountService implements AccountServiceLocal {

    @PersistenceContext(unitName = "accounts")
    private EntityManager accountEntityManager;

    @EJB
    private LoginServiceLocal loginService;

    public void createAccount(Account account, String email, String password) {
        accountEntityManager.persist(account);
        loginService.createLogin(email, password);
    }
}

这种事情应该是可能的吗?我还应该提到我正在使用嵌入式容器(通过 EJBContainer),并且我正在使用 JNDI 查找 AccountService,但是当我尝试在 AccountService 中调用 loginService.createLogin 时,loginService 为空(未由@EJB)。

我正在尝试做的事情可能吗?

谢谢。

4

3 回答 3

2

是的,这是可能的。

@LocalBean 注释使 EJB 能够公开无接口客户端视图,因此您无需定义本地接口。

另一方面,@Local 注解定义了 bean 的本地客户端接口。

选择上述配置选项之一,不要同时选择两者。

如果您选择使用@LocalBean 注释,请删除@Local 注释,删除implements 关键字并使用@EJB 注释注入bean 类名。

如果您选择使用@Local 注释,请删除@Local 和@LocalBean 注释并使用接口名称注入带有@EJB 注释的bean。

于 2010-11-25T20:17:22.667 回答
1

是的,我只是在处理我的一些代码。这可能是您如何创建 EJB 的问题。我只使用注入而不是 jndi 查找来完成它。

于 2010-11-24T00:13:45.407 回答
1

如果您使用 EJB3.1,您还可以使用 CDI 中的 @Inject

于 2014-12-07T17:47:39.923 回答