2012-10-24 61 views
2

我有一個現有的Java應用程序(基於Spring),目前沒有一個網絡界面,也沒有在Web容器中運行。它與啓動程序很好地包裝在一起,並且正常工作。添加一個網絡接口(Spring MVC的),以現有的Java應用程序

我需要做的是爲某些管理類型的事物添加一個管理Web界面,檢索實時指標,也許有些圖表讓用戶知道一切正常工作時的溫暖模糊感覺。因爲我們是一家Spring商店,而且我們的一些Web應用程序已經使用Spring MVC,所以它只對我們有意義,但是我對我內部Spring人員提出的關於我應該如何處理的建議感到不滿意。

什麼是狼吞虎嚥這個web界面上的理想方式?

  • 將我的應用程序轉換爲一個Web應用程序,並有一個Web容器啓動應用程序。我不太喜歡這種方法,Web層實際上是主要應用程序的次要部分。
  • 創建一個單獨的項目打包成一個WAR文件中嵌入了Jetty在我現有的應用程序,並把它加載了戰爭。我想我可以使用上下文加載器監聽器將我的應用程序的根上下文作爲父應用程序的上下文。這將涉及將我的Maven項目分解成兩個我相信的項目。由於我的主應用程序未啓用Web,因此我無法使用現有的Web技術在Web層和主應用程序之間進行通信。
  • 嵌入碼頭,直接把Spring MVC的東西在我的應用程序。雖然我之前已經完成了這個方法,但確實涉及到一些醜陋 - 例如將JSP標記庫炸開到我的jar中。

在這裏一些乾淨的分離有什麼想法?

另外值得注意的是,我現在的罐子包含一些shell腳本推出一些實用的應用程序。走一條純粹的WAR路線會讓事情變得不那麼容易,因爲我不能在我的戰爭文件中指出java並選擇一個類來執行。

謝謝。

回答

2

如果web只是一個小應用,那麼將它遷移到WAR並在servlet容器中部署可能是一種矯枉過正。嵌入Web服務器/ servlet容器看起來簡單得多,儘管它不一定是Jetty或Tomcat。您可以使用內置於JDK的Web服務器,或者在之上或者甚至原始套接字上編寫一個。但這是一個地獄要維護。

又一解決方案,以彈簧讀書時mymind:

Web界面對一些管理類的東西,獲取實時指標,也許一些圖表

也許你並不需要一個界面,但監控基礎設施呢?查看JMX(Spring有great support for JMX) - 編寫第二個Web應用程序,該應用程序通過JMX簡單地連接到您的獨立Java應用程序,並以奇特的方式顯示指標。另一種方法是通過Jolokia公開JMX,JMX轉換爲REST服務。

這種方法有幾個優點:

  • 監測API是通用的,你得到免費的

  • 你不必使用Web客戶端,監控應用程序,

    完全脫鉤
  • 最終對原始應用程序的更改很少。看看這個概念證明:12

+2

關於JMX的很好的一點。我會進一步研究。 – Jason

0

它確實取決於您現有的Java/Spring應用程序的結構以及它提供的API的多少。我做了類似的事情,我通過創建一個單獨的Spring MVC項目來接近它,然後將現有的Java應用程序指定爲JAR依賴項。

這對於Maven(或常春藤等)來說很簡單,並且提供了很好的解耦。訣竅是能夠在Spring MVC應用程序中編寫服務類,然後通過您的依賴Spring應用程序通過簡單的DAO類訪問數據。這就是爲什麼我在開始時說,它取決於原始Java應用程序的結構。它必須能夠爲數據訪問提供一個API,然後您可以將您的DAO(impl)插入。

如果這不容易完成,那麼我建議的下一個選項就是將您的Spring應用程序轉換爲Spring MVC應用程序。我在另一個應用程序上工作,我們這樣做。使用Maven,可以指定構建可以創建一個war文件或一個jar文件(或兩者)。所以它可以作爲一個webapp(通過戰爭)或一個普通的應用程序(通過jar)進行部署。是的,jar版本有一點膨脹,但它是一個值得的妥協。

嵌入Jetty或通過war文件使用Tomcat的問題是一個完全獨立的問題,有其優點和缺點。它不應該影響您首先構建Web應用程序的方法。

+0

我開始認爲我需要重新思考我製作Spring應用程序的方式。只需從一開始就使用webapp方法..以防萬一我需要稍後插入web界面。即使向我們的支持人員提供數據提取界面,情況往往也是如此。 – Jason

相關問題