我在Java EE 5和WebSphere 7.0上有WebProject,我需要创建调度程序并在部署应用程序后开始。我尝试过的:我用接口创建EJB:

@Local
public interface ISchedulerBean {

    public void executeTimer(Timer timer);
    public void createTimer();
}

无状态会话 bean 实现此接口。createTimer 方法从 TimerService 创建计时器实例。这部分代码工作正常。另外,我需要在应用程序部署后调用方法 createTimer() 。我试过:

  1. 添加侦听器 servletContext:

    公共类SchedulInitialIserContextListener实现了ServletContextListener {//查找EJB EJB私有WebServicElocitator WebServicElocator;私有SchedulerService调度服务;

    public Sc​​hedulInitialiserContextListener(){WebServicElocator = new WebServicElocator();SchedulerService = webServiceLocator.getSchedulerService();}

    public void contextDestroyed(ServletContextEvent ctx) {
    }
    
    public void contextInitialized(ServletContextEvent ctx) {
        schedulerService.createTimer();
    }
    

    }

  2. 使用 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目录,请确保将其打包在构建过程中
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top