2012-09-07 24 views
2

我有一個休息Web服務。在這個其他的Web服務中,我使用@EJB來注入一個EJB。然後我想在我的EJB上調用一個函數。問題是,當我這樣做時,整個事情就會爆炸。我創建了一個簡單的示例來演示。無法在其他Web服務中調用EJB

我有兩個項目。一個是包含我的EJB的ear項目。

 

import javax.ejb.Stateless; 
import javax.ejb.LocalBean; 

/** 
* 
* @author dan 
*/ 
@Stateless 
@LocalBean 
public class DummyBean { 

    public String dummMessage(){ 
     return "Hello World"; 
    } 
} 
 

另一個是包含我的web服務的戰爭。

 

@Stateless 
@Path("resources") 
public class CasperMessage { 

    private final Logger logger = Logger.getLogger(ServerMessageManager.class.getName()); 

    @Context 
    private UriInfo context; 

    @EJB 
    DummyBean db; 

    /** 
    * Creates a new instance of CasperMessage 
    */ 
    public CasperMessage() { 
    } 

    @PUT 
    @Consumes("application/xml") 
    @Produces("application/xml") 
    @Path("/message/get") 
    public String getMessage(String content) 
    { 
     //Message retVal = serverMessageManager.getMessageRecieved(message); 
     String retVal = db.dummMessage(); 
     return retVal; 
    }; 

} 
 

當您運行的代碼,我得到以下異常:

 

SEVERE: EJB5070: Exception creating stateless session bean : [DummyBean] 
WARNING: EJB5184:A system exception occurred during an invocation on EJB DummyBean, method: public java.lang.String com.dv.business.messaging.server.DummyBean.dummMessage() 
WARNING: javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB 
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:454) 
    at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2547) 
    at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1899) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
    at $Proxy207.dummMessage(Unknown Source) 
    at com.dv.business.messaging.server.__EJB31_Generated__DummyBean__Intf____Bean__.dummMessage(Unknown Source) 
    at com.dv.ws.CasperMessage.getMessage(CasperMessage.java:62) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
 

任何意見或建議?這似乎是一個這麼簡單的想法,但它不適合我。

回答

1

我用你的課程創建了一場簡單的戰爭 - 一切運作良好。
WAR結構

-META-INF/MANIFEST.MF 
-WEB-INF/sun-web.xml 
-WEB-INF/web.xml 
-WEB-INF/classes/com/package/CasperMessage.class 
-WEB-INF/classes/com/package/DummyBean.class 
-index.jsp 

的web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" 
     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/web-app_3_0.xsd"> 

    <servlet> 
     <servlet-name>ServletAdaptor</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>ServletAdaptor</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
     </welcome-file-list> 
    </web-app> 

sun-web.xml中

<sun-web-app> 
    <context-root>/api</context-root> 
</sun-web-app> 

部署上玻璃魚3.1,送穿上/API /資源/信息請求/獲得,得到響應

+0

你可以嘗試包裝DummyBean作爲一個耳朵?那麼戰爭與它有聯繫嗎? – user489041

+0

有兩個模塊的耳朵:具有Rest服務的war模塊和具有bean的ejb模塊? – Ilya

+0

是的,效果很好... – Ilya