2013-02-23 47 views
2

我是新手......我有一个Java Swing应用程序,它在我的机器上运行良好。我想通过Citrix从服务器访问此应用程序。所以当我点击发布的图标时,它会运行jar文件中的主要方法,并使我能够访问应用程序。此应用程序将能够访问数据库服务器中的数据库。Java Swing - 多用户应用程序的单用户应用程序

但我想复式用户在同一时间访问应用程序,这正是我的问题是:

  1. 我想创建可用线程的n个用户数为n(IE)我的可以设置并发访问的限制。但是什么是切入点.....我的意思是当我点击发布的图标时,这意味着每次调用主要方法。

  2. 我可以想到从Logic层分离我的用户界面......但我不知道该怎么做。当然我遵循MVC模型。我的问题是在每次访问应用程序时创建gui的多个实例。

  3. 最后我想用DB连接池。所以,这是否意味着我必须创建一个单独的java程序来创建这个池,我的应用程序将使用它的数据源?

任何人都可以请'点'在正确的方向吗?我不是在寻找具体的想法,而只是想法如何创建这个多用户应用程序。

+0

DB是唯一的共享资源吗?如果是这样,我会认为允许每个用户自己的Java过程会更简单。 – 2013-02-23 05:05:16

+0

@Michael ....是数据库是唯一的共享资源。什么是java进程? – user547453 2013-02-23 05:10:05

回答

5

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

这种工作方式如下:

  • 每个用户都将获得客户端应用程序自身的运行实例。这可以在他们自己的机器上。
  • 的服务器应用程序的单一实例(或者群集)接受到数据库
  • 客户端应用交谈的服务器应用程序时,他们需要访问或更改数据从多个客户端和会谈的连接。您可以使用各种不同的通信方法。
  • 可选的,服务器应用程序可以将通知发送到客户端(例如,在数据被其他客户端更新的情况下)

,如果你高兴,让客户端连接到您无需服务器应用程序做同一数据库。这是简单的设置,但有一些缺点:

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

鉴于您已经有一个工作应用程序,第二个选项可能更容易移动到。只要注意缺点:第一种选择通常是更好的架构。

+0

@mikera ... 1)如果我使用客户端 - 服务器模型,它基本上运行2个java程序,一个在服务器端,然后是多个客户端? 2)我将如何保持我的服务器端程序运行?我需要将它作为服务运行吗? 3)我不知道我的客户如何打电话给服务器。你能给我一个客户端需要的代码指定服务器URL并提交请求的信息的例子吗? – user547453 2013-02-23 05:23:44

+1

1)它是服务器的一个运行程序,加上每个客户端的额外的一个2)你可以使它成为一个服务,或者只是脚本它在服务器启动时启动3)超出问题的范围...也许看一看在Netty和/或kryonet为图书馆和例子 – mikera 2013-02-23 05:37:39