Qui*_*nma 5 java notifications swing web-services
我有一个广泛分布的java swing应用程序,它是来自Glassfish 3.1.2服务器上的JAX WebService EJB的Web服务客户端.
我希望能够向所有保持活动状态的用户分发字符串通知,直到他们读取它为止.通知只需要存在于Swing客户端中.
我创建了一个超级用户Web门户,用于输入String数据并将其保存到数据库中.
我的问题是:
或者,如果有一个指南的参考可以很好地工作,我找不到一个.
我的想法:
模拟推送通知的一种方法是长轮询.这种技术称为Comet或Reverse AJAX.虽然它在基于REST的服务中更常见,但它可以在JAX-WS中轻松完成.
对于JAX-WS,您需要调查:
让客户每10分钟拨打一次网络服务,检查是否有新的通知
相反,使用长轮询,您可以立即建立初始客户端连接.但是,不是服务器立即响应,而是挂起到连接(异步).然后,当需要推送通知时,它会响应现有连接.
使用这种技术,只要服务器上的信息可用,它就会被"推送"到客户端.
为数据库创建通知表和通知.将我的用户表链接到通知看表.看到的通知是非常基本的,只有3列:NotificationID,UserID,TimeSeen.
听起来不错.将其公开为JAX-WS服务.当客户端收到消息时,让他们使用NotificationID调用它.
就像是:
NotificationService svc = ...;
UserId userId = ...;
AsyncHandler<Notification> handler = new AsyncHandler<Notification>()
{
public void handleResponse (Response<Notification> response)
{
Notification notification = response.get();
// update swing gui
NotificationID notificationId = notifcation.getId();
svc.markNotificationAsSeen(userId, notificationId);
// continue polling forever (or put in some logic to stop)
svc.getNotificationAsync(userId, this);
}
};
Future<?> invocation = svc.getNotificationAsync(userId, handler);
Run Code Online (Sandbox Code Playgroud)