I have a rest web service. Inside this rest web service, I use @EJB
to inject an EJB. I then want to call a function on my EJB. The problem is, the whole thing blows up when I do. I created a simple example to demonstrate.
I have two projects. One is a ear project that contains my EJB.
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
/**
*
* @author dan
*/
@Stateless
@LocalBean
public class DummyBean {
public String dummMessage(){
return "Hello World";
}
}
The other is a war that contains my web service.
@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;
};
}
When you run the code, I get the following exception:
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)
Any ideas or suggestions? This seems like such a simple idea and yet it will not work for me.
I create simple war with yours classes - all working well.
WAR structure
-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>
deploy on Glass Fish 3.1 , send PUT request on /api/resources/message/get , get response
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.