java - 在 EJB 3.0 (WebLogic 11gR1) 上模拟 @Startup

标签 java jakarta-ee ejb-3.0 startup weblogic11g

我的目标是设置一个在启动时开始运行的计划作业。

在 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/

相关文章:

java - 将水平下拉转换为垂直下拉

java - 计算最后一列值的总和并将其放在 TextField 上?

java - 有状态 EJB 生命周期问题

java - Tomcat JRE UnsatisfiedLinkError

java - 在 Java EE 中停止计划的 EJB 任务

java - ejb session bean 中的嵌套事务 - bean 管理的事务

java - Eclipse - 添加 lombok 的数据和构造函数时显示 @SuppressWarnings(value= {"all"})

java - SoundTouch 和 JNI

java - 如何使用 Maven 在 EAR 中添加 WAR

java - org.hibernate.id.IdentifierGenerationException : ids for this class must be manually assigned before calling save()