2011-09-20 46 views
2

我正在開發一個桌面Java應用程序,該應用程序應該通過代理連接到Oracle數據庫,該代理可以是Servlet,EJB或其他您可以建議的代理。Oracle/Java應用程序,推薦體系結構

我的問題是應該使用什麼架構?

  1. 簡單的Servlets作爲客戶端和數據庫之間的代理,連接到數據庫並將結果發送回客戶端。

  2. 與EJB和遠程接口的企業應用程序來訪問數據庫

  3. ,我都沒有想到的任何其他選項。

感謝

通過一些ORM JDBC的

回答

1

根據您希望解決方案的可擴展性如何,您可以做出選擇。

  1. EJB(3)可以做出一個不錯的選擇,但你需要一個完整的應用服務器。

  2. 您可以直接使用jdbc連接,但會暴露數據庫的URL(因爲在每個客戶端桌面應用程序都會與數據庫建立連接,所以您無法集中並失去很多靈活性)。我不會推薦走這條路,除非你的應用程序真的很簡單。

  3. 您可以創建一個servlet充當代理,但它的繁瑣而不是可擴展的。你將不得不在兩端寫很多代碼

  4. 我會建議創建一個基於REST的服務,對數據庫執行所需的操作並在桌面應用程序中使用此服務。

+0

第3點,你能解釋爲什麼它是單調乏味的,不可擴展的,第4點不會開發基於REST的服務,還需要兩端編碼?感謝您的回覆 :)! – iahsan

+0

使用REST,您可以使用一些框架爲您生成服務。通過揭露服務網址來抽象出數據庫。所有客戶端通過http連接到您的服務。無需自定義通信協議/格式。 使用servlet充當代理(我假設,您的客戶端桌面應用程序使用jdbc連接到servlet,並且您的servlet連接到實際的數據庫)您必須編寫使您的servlet實現jdbc接口或類似的所有代碼。 – kunal

+0

再次感謝您的回覆,我可能沒有正確回答問題,當我說'代理'時,我只是指一箇中間組件,它接收來自客戶端的調用並基於請求中的參數(基本上標識執行存儲過程A或B等)執行存儲過程,從數據庫中獲取結果並將其發回給用戶。這是爲了隱藏最終用戶的數據庫。那麼在這種情況下,基本上REST和基於Servlet的方法都是相似的?正如其他類型用戶所說,最好的方法是從Servlet開始簡單? – iahsan

0

直接使用(Hibernate的舉例)?

如果您正在開發獨立應用程序,請更好地保持簡單。爲了使用ORM或其他框架,您不需要J2EE App Server(以及它所需的所有複雜性)。

如果您需要在數據庫和應用程序之間交換大量數據,只需忘掉EJB,Servlet和Web服務,然後使用Hibernate(或直接使用普通的舊JDBC)。

只要您沒有複雜的數據和較高的數字(嘗試剖析將SOAP消息實際解組並返回給java對象需要多長時間),基於REST的Web服務解決方案可能會很好。

1

從簡單起步。我將從一個簡單的基於servlet/JDBC的解決方案開始,讓系統端到端地工作。從這一點,考慮:

  1. 你想利用合作池(最有可能)。考慮C3P0/Apache DBCP
  2. 你想擁抱像Spring這樣的框架嗎?您可以逐漸遷移到此,並從使用servlet MVC功能,IoC等開始。並根據需要使用更復雜的解決方案
  3. 是否要使用ORM?你有持久/查詢的複雜對象圖嗎?ORM會簡化你的開發嗎?

如果您決定採用這種方法,請確保您的架構具有良好的分層結構,以便您可以換出(比方說)原始JDBC來支持ORM,並且您的開發是測試驅動的,例如您有足夠的測試用例來確認您的解決方案在您執行上述遷移時工作。

請注意,您可能會永不最終解決方案。隨着您的需求變化以及您的應用程序的擴展,您可能需要調換/調出最適合當前需求的技術。因此,您的應用程序的體系結構比您選擇的特定工具集更重要。

+0

最好的建議是從簡單的開始。如果它正確完成,那麼擴展服務的其他功能將會更容易。 – djangofan

0

我使用Spring-remoting和基於servlet的方法取得了很大的成功。這對於開發來說也是一個很好的設置,因爲您可以輕鬆地測試代碼而無需部署到Web容器。

  • 您首先定義一個服務接口來檢索/存儲您的數據(POJO's)。
  • 創建實現,它可以使用ORM,直接JDBC或一些池庫(容器提供或第三方)。這與遠程部署無關。
  • 開發您的直接使用此服務的應用程序(無需部署到服務器)。
  • 當您對所有事情都滿意時,將您的實現包裝在一場戰爭中,並使用Spring DispatcherServlet進行部署。如果使用maven,則可以通過war plugin
  • 配置桌面以通過Spring遠程處理使用該服務。

我發現通過作爲應用程序的一部分運行服務來輕鬆開發代碼的能力相對於開發/調試在服務器上運行的東西具有巨大優勢。我在使用和不使用EJB的情況下都使用了這種方法,儘管在我們的特例中仍然通過servlet訪問EJB。只有服務調用直接使用EJB(也使用Spring遠程處理)。