如何在JavaEE中实现持续运行的进程

Mr.*_*iss 5 java ejb java-ee jboss7.x

您如何建议在JavaEE中实现以下内容:

  1. 我需要在app服务器中有一个后台进程(我正在考虑一个有状态会话bean),它会持续监视"某些东西",如果某些条件适用,它会对数据库进行操作.

  2. 最重要的是,它必须由各种客户远程操纵.

所以,基本上,我需要一个不断运行的进程,保持其状态,并为许多远程客户端的方法调用打开.

由于我是JavaEE的新手,我有点困惑使用哪种方法/"技术".帮助将不胜感激.

dce*_*chi 7

您可以将无状态会话或单例bean与EJB计时器和计时器服务结合使用.bean将是远程客户端用来控制后台进程的接口.计时器服务会定期回调bean上的方法以验证条件.计时器由EJB容器自动持久化,因此当bean客户端断开连接时,它们将完成工作.

这是一个草图:

@Singleton
...
public TimerMangerbean implements TimerManager {

   @Resource
   private TimerService timerService;

   public void startMonitoring() {
      //start in 5 sec and timeout every 10 minutes
      Timer timer = timerService.createTimer(5000, 60000, "MyTimer");
   }

   public void stopMonitoring() {
      Collection<Timer> timers = timerService.getTimers();
      for(Timer timer : timers) {
         //look for your timer
         if("MyTimer".equals(timer.getInfo())) {
            timer.cancel();break;
         }
      }
   }

   //called every 10 minutes
   @Timeout
   public void onTimeout() {
      //verify the condition and do your processing
   }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅:在Oracle JavaEE教程中使用计时器服务