2015-05-21 174 views
0

我试图从本地服务访问EJB无状态会话bean。 但是,当我调用位于bean上的方法时,我得到了一个N​​PE,因为无状态bean为null。EJB无状态会话bean为空

下面是代码:

的sateless豆:

@Startup 
@Stateless(name = "LoginBean") 
@LocalBean 
public class LoginBean { 


    public List<Long> getItemsForClient(String clientId, Long itemId) { 
     System.out.println("clientID: " + clientId); 
     System.out.println("itemID: " + itemId); 

     List<Long> ret = new ArrayList<Long>(); 
     ret.add((long) 123456); 
     ret.add((long) 123457); 
     ret.add((long) 123458); 
     ret.add((long) 123459); 
     return ret; 

    } 

    } 

服务:

@Stateless 
@Path("/ctofservice") 
public class CtoFService { 

    @EJB 
    LoginBean loginBean; 

    public CtoFService() { 

    } 

    @GET 
    @Produces("text/plain") 
    @Path("test") 
    public String convertCtoF() { 

     Long l = (long) 123456; 
     List<Long> servicesForClient = loginBean.getItemsForClient("cliID", l); 
     return itemsForClient.toString(); 


    } 

而且ApplicationConfig:

@ApplicationPath("/") 
public class ApplicationConfig extends Application { 

    @SuppressWarnings("unchecked") 
    @Override 
    public Set<Class<?>> getClasses() { 

     Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 
     addRestResourceClasses(resources); 
     return resources; 
    } 

    private void addRestResourceClasses(Set<Class<?>> resources) { 
     resources.add(CtoFService.class);  
    } 
} 

我一直在努力一会儿一会儿寻找可能的解决方案,但没有出现。

我正在使用JBoss AS 7.1和RESTEasy。

当bean应该被实例化?

谢谢。

+0

您是否需要LoginBean作为EJB,为什么不把它作为JAX_RS服务。你仍然可以使用CDI。 – user489041

+0

是的,我需要它,因为当我实现它时,我需要添加更多funcionality。 – javapai

+0

对不起,我的意思是CtoFService。你有它标记为@Stateless – user489041

回答

0

我通过添加beans.xml文件解决了这个问题,它并没有出现在我创建项目的那一刻,而且我发现该文件在几个小时之后寻找解决方案。

所以我把文件WEB-INF目录

该文件包含:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
</beans> 

而问题就解决了,我可以通过web服务访问豆。

感谢您的帮助。