JAX-WS Web方法中的自定义线程

时间:2013-01-21 13:00:13

标签: java multithreading jax-ws

我通过JAX-WS遇到Web服务问题。如果我在web方法中启动线程,它将在与客户端的连接结束时结束。

示例:

@WebMethod(operationName="test")
public boolean test()
{
  Thread th = new MyThread();
  th.start();
  // Thread is running
  ...
  return true;
  // Now thread th ends;
}

有没有解决方案让线程保持运行?

2 个答案:

答案 0 :(得分:5)

问题是您正在尝试在Java EE应用服务器上启动线程。手动线程违反了Java EE规范,这就是您遇到问题的原因。在某些应用服务器上,您根本无法启动一个单独的线程。来自规范:

  

企业bean不得尝试管理线程。企业bean不得尝试启动,停止,暂停或恢复线程,或更改线程的优先级或名称。企业bean不得尝试管理线程组。这些函数是为EJB容器保留的。允许企业bean管理线程会降低容器正确管理运行时环境的能力。

如果您需要在单独的线程上完成工作,则需要使用应用服务器提供的工具进行异步工作。一些选项是将数据排队到JMS队列以供MDB处理或者可能使用异步ejb请求(想想在Java EE 6中)。

答案 1 :(得分:0)

如果你只是想在返回之前确定线程已经完成 - 最简单的方法是th.join()。此方法等待线程死亡。