我正在使用 CXF 编写 Java Web 服务。我遇到以下问题:客户端从 Web 服务调用方法。 Web 服务必须并行执行两件事并启动两个线程。其中一个线程需要来自客户端的一些附加信息。调用 Web 服务方法时无法添加此信息,因为它依赖于 Web 服务中完成的计算。我无法重新设计网络服务,因为它是类(class)作业的一部分,并且作业规定我必须这样做。我想暂停线程并在客户端提供附加信息时通知它。不幸的是,在 Java 中不可能通知特定线程。我找不到任何其他方法来解决我的问题。
有人有建议吗?
最佳答案
经过更多思考后,我编辑了我的答案。
您有一个相当复杂的架构,如果您的客户端需要来自服务器的信息才能完成请求,那么我认为您需要发布一个或多个“帮助程序”方法。
例如,您可以发布(无需所有 Web 服务注释):
MyData validateMyData(MyData data);
boolean processMyData(MyData data);
然后,客户端会根据需要多次调用 validateMyData()
,直到它知道自己拥有完整的信息。服务器可以修改(通过计算、数据库查找或其他方式)MyData
中的变量,以帮助完成信息并将其传递回客户端(用于更新 UI,如果有)一)。
信息完成后,客户端就可以调用 processMyData()
来处理完整的请求。
这样做的优点是无需后台线程即可实现服务器方法,因为它们应该能够使用服务器环境提供的请求线程来完成其工作。
唯一需要注意的是,如果MyData
可能变得非常大,并且您不想继续在客户端和服务器之间来回传递它。在这种情况下,您需要提供一个较小的类,其中仅包含服务器想要对 MyData
进行的更改,并排除不需要更正的数据。
关于java - 暂停和通知 Java Web 服务中的特定线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019659/