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

标签 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;
}

是否有任何解决方案来保持线程运行?

最佳答案

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

The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt to start, stop, suspend, or resume a thread, or to change a thread’s priority or name. The enterprise bean must not attempt to manage thread groups.These functions are reserved for the EJB container. Allowing the enterprise bean to manage threads would decrease the container’s ability to properly manage the runtime environment.

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

关于java - JAX-WS Web 方法中的自定义线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14439222/

相关文章:

java - HDFS - 设置竞争条件

java - 如何根据第一个组合框选择过滤第二个组合框中的内容

java - 在没有 EJB 的情况下拦截 SOAP RPC 方法响应

java - JAX-WS RI 生成带有硬编码文件路径的代码?

java - SOAP 服务中不可见或隐藏的 XML 元素

java - 构建 apache Spark 时出错

java - VAVR Match(Option).of() 无法正常工作

python - 'sys.excepthook' 和线程

python - 带有 python 循环的多线程

python - 当主线程调用 sys.exit() 时,守护线程是否会被终止?