是否可以在另一个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)。
我正在尝试做什么?
感谢。
答案 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