Java Swing—单用户应用程序到多用户应用程序

Java Swing—单用户应用程序到多用户应用程序,java,swing,layer,multi-user,code-separation,Java,Swing,Layer,Multi User,Code Separation,我是一个新手……我有一个Java Swing应用程序,它在我的机器上运行得很好。我想通过Citrix从服务器访问此应用程序。因此,当我单击published图标时,它将运行jar文件中的main方法,并使我能够访问应用程序。此应用程序将能够访问数据库服务器中的数据库 但我希望多个用户同时访问该应用程序,这就是我的问题所在: 我想为n个用户创建n个可用线程(即,我可以设置并发访问的限制)。但是入口点是什么…我的意思是当我点击发布的图标时,它意味着每次调用main方法时 我可以考虑将我的用户界面从逻

我是一个新手……我有一个Java Swing应用程序,它在我的机器上运行得很好。我想通过Citrix从服务器访问此应用程序。因此,当我单击published图标时,它将运行jar文件中的main方法,并使我能够访问应用程序。此应用程序将能够访问数据库服务器中的数据库

但我希望多个用户同时访问该应用程序,这就是我的问题所在:

  • 我想为n个用户创建n个可用线程(即,我可以设置并发访问的限制)。但是入口点是什么…我的意思是当我点击发布的图标时,它意味着每次调用main方法时

  • 我可以考虑将我的用户界面从逻辑层分离出来……但我不知道怎么做。当然,我遵循的是MVC模式。我的问题是在每次访问应用程序时创建多个gui实例

  • 最后,我想使用数据库连接池。那么,这是否意味着我必须创建一个单独的java程序来创建这个池,并且我的应用程序将使用它的数据源


  • 谁能给我指出正确的方向?我不是在寻找具体的想法,而是关于如何创建此多用户应用程序的想法。

    通常,对于多用户Swing应用程序,您希望将应用程序的“客户端”部分与“服务器”应用程序分开

    这项工作如下:

    • 每个用户都将获得自己的客户机应用程序运行实例。这可以在他们自己的机器上进行
    • 服务器应用程序是一个实例(或者可能是一个集群),它接受来自多个客户端的连接并与数据库对话
    • 客户机应用程序在需要访问或更改数据时与服务器应用程序通信。您可以使用多种不同的通信方法
    • 或者,服务器应用程序可以向客户端发送通知(例如,在数据由另一个客户端更新的情况下)
    如果您愿意让客户端连接到同一个数据库,则可以不使用服务器应用程序。设置起来比较简单,但也有一些缺点:

    • 您需要更加小心并发访问数据库/来自试图同时更改相同数据的不同客户端的潜在损坏
    • 您需要允许从可能不受信任的客户端连接到数据库。这是一种安全风险

    考虑到您已经有了一个可以工作的应用程序,第二个选项可能更容易使用。请注意缺点:第一种选择通常是更好的体系结构。

    DB是唯一的共享资源吗?如果是这样,我认为允许每个用户使用自己的Java进程会更简单。@Michael……是的,DB是唯一的共享资源。什么是java进程?@mikera…1)因此,如果我使用客户机-服务器模型,它基本上运行两个java程序,一个在服务器上&然后是相同数量的客户机?2) 如何保持服务器端程序运行?我需要将其作为服务运行吗?3) 我不知道我的客户将如何与服务器通话。你能给我一个客户端指定服务器URL然后提交请求信息所需的代码示例吗?1)这是一个服务器运行的程序,每个客户端都有一个额外的程序2)你可以将其设置为服务,或者只是编写脚本在服务器启动时启动3)超出问题的范围。。。也许可以看看Netty和/或kryonet的库和示例