2
我將單例EJB暴露爲restful service;要求是通過Rest API啓動一個定時器。由於這將是網絡應用程序,我打包在戰爭文件ejb類。我成功地能夠部署這個bean並調用Web服務,但是因爲@Resource註解沒有在上述單例ejb中注入SessionContext(也嘗試了無狀態會話Bean),所以無法啓動計時器。調試時,我看到SessionContext對象爲null。有關如何使計時器服務在這種情況下工作的任何建議?以下是詳細信息:@Resource沒有在jboss 7中注入SessionContext
- 的JBoss 7.1.1最終
- RestEasy的2.3.7最終
- 的Java 7
TimerSessionBean.java:
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Singleton;
import javax.ejb.Timer;
import javax.ejb.Timeout;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Singleton
@Path("/config")
public class TimerSessionBean {
@Resource
private SessionContext context;
@GET
@Path("{id}")
public void createTimer(@PathParam("id") long duration) {
context.getTimerService().createTimer(duration, "Hello World!");
}
@Timeout
public void timeOutHandler(Timer timer) {
System.out.println("timeoutHandler : " + timer.getInfo());
}
}
網絡。 xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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/web-app_3_0.xsd">
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
AppConfig.java:
20:09:08,850 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named TimerSessionBean in deployment unit deployment "myapp-1.0.war" are as follows:
java:global/myapp-1.0/TimerSessionBean!app.ws.resources.TimerSessionBean
java:app/myapp-1.0/TimerSessionBean!app.ws.resources.TimerSessionBean
java:module/TimerSessionBean!app.ws.resources.TimerSessionBean
java:global/myapp-1.0/TimerSessionBean
java:app/myapp-1.0/TimerSessionBean
java:module/TimerSessionBean