Java 如何在GlassFish上构建从JAX-WS到Swing客户端的通知?
我有一个广泛分布的JavaSwing应用程序,它是Glassfish 3.1.2服务器上JAX WebService EJB的web服务客户端 我希望能够将字符串通知分发给所有用户,这些用户在阅读该通知之前保持活动状态。通知只需要存在于Swing客户端中 我创建了一个超级用户web门户,用于输入字符串数据并将其保存到数据库中 我的问题是:Java 如何在GlassFish上构建从JAX-WS到Swing客户端的通知?,java,web-services,swing,notifications,Java,Web Services,Swing,Notifications,我有一个广泛分布的JavaSwing应用程序,它是Glassfish 3.1.2服务器上JAX WebService EJB的web服务客户端 我希望能够将字符串通知分发给所有用户,这些用户在阅读该通知之前保持活动状态。通知只需要存在于Swing客户端中 我创建了一个超级用户web门户,用于输入字符串数据并将其保存到数据库中 我的问题是: 向我的客户(推送)分发此数据字符串通知的最佳技术是什么 我应该如何访问数据库以了解通知是否已被查看?(这样我就可以停止在客户端上显示“新通知”) 或者,如果有
- 让客户端每10分钟调用一次Web服务,以检查是否有任何新通知
- 为数据库创建一个通知表并查看通知。将“我的用户”表链接到“已看到的通知”表。看到的通知非常基本,只有3列:NotificationID、UserID、TimeSeen
如果您需要(几乎)实时通知,请查看JMS(尤其是)。是其中一种实现,如果您使用JBoss,它很容易使用。我建议使用消息队列服务器。就像有人建议的HornetQ或ActiveMQ,如果您愿意,可以将其嵌入服务器。模拟推送通知的一种方法是。这 这项技术被称为。虽然这更常见 在基于REST的服务中,它同样可以在 JAX-WS 对于JAX-WS,您需要调查:
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);
NotificationService svc=。。。;
UserId UserId=。。。;
AsyncHandler=新的AsyncHandler()
{
公共无效处理响应(响应)
{
Notification Notification=response.get();
//更新swing gui
NotificationID NotificationID=notification.getId();
markNotificationAsSeen(userId,notificationId);
//永远继续轮询(或输入一些逻辑停止)
getNotificationAsync(userId,this);
}
};
Future invocation=svc.getNotificationAsync(userId,handler);