gpt4 book ai didi

jax-ws - JAX WS 多请求管理

转载 作者:行者123 更新时间:2023-12-01 11:50:37 30 4
gpt4 key购买 nike

我开始使用 JAX WS 研究 Java Web 服务。我正在阅读的书的第一章展示了如何仅使用 java SE 构建和部署简单的 jax ws web 服务。特别是,Web 服务是通过 Endpoint 类发布的。发布 Web 服务后,作者指定“开箱即用,端点发布者一次处理一个客户端请求time ... 如果给定请求的处理应该挂起,那么所有其他客户端请求都被有效阻止。一个例子在最后本章展示 Endpoint 如何并发处理请求这样一个挂起的请求就不会阻止其他请求。”

为了看到这一点,我尝试向具有 2 个线程的 Web 服务发送两个请求。这是代码:

@WebService(endpointInterface = "ProveVelociJava.WS.MyWsWithJavaSE.SayHello")
public class SayHelloImpl implements SayHello {
public String greetings(String param) {
System.out.println("\nStarting " + param + "...\n");
if(param.equals("miao")) {
try {
Thread.sleep(9000);
}
catch(Exception e) {}
}
System.out.println("Ended " + param + "\n\n");
return "Hi, " + param;
}
}

public class SayHelloPublisher {
public static void main(String[ ] args) {
// 1st argument is the publication URL
// 2nd argument is an SIB instance
Endpoint.publish("http://127.0.0.1:9899/say", new SayHelloImpl());
}
}

class MyClient extends Thread {
private static URL url;
private static QName qname;
private static Service service;
private static SayHello eif;

static {
try {
url = new URL("http://127.0.0.1:9899/say?wsdl");
qname = new QName("http://MyWsWithJavaSE.WS.ProveVelociJava/", "SayHelloImplService");
service = Service.create(MyClient.url, MyClient.qname);
// Extract the endpoint interface, the service "port".
eif = service.getPort(SayHello.class);
}
catch(Exception e) {}
}
private String name;
public MyClient(String n) {
name = n;
}
public void run() {
System.out.println(MyClient.eif.greetings(this.name));
}
public static void main(String args[ ]) throws Exception {
MyClient t1 = new MyClient("miao");
MyClient t2 = new MyClient("bau");
t1.start();
t2.start();
}
}

如果我启动 MyClient 类,名为“miao”的线程发送它的请求然后进入休眠状态。但是,名为“bau”的线程不会等待前一个线程,它的请求会立即得到满足。

我错过了什么吗? java线程可以模拟多个请求吗?

非常感谢您的帮助,妮可。

最佳答案

我下载了 JAX-WS 2.0 规范,它反驳了我正在阅读的书所说的内容:

"An endpoint consists of an object that acts as the Web service implementation (called here implementor) plus some configuration information ... An Endpoint will be typically invoked to serve concurrent requests, so its implementor should be written so as to support multiple threads. The synchronized keyword may be used as usual to control access to critical sections of code. For finer control over the threads used to dispatch incoming requests, an application can directly set the executor to be used"

(http://jcp.org/aboutJava/communityprocess/final/jsr224/index.html,第 5.2.2 节“发布”,第 67 页)

这本书谈到了 JAX-WS 2.1,但我没能下载该版本的规范。无论如何,JAX-WS 2.2 规范(当前版本)确认了 Endpoint 类的并发性质(它包含与上述相同的语句)。

我不知道这本书的作者到底是什么意思。

关于jax-ws - JAX WS 多请求管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587646/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com