代码之家  ›  专栏  ›  技术社区  ›  Thomas Winsnes

javax.xml.ws.endpoint如何处理多个连接?

  •  4
  • Thomas Winsnes  · 技术社区  · 15 年前

    当您使用javax.xml.ws.endpoint.publish来处理传入的restful/soap请求时,它会为每个请求生成一个线程吗?还是我自己处理线程?

    我已经试着解决这个问题好几天了。文档提示线程,但没有具体的内容。

    博士说:

    为了获得更好的控制,可以在端点上设置执行器。 在用于分派传入请求的线程上。例如, 可以通过创建一个 threadpoolExecutor并在端点注册它。

    对于我来说,它看起来处理线程,但您将无法控制它们,因此添加一个线程池执行器来执行线程,您将拥有一个可以使用的线程池。这是对的吗?

    4 回复  |  直到 9 年前
        1
  •  4
  •   laz    15 年前

    检查科 5.2.7 JavaTM API for XML-Based Web Services specification (JAX-WS)似乎表明了这一点,尽管看起来有实现特定行为的空间。要真正了解正在发生的事情,您必须调查您使用的JAX-WS实现和特定的部署环境。我想,根据服务是部署在servlet容器中还是在独立进程中,行为可能会有所不同。您对线程的控制仅限于提供特定的 ThreadPoolExecutor 实施。截面 5.2.7 国家:

    5.2.7执行器

    Endpoint 实例可以配置为 java.util.concurrent.Executor . 然后,执行器将用于向应用程序发送任何传入的请求。这个 setExecutor getExecutor 方法 端点 可用于修改和检索为服务配置的执行器。

    <>一致性(执行者的使用): 如果在 端点 通过 设置执行程序 方法,然后实现必须使用它在发布 端点 借助于 publish(String address) 方法。如果使用 publish(Object serverContext)) 方法,一个实现可以使用指定的执行器,也可以使用另一个特定于正在使用的服务器上下文的执行器。

    <>一致性(默认执行者): 如果遗嘱执行人没有在 端点 ,一个实现必须使用它自己的执行器, java.util.concurrent.ThreadPoolExecutor 或类似的机制,以分派传入的请求。

    此外,章节 5.2.2 参考文献 5.2.7 在本节末尾附近:

    5.2.2出版

    端点 通常会被调用以服务并发请求,因此应该编写它的实现程序以支持多个线程。这个 synchronized 关键字可以像往常一样用来控制对代码关键部分的访问。为了更好地控制用于调度传入请求的线程,应用程序可以直接设置要使用的执行器,如第5.2.7节所述。

    我知道这可能不能准确回答你的问题,但希望它能给你指明一个方向,你可以得到你想要的答案。

        2
  •  3
  •   Flow Matt McDonald    11 年前

    Executor needs to be set 为了使端点多线程化。一个简单的多线程执行器是 fixed thread pool Executor.

    endpoint.setExecutor(Executors.newFixedThreadPool(4));
    

    这将允许您的Web服务同时接受4个连接。但要确保您的服务是线程安全的。

        3
  •  1
  •   Thomas Winsnes    15 年前

    在官方的Doc中,我找不到答案,但在玩它并阅读“Java Web服务:运行和运行”之后,它似乎是这样做的。 为每个连接生成线程。所以服务被阻塞,直到完成一个请求,然后处理一个新的请求。

        4
  •  1
  •   Abhishek    12 年前

    publish(url,serviceimplobj)在给定的url处发布WebService。分配给请求处理的线程数真正由JVM控制,因为这是一个由JVM本身处理的轻量级部署。

    为了更好地说明,您可以在服务端打印当前线程名,并且可以看到服务线程是从由JVM管理的线程池分配的。

    [pool-1-thread-1]: Response[57]:
    [pool-1-thread-5]: Response[58]:
    [pool-1-thread-4]: Response[59]:
    [pool-1-thread-3]: Response[60]:
    [pool-1-thread-6]: Response[61]:
    [pool-1-thread-6]: Response[62]:
    

    我用过JDK1.6.0_35

    XJC版本 XJC版本“JDK 6中的JAXB 2.1.10” 用于XML绑定(JAXB)的JavaTM架构参考实现(构建JAXB JDK 6中的2.1.10)