我的目标是设置一个在启动时开始运行的计划作业。
在 EJB 3.1 上,我可以做类似的事情:
@Startup
@Stateless
public class SchedulePoller {
@Resource
TimerService timerService;
@PostConstruct
public void defineScheduler() {
timerService.createTimer(60000, 60000, null);
}
@Timeout
public void checkSchedule(Timer timer) {
System.out.println("time: " + new Date());
}
}
现在我的问题是 @Startup
在 EJB 3.0 中不可用,EJB 3.0 是 WebLogic 11gR1 (10.3.5) 支持的最新版本。这意味着未构造 Bean,因此不会调用 defineScheduler
方法。
我读到一个可能的解决方案是定义一个 HttpServlet
,注入(inject)我的 Bean,覆盖 init
方法并放置 <load-on-startup>
在web.xml
文件。
我不能使用此方法,因为我的项目是一个 EJB 模块并且我没有 Web 上下文。
到目前为止我想到的唯一其他解决方案是将 Bean 更改为 @MessageDriven
并在启动后将消息放入队列,但这需要在每次部署时执行额外操作。
有没有办法复制@Startup
注解?最好的选择是在启动时自动启动 Bean,但我也可以考虑将脚本添加到 StartWebLogic.cmd
或任何其他“自动”方式。
谢谢。
最佳答案
不,EJB 3.0 没有其他选择。你说你的项目是一个 EJB 模块,但我的建议仍然是创建另一个 WAR 模块来驱动你的启动。我会使用 ServletContextListener 而不是 load-on-startup
servlet,因为您实际上并不希望在 WAR 中有端点,您只想(ab)将其用于应用程序启动通知.
关于java - 在 EJB 3.0 (WebLogic 11gR1) 上模拟 @Startup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631460/