为Swing-JavaFX / RMI / EJB3.0应用程序定义Java体系结构的想法

时间:2010-12-09 00:36:57

标签: java swing ejb-3.0 rmi distributed-computing

问题

我们参与了一个新项目,用于开发一个具有多台PC的应用程序,这些PC将充当通用计算机。还有一台计算机将不时作为主机来控制客户的所有进程。该计算机必须通过服务器机器向所有其他计算机发送消息,要求例如注册帮助。此时,在客户端计算机中运行的进程必须获得对计算机的控制,并且仅作为运行该应用程序的从属计算机,直到从主计算机发送新消息以释放它们为止。之后,客户端计算机再次充当通用计算机。

The following scheme试图解释CM(控制机器)通过服务器(SRVR)获得SM(从机)的访问后发生的事情

  1. 控制机器CM发送消息以向服务器注册协助 2 SRVR接收消息,记录一些信息并向SM发送注册协助消息
  2. 正在等待消息的正在运行的SM进程在每个SM中获得完全控制
  3. 用户通过SM中的视图选择操作,并且机器会向SRVR发送响应
  4. SRVR接收响应并将其广播到所有计算机,包括结果计算机(RM)以使用服务器中的新状态(SRVR)更新视图
  5. CM将结束注册消息发送给SRVR。
  6. SRVR将消息广播给所有SM,应用程序视图关闭,应用程序再次进入侦听状态。
  7. 声明:

    • 一切都需要在某种Java技术中完成
    • 所有机器都在运行GNU / Linux / Gnome(Ubuntu)
    • JPA对于日志记录和持久性是必需的
    • JavaFX将根据Oracle进行更改,因为他们正在考虑放弃脚本语言

    问题是:

    1. 您将在视图中使用哪种Java技术组合?我的观点是使用Swing,也许可以通过SwingComponent.wrap(loginPanel)将其嵌入到FX中,以帮助图形设计人员进行更好的视觉工作(在此应用程序中必须使用)。请考虑绑定选项JSR-295(现在我已经死了)或一些适当的选择。

    2. 您如何维护应用程序客户端的更新,我的意见是通过Java Web Start并将其作为小程序提供。

    3. 如果SRVR使用带有EJB 3.0的Java EE来访问远程对象,这样可以吗?如果是这样,您将如何将/ model / EJB与RMI集成。我对RMI / EJB集成没有太大的经验,我不确定它是否正确。特别是因为EJB规范已经信任RMI。但是,如何从会话Bean(我可以看到有状态的)广播消息来更新视图?

    4. 必须在注册为观察员的所有视图(其他SM,RM和CM)中查看SM中选择的任何选项。你会建议一个模型/架构/产品吗?

    5. 一旦SM应用程序被唤醒,哪种方法可以让SM应用程序获得全面控制? -remember,它是Linux -

    6. 如何在分布式上下文中应用观察者模式?

    7. 此安排的硬件安排是否正确?

    8. 我知道这些问题很多,我不是要开始讨论这个问题,我知道可能会有很多不同的意见,我有兴趣听取所有这些意见,包括实施细节。我正在寻找你们的一些反馈意见,我们将非常感谢你们的意见。提前谢谢!

1 个答案:

答案 0 :(得分:0)

这就是我解决这个问题的方法。

<强> 1。您将在视图中使用哪种Java技术组合?我的观点是使用Swing,也许可以通过SwingComponent.wrap(loginPanel)将其嵌入到FX中,以帮助图形设计人员进行更好的视觉工作(在此应用程序中必须使用)。请考虑绑定选项JSR-295(现在我已经死了)或一些适当的选择。

在这种情况下使用Swing,考虑的是它是一种最稳定的技术,如果毕竟JavaFX将成为一个库,它可以在以后用于为应用程序提供更好的方面,现在视图是定制的使用Swing LAF

<强> 2。您如何维护更新的应用程序客户端,我的观点是通过Java Web Start并将其作为小程序提供。

该要求是通过shell脚本和ssh提供的。经过一些更新后,客户端应用程序将重新部署到客户端计算机

第3。如果SRVR使用JEE和EJB 3.0来访问远程对象,这样可以吗?如果是这样,您将如何将/ model / EJB与RMI集成。我对RMI / EJB集成没有太大的经验,我不确定它是否正确。特别是因为EJB规范已经信任RMI。但接下来如何从Session Bean(我可以看到有状态的)广播消息来更新视图?

RMI架构很简单。在这种情况下,JBoss A.S. application是通过rmiregistry部署在每台客户机上的RMI服务器的客户端。当客户端应用程序继续运行时,RMI存根是服务器和客户端之间唯一的共享类,此接口允许您调用客户端方法。小心使您的JPA模型类可序列化。

<强> 4。必须在注册为观察者的所有视图(其他SM,RM和CM)中查看SM中选择的任何选项。你会建议一个模型/架构/产品。

它的实现方式与前一点相同,但重要的一点是RMI不支持多播消息传递,因此如果需要与许多注册客户端进行消息传递,请务必小心,因为如果您有100台广播消息的计算机相互之间,它意味着通过网络发送100x100条消息。

<强> 5。一旦其进程被唤醒,哪种方法可以使SM应用程序获得全面控制? -remember,它是Linux -

好吧,Java Swing的JFrame有一种方法来维护Window ALWAYS_ON_TOP。如果将它与UNDECORATED_FRAME结合使用,其他应用程序将继续运行,但它们永远不会实现焦点。

<强> 6。如何在分布式上下文中应用观察者模式?

它以相同的方式应用,我们只需要注意何时注册观察者以及何时取消注册它们。

<强> 7。硬件安排是否适用于此应用程序?

硬件安排以问题中包含的图形显示的方式部署。

感谢所有这些,至少检查过这个问题。