我有一个在JavaFX中实现的应用程序,它将被迁移到Web平台,但这需要一些时间。
与此同时,我正在努力解决有关其用途的一些问题。有些用户需要从网络驱动器启动jar,因为他们的计算机无法访问数据库。只有jar所在的驱动器才能访问数据库。
我怀疑是否从允许的网络驱动器运行jar将解决此问题。另外,JNLP可以解决这个问题吗?
我很感激任何帮助。
答案 0 :(得分:1)
有些用户需要从网络驱动器启动jar,因为他们的计算机无法访问数据库。只有jar所在的驱动器才能访问数据库。我怀疑的是,从允许的网络驱动器运行jar是否能解决这个问题。
它无法直接使用。
JavaFX是一种客户端技术,它在客户端PC上运行。如果客户端PC无法直接访问数据库,则该客户端PC上也不会运行JavaFX应用程序。
此外,JNLP可以解决这个问题吗?
不,如果您的网络架构中不允许从客户端直接访问数据库,除了基于JNLP的客户端之外,还需要一个中间层来实现此目的。
讨论此问题的一些解决方案
通常,您所描述内容的体系结构将构建为multi-tier app。
有一个合理的high level overview of such an architecture here。
现在,应用服务器通常会提供JSON数据的REST API,这是基于HTML的JavaScript Web应用程序可以轻松使用的。使用嵌入REST客户端的JavaFX应用程序也可以轻松使用此类API。应用程序服务器为REST API提供服务,并根据需要通过JPA或JDBC与数据库进行通信。但是,与客户端/服务器通信的许多替代技术相比,您可以选择任何您认为适合您的应用程序,开发风格和组织的技术。
春季产品特定讨论
当您声明使用Spring时,请考虑使用JavaFX SpringBoot application。
Spring还包含一项名为spring remoting的技术,用于促进客户端/服务器访问。 Spring远程处理提供多种通信技术。我建议坚持基于HTTP REST的直接技术,而不是其他技术,如RMI或AMQP,因为基于HTTP REST的后端也可以作为标准HTML / JavaScript webapp的后端,你也提到它可能是最终的适用于您的应用程序的目标客户端。
如果在客户端和服务器上使用Spring,请检查Spring的AsyncRestTemplate,并在其余模板的成功和失败回调中调用JavaFX的Platform.runLater API。或者,使用Spring RestTemplate并通过JavaFX concurrency mechanisms控制对服务器的调用。不确定哪个最适合您,可能是JavaFX Task中包含的标准RestTemplate。
以正确的方式执行此操作将允许应用程序UI在执行网络活动时保持响应(不阻止UI线程),并确保您不违反JavaFX线程规则(不访问控件或修改数据)绑定到JavaFX应用程序线程的JavaFX场景控件。)