背景
我很乐意为各种服务提供商建立一个中央预约系统。这是基于 GlassFish 3.1.1 上的 Java EE 6 构建的,利用 JSF 2、EJB 3.1 和其他 JEE6 标准。每个服务提供商都有自己的预约设备,在他们自己的连接到 Internet 的服务器上运行,但目前他们没有任何接口让他们的患者自己预约。
我的系统将通过我定义的 API 在服务提供商的系统上同步预约(响应用户请求),该 API 涉及通过 HTTP 流式传输 XML。这些预约预约请求是同步的,因为服务提供商将继续以老式方式(通过电话/柜台)直接在其系统中预约预约,并且无论出于何种原因,他们的系统保留拒绝此类请求的权利(以防止重复预约和其他原因)。因此,他们的系统保留了作为真相来源的地位。
出于显而易见的原因(主要是安全性),API 连接是由服务提供商的系统建立的。这意味着服务器(我的系统)正在发送请求,客户端(他们的系统)正在发送响应。
问题
我需要一些关于如何在 GlassFish 3.1.1 上使用 Java EE 6 通过 HTTP API 构建服务器推送 XML 的建议。我想到了一些不太理想的选择。其中一个涉及一个单例 bean,其中包含我的约会 ID 到他们的约会预订响应的映射。在这种情况下,我的系统会在有限的时间内(例如最多 10 秒)轮询地图,直到找到匹配的响应,然后返回响应,然后最终在 JSF UI 中处理该响应。同时,API servlet(或者可能是 JAX-RS Web 服务)轮询单例 bean 的请求,将它们转换为 XML 并将它们流式传输到服务提供者的输出流。
我确信必须有许多更好的方法来做到这一点,而不涉及每个连接的线程、阻塞、轮询等。
想法?
更新
我倾向于 Atmosphere/Jersey,但现在我意识到阻塞 I/O 在 NPTL 下是相当可扩展的,所以我在这方面很灵活。