2013-07-04 2 views
0

Я не очень осведомлен о EJB, пожалуйста, попробуйте меня, если я прошу что-то очевидное. Это мой EJB:EJB Поиск не удался для «java: comp/env/ejb/CategoryFacade»

@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

Наконец-то, я могу решить это самостоятельно. То, что я пытался получить, - 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)); 
    } 
} 

Так что теперь я могу назвать EJB без JNDI смотреть вверх и инъекция работает нормально.

Смежные вопросы