我正在使用CXF编写Java Web服务。我有以下问题:客户端从Web服务调用方法。 Web服务必须并行执行两项操作并启动两个线程。其中一个线程需要客户端的一些其他信息。调用webservice方法时无法添加此信息,因为它取决于webservice中的计算。我无法重新设计网络服务,因为它是课程设置的一部分,而且这些设备表明我必须这样做。我想暂停线程并在客户端传递其他信息时通知它。不幸的是,在Java中不可能通知特定的线程。我找不到任何其他方法来解决我的问题。
有人提出建议吗?
答案 0 :(得分:1)
IMO对于Web服务请求实际上不完整是非常奇怪的。为什么请求不能一次性传递所有信息?我会尝试重新设计您的服务,如果不传递处理请求所需的所有信息,则会失败。
编辑:好的,如果你真的有这样做,当你收到第一个请求时,我实际上不会开始新的线程。我将存储来自第一个请求的信息(无论是在数据库中还是仅存储在内存中,如果这只是虚拟的),然后当第二个请求进入时,启动线程。
答案 1 :(得分:1)
我在考虑了这个之后编辑了我的答案。
你有一个相当复杂的架构,如果你的客户需要来自服务器的信息才能完成请求,那么我认为你需要发布一个或多个'帮助'方法。
例如,您可以发布(没有所有Web Service注释):
MyData validateMyData(MyData data);
boolean processMyData(MyData data);
然后,客户端会根据需要多次调用validateMyData()
,直到知道它有完整的信息为止。服务器可以修改(通过计算,数据库查找或其他任何)MyData
中的变量,以帮助完成信息并将其传递回客户端(用于更新UI,如果有的话)。
信息完成后,客户端可以调用processMyData()
来处理完整的请求。
这样做的好处是可以在不需要后台线程的情况下实现服务器方法,因为它们应该能够使用服务器环境提供的请求线程来完成它们。
唯一需要注意的是,如果MyData
变得非常大,并且您不想继续在客户端和服务器之间来回传递它。在这种情况下,您需要提供一个较小的类,它只包含服务器要对MyData
进行的更改,并排除不需要更正的数据。