java - 定时器服务空

标签 java timer weblogic

老实说,我在这里遗漏了一些东西。我不知道如何创建 TimerService 对象的实例。它始终为空。我没有构造函数,因为它是一个接口(interface)。我不能使用创建方法。 @Resource 似乎没有给它分配任何东西。

我正在尝试设置一个简单的编程计时器,它每 X 分钟执行一次任务。超时持续时间可能因配置而异,配置可能会在整个运行时发生变化。我正在使用 WebLogic 12 Web 应用程序。

我目前拥有的:

import javax.annotation.Resource;
import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;

@Singleton
public class TimerBean {
    @Resource
    protected TimerService timerService;

    public TimerBean(){
        System.out.println("TimerBean constructor " + timerService);
    }

    @Timeout
    public void timeoutHandler(Timer timer){
        String name = timer.getInfo().toString();
        System.out.println("Timer ticked. Name=" + name);
    }


    public void startOrModifyTimer(long initialExpiration, long interval, String name) {
        System.out.println("Start or modify " + timerService);
    }
}

这个输出:

TimerBean constructor null

& 然后在服务器运行后,如果我调用启动或修改:

Start or modify null


编辑: 我通过制作 TimerBean @Singleton & @Startup 并用 @PostConstruct 方法替换构造函数来让它工作。

然而,当我尝试使用它的方法时,它有一个实例化的 TimerService 对象,它给我 java.lang.IllegalArgumentException: Unknown bean state 0 其中有没有信息...

最佳答案

如果您正在尝试使用字段注入(inject),您将依赖框架在对象已经被实例化并设置字段后出现,因此它总是在构造函数。您可以在 @PostConstruct 方法中执行您需要的任何逻辑,或者,我强烈建议将 TimerService 作为构造函数参数而不是直接注入(inject)字段。

关于java - 定时器服务空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28880424/

相关文章:

java - 阶乘法 - 递归还是迭代? ( java )

Java:如何对模块的 DAO 和服务进行测试?

timer - 用于创建计时器的 Vala/SDL 回调

java - 通过 WebLogic 连接数据库

java - org.hibernate.id.SequenceHiLoGenerator 给出了错误的 id

java - 使用 Weblogic session 复制进行内存数据库排序

java - 使用java连接mysql数据库出错

java - Spring 3,在非托管类中注入(inject) bean 的可配置注释的风险?

java - 执行一次后停止 Swing 计时器

javascript - 单击按钮时暂停和播放 setInterval()