0

我不太了解 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。谁能指导我?

4

1 回答 1

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,并且注入工作正常。

于 2013-07-04T09:07:37.677 回答