EJB查找失败'java:comp / env / ejb / CategoryFacade'

时间:2013-07-04 08:46:34

标签: java glassfish-3 ejb-3.1

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

1 个答案:

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