我不太了解EJB,如果我问一些明显的东西,请执行我。这是我的EJB:
@Stateless
public class CategoryFacade extends AbstractFacade<Category> {
@PersistenceContext(unitName = "AffableBeanPU")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
}
public CategoryFacade() {
super(Category.class);
}
}
我有一个名为AffableBeanService
的类,基本上它是一个REST服务类。在这里我试图调用EJB如下:
@GET
@Path("/categories/{categoryId}")
public String getInfo(@PathParam("categoryId") String categoryId) {
//Note I have removed try, catch etc to save the space
CategoryFacade categoryFacade; //This is a class, not a interface
InitialContext ic = new InitialContext();
categoryFacade = (CategoryFacade)ic.lookup("java:comp/env/ejb/CategoryFacade");
}
在运行时,我的异常为javax.naming.NamingException: Lookup failed for 'java:/env/ejb/CategoryFacade' in SerialContext[myEnv
。我不确定,我在这里缺少什么。有人可以帮帮我吗?
我也是这样尝试的:
@EJB
CategoryFacade categoryFacade;
但是EJB注入没有发生,我得到了NullPointerException。我假设我缺少一些配置,或者我不确定我是否正确地调用EJB。谁能指导我?
答案 0 :(得分:0)
最后,我能够自己解决这个问题。我试图访问的是来自Rest Service的EJB。为了使它工作,我将其余的服务类本身设置为如下的EJB:
@Stateless //This made trick
@Path("/service")
public class AffableBeanService {
//EJB Injection
@EJB
CategoryFacade categoryFacade;
@GET
@Path("/categories/{categoryId}")
public String categories(@PathParam("categoryId") String categoryId) {
selectedCategory = categoryFacade.find(Short.parseShort(categoryId));
}
}
所以现在我能够在没有JNDI查找的情况下调用EJB,并且注入工作正常。