部署完成后启动调度程序
-
29-10-2019 - |
题
我在Java EE 5和WebSphere 7.0上有WebProject,我需要创建调度程序并在部署应用程序后开始。我尝试过的:我用接口创建EJB:
@Local
public interface ISchedulerBean {
public void executeTimer(Timer timer);
public void createTimer();
}
无状态会话 bean 实现此接口。createTimer 方法从 TimerService 创建计时器实例。这部分代码工作正常。另外,我需要在应用程序部署后调用方法 createTimer() 。我试过:
添加侦听器 servletContext:
公共类SchedulInitialIserContextListener实现了ServletContextListener {//查找EJB EJB私有WebServicElocitator WebServicElocator;私有SchedulerService调度服务;
public SchedulInitialiserContextListener(){WebServicElocator = new WebServicElocator();SchedulerService = webServiceLocator.getSchedulerService();}
public void contextDestroyed(ServletContextEvent ctx) { } public void contextInitialized(ServletContextEvent ctx) { schedulerService.createTimer(); }
}
使用 1 创建 Servlet,其中在 init() 方法中注入 SchedulerBean 并调用 createTimer。
但这不起作用,因为首先webspere部署Web应用程序,调用侦听器,初始化servlet,然后才部署所有ejb所在的ejb.jar。我可以在 webshpere 日志文件中看到这一点。因此,当我尝试 get ejb throw @EJB 注释或查找时,我得到异常,因为尚未找到 ejb。可能是在部署 ejb 模块或更改部署顺序后启动计时器的其他方法?
解决方案
您可以设置模块的启动顺序。
假设您使用 Rational Application Developer 进行开发,请执行以下操作:
右键单击您的 Ear 项目,然后单击 Java EE -> 打开 WebSphere Application Server Deployment。
查找“应用程序”部分,您将看到所有模块,并且可以设置 Start weight
为每一个。
确保包含上下文侦听器的 Web 项目具有最大值,这样应该没问题。
- 此操作会在您的ear项目的META-INF下创建一个ibmconfig目录,请确保将其打包在构建过程中