当前位置: 首页 > 知识库问答 >
问题:

@资源未在jboss 7中注入SessionContext

羊舌胡非
2023-03-14

我将一个单例EJB公开为restful服务;要求是通过Rest API启动计时器。由于这将是Web应用程序,我将ejb类打包在war文件中。我成功地能够部署bean并调用Web服务,但无法启动计时器,因为@Resources注释没有在上述单例ejb中注入SessionContext(也尝试了无状态会话bean)。调试时,我看到SessionContext对象为空。关于如何在这种情况下使计时器服务工作,有什么建议吗?以下是详细信息:

  • JBoss 7.1.1决赛
  • RestEasy 2.3.7 Final
  • Java7

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

共有1个答案

边国安
2023-03-14

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

 类似资料:
  • Java 元数据(Metadata)规范(JSR-175),是J2SE 5.0和更高版本的一部分,提供一种在Java代码中指定配置数据的方法。Java代码中的元数据也被称为注解。在JavaEE中,注解用于声明对外部资源的依赖和在Java代码中的配置数据而无需在配置文件中定义该数据。 本节描述了在Java EE技术兼容的Servlet容器中注解和资源注入的行为。本节扩展了Java EE规范第5节标题

  • 免责声明:我刚刚开始使用OSGI,所以请忍受我和我的知识不足... 为了本练习,假设我有一个基于泽西岛 (2.17.0) 的 REST 应用程序在 OSGI 环境中的 Jetty (9.2.10) 下运行,它为用户提供了一些通过 SOAP 从单独的服务器收集的统计信息。 我现在尝试在另一个应用程序中重用一些现有代码,该应用程序应该通过JMS(或其他东西)检索统计信息。 我的目的是在捆绑包中为客户端

  • 我正在泽西岛应用程序中使用 CDI。在根资源上,CDI 注入按预期工作,但每当我返回子资源时,CDI 注入源都不可用。 具有子资源定位器的根资源: 子资源: 错误: 我正在使用和Weld依赖项,在Undertow上运行,并将Weld servlet侦听器添加到部署中。 同样,对根资源的相同注入确实有效。< code>@Named("name ")字符串由< code>@ApplicationSco

  • 我需要编写一个无状态会话bean,并将其部署到WLS10.3。3.会话bean应该能够向通过WLS控制台创建的已知JMS队列发送文本消息。因此,我编写了以下代码: 我现在需要做的是提供一个有效的weblogic-ejb-jar.xml与资源参考到jndi-name映射。有人能为weblogic-ejb-jar.xml提供一个例子吗? jmsConnectionFactory应该绑定到jndi-na

  • 将EntityManager注入资源可以工作,但不能注入Callable。在这里,EntityManager保持。 请告知代码保存在这里是否比保存在GitHub上更好。

  • 我在项目中创建了一个资源文件。我想将资源文件中的值注入到Springbean中。我在applicationcontext中定义了资源文件的占位符。xml。 我可以向applicationContext中声明的bean注入值。类似xml: 这工作得很好。但是,如果我声明带有Spring注释的bean,我就不能注入值。 你知道为什么我不能访问使用注释声明的bean内的值吗? 这是我的例外