EJB 3.1 - 在EJB中使用@EJB - 是否可能?

时间:2010-11-24 00:03:44

标签: java java-ee ejb-3.0 java-ee-6 ejb-3.1

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

@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为null(未被初始化为@EJB)。

我正在尝试做什么?

感谢。

3 个答案:

答案 0 :(得分:2)

是的,这是可能的。

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

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

选择上述配置选项之一,而不是两者。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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