gpt4 book ai didi

java - @Resource 没有在 jboss 7 中注入(inject) SessionContext

转载 作者:行者123 更新时间:2023-11-30 11:23:11 28 4
gpt4 key购买 nike

我将单例 EJB 公开为 Restful 服务;要求是通过 Rest API 启动计时器。因为这将是 Web 应用程序,所以我将 ejb 类打包到 war 文件中。我能够成功部署 bean 并调用 Web 服务,但无法启动计时器,因为 @Resource 注释没有在上述单例 ejb 中注入(inject) SessionContext(也尝试使用无状态 session bean)。调试时,我看到 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());
}
}

web.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:

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class AppConfig extends Application {

@Override
@SuppressWarnings("unchecked")
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(TimerSessionBean.class);
return set;
}
}

服务器日志摘录:

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

最佳答案

您正在将 ejb 打包到一个 war 文件中,这意味着您正在使用 EJB 3.1 Lite那是一个reduced set ejb 特性。我不确定为什么没有注入(inject) SessionContext 实例,但请记住,TimerService 在此简化版本的 ejb 规范中不可用。

关于java - @Resource 没有在 jboss 7 中注入(inject) SessionContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352126/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com