2013-02-23 76 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