我制作了一个 Java Swing 应用程序。现在我想让它成为一个客户端-服务器应用程序。当服务器上的数据发生更改时,应该通知所有客户端,所以我不是在寻找 Web 服务。Client-Server 应用程序将在单个 LAN 上运行,它是一个业务应用程序。服务器将包含一个数据库 JavaDB。
什么技术和库最容易上手?我应该使用 Sockets 从头开始实现它,还是应该使用 Java RMI 或 JMS?还是有其他更容易开始的替代方案?
有没有我应该使用的服务器库?码头是替代品吗?
我制作了一个 Java Swing 应用程序。现在我想让它成为一个客户端-服务器应用程序。当服务器上的数据发生更改时,应该通知所有客户端,所以我不是在寻找 Web 服务。Client-Server 应用程序将在单个 LAN 上运行,它是一个业务应用程序。服务器将包含一个数据库 JavaDB。
什么技术和库最容易上手?我应该使用 Sockets 从头开始实现它,还是应该使用 Java RMI 或 JMS?还是有其他更容易开始的替代方案?
有没有我应该使用的服务器库?码头是替代品吗?
鉴于您已经拥有该应用程序,也许最简单的事情是确定您在客户端和服务器之间需要的接口,首先重构您的应用程序以使用该接口在后端/前端之间进行通信 -在同一进程内结束。
然后你就可以开始把它分开了。一个简单的解决方案是使用 RMI 将其分开(因为您正在谈论 Java 对象并具有 Java 方法调用)。Spring 包含有用的工具来简化/自动化接口的 RMI 暴露。
对于通知要求,一个简单的 UDP 多播(或广播)就足够了。
请注意,一旦您拆分应用程序,您就会遇到问题。维护一致的数据视图,管理及时的更新,在服务器宕机时处理案例,当你有很多客户端时可能出现的加载问题等等。从某种意义上说,将应用程序拆分为客户端和服务器只是新架构的开始过程。
这是 J2EE 所做的大部分工作,但它是一个全新的学习曲线,因为它们已经预先解决了您将遇到的许多问题,而许多您可能不会遇到,因此添加了许多新技术。
但在最基本的情况下,J2EE 只是回答了这个问题。
Mina作为网络应用程序框架是一个不错的选择,用于为此目的构建一个简单的服务器——它比使用原始套接字要好得多。
如果你真的需要一个应用服务器,那么你可以看看JBoss。它还提供了一个远程组件(作为 Mina 之类的替代品):
http://www.jboss.org/jbossremoting
不过,您可能不太需要Enterprise Java Beans。在大多数情况下,一个简单的基于POJO的框架就足够了——您可以将它与一个依赖注入框架(例如Guice )完全结合起来:
http://code.google.com/p/google-guice/
或春天。保持简单,除非确实需要,否则不要使用 J2EE 服务器。希望有帮助。
我曾在这样的项目中工作。我们使用 J2EE 实现了客户端 Swing 和服务器端。我们使用了 EJB、Stateless bean 和 Message Driven Beans。我也参与过一个设备跟踪、管理项目。我们的客户是卡车+Swing 用户,我们使用 Servets+TCP/UDP、Apache Mina 框架来处理和保持连接。
我在 Java Swing 客户端/服务器应用程序中工作了将近 3 年。我建议您选择 RMI/EJB。我们开发的初始应用程序是使用 RMI/EJB 进行此操作,以实现客户端与服务器之间的通信,而 WebLogic 作为服务器。
但后来我们发现应用程序中包含许多“类似浏览器”的功能,例如会话超时等,因此,我们使用了通过 HTTP 包装 RMI 调用的BrightSide框架。我们所做的另一项改进是我们用开源 JBoss 服务器替换了 Weblogic。
使用 HTTP 封装调用将变得非常方便,您可以使您的 Swing 应用程序变得非常丰富。稍后,当情况要求您严格使用网站时,您可以使用jnlp部署您的 Swing 。
希望这有帮助。