我有一个预先存在的基于SOAP的Web服务,我想用它来提供基于长轮询的通知系统。我该如何实现呢?客户端当前是Java桌面富客户端,必须从其他连接的客户端接收更新。服务器是GlassFish 3.01。我有一个基本的,阻止的@WebMethod,但是由于它的使用我遇到了问题。这里有一些伪代码显示了web方法的想法:
@WebService(serviceName="mywebservice")
@Stateless
public class MyWebService {
@WebMethod
public String longPoll() {
short ct = 0;
while(someCondition == false && ct < 60) {
sleep(1000); // 1 sec
ct++;
}
if (someCondition)
return "got value";
else
return "";
}
}
在客户端,我使用Future对象异步调用它:
public Future<?> requestLongPollAsync(Date lastUpdate,
AsyncHandler<LongPollResponse> handler) {
try {
return mywebservice.longPollAsync(getXMLGregorianCalendar(lastUpdate),
handler);
}
// ...
}
客户端似乎工作正常。但是,我有两个问题,似乎是由于Web服务调用的持久性:
我需要使用com.sun.grizzly.comet.CometEngine吗? EJB 3.1 @Asynchronous注释在这里做了什么吗?我发现的所有示例都依赖于Servlet API,AJAX和其他不适用的技术。谢谢。
答案 0 :(得分:0)