2015-05-21 223 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服務訪問豆。

感謝您的幫助。