gpt4 book ai didi

java - 使用公开为 @WebService 的基于 SOAP 的 @Stateless EJB 实现长轮询

转载 作者:行者123 更新时间:2023-12-01 05:53:45 27 4
gpt4 key购买 nike

我有一个预先存在的基于 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 服务调用的持久性造成的:

  1. 每个请求者都使用一个 Activity 的 http 监听器,因此这是不可扩展的,
  2. 当客户端断开连接时,GlassFish 会引发异常(SSL 异常,因为所有调用都必须通过安全 SSL 监听器(默认情况下为 http-listener-2))。

我需要使用 com.sun.grizzly.comet.CometEngine 吗? EJB 3.1 @Asynchronous 注释在这里有什么作用吗?我发现的所有示例都依赖于 Servlet API、AJAX 和其他不适用的技术。谢谢。

最佳答案

关于java - 使用公开为 @WebService 的基于 SOAP 的 @Stateless EJB 实现长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764177/

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