通过EJB扩展线程实现Runnable

时间:2015-04-10 10:47:58

标签: java asynchronous ejb code-injection runnable

让我们说类MyCoolProcess具有我的应用程序的逻辑,需要在其自己的线程中调用。我们将创建一个线程,调用它并继续应用程序 这个类是一个EJB;用@Stateless

注释

现在我们有MyController类;这将打电话给新的线程。

代码:

public class MyController {

  @EJB
  MyCoolProcess p;

  public Response foo() {
    Thread t = new Thread() {
      public void run() {
        p.run();
      }
    };
    t.start();
    // continues ...
  }

 }

@Stateless
public class MyCoolProcess {

  public void run() {
    // heavy task
  }
}

正常工作;重点是......在那个解决方案之前,我已尝试使用Runnable界面。这是我第一次想要的。方法是:

public class MyController {

  @EJB
  MyCoolProcess p;

  public Response foo() {
    Thread t = new Thread(p);
    t.start();
    // continues ...
  }

 }

@Stateless
public class MyCoolProcess implements Runnable {

  @Override
  public void run() {
    // heavy task
  }
}

这不起作用。实际上,服务器无法启动。崩溃试图注入依赖项。如果我不是EJB,我就无法实现接口Runnable为什么

而且......有没有办法以Runnable方式而不是匿名类?

1 个答案:

答案 0 :(得分:1)

来自EJB规范:

  

企业bean不得尝试管理线程。企业bean不得尝试启动,停止,暂停或恢复线程,或更改线程的优先级或名称。企业bean不得尝试管理线程组。

请参阅Adam's Blog