2012-02-07 63 views
7

我被要求將遺留數據處理應用程序移植到Java。用於Java中長時間運行的數據處理系統的通用體系結構?

該系統的當前版本由一個(寫得很糟糕的)Excel表單組成。這些工作表執行一個大循環:查詢多個數據源。這些源代碼是CSV和基於XML的Web服務的混合體。

過程的概念很簡單:

它是無狀態的,這意味着它運行計算是完全依賴於輸入。計算結果已發佈(目前通過在網絡上的一些標準位置編寫一些CSV文件)。

發佈結果後,輪詢週期再次開始。

該過程不需要管理GUI,但是如果我可以實現某種基於Web的控制面板,它將會很整潔。這對於內部使用來說並不美觀。控制面板只會顯示關於源提要的顯示統計信息,並可能在出現問題時強制更新輸入提要。該組件在第一輪交付中純粹是可選的。

該系統的一個關鍵特徵是容錯性。一些輸入源是臭名昭着的。我希望我的系統能夠在某些輸入斷開的情況下恢復。在這種情況下,不可能更新輸出 - 我希望它保持輪詢直到系統解決,可能會生成一些XMPP消息來指示系統的狀態。總體而言,系統應該長時間不用幹預地工作。

用戶當前有一個自定義客戶端輪詢CSV文件(希望)不需要重寫。如果我能夠正確地完成這項工作,那麼他們不會注意到運行此係統的引擎已被重新實施。

我不是java devloper(我主要是做Python),但是JVM是這種情況下的需求。經理給了我慷慨的學習時間。

我想知道的是如何開始構建這種類型的項目。我想使用框架&可能的好模式。有沒有什麼大的構建塊可以幫助我更好地運行質量更好的系統?

UPDATE0:沒有人提到過Spring呢 - 這個框架在這類應用程序中扮演了一個角色嗎?

+0

我已經提到過Spring作爲對@Martin Spamer答案的評論。 – Rich 2012-02-07 14:23:51

回答

3

你可以使用很多大型複雜的框架來「幫助」你做到這一點。學習這些可以是CV ++。

在你的情況下,我會建議你儘可能簡化系統。它會表現得更好,更容易維護(它也更有可能工作)

所以我會採取每個要求,並問自己;我可以做到這一點簡單嗎?這不是懶惰(你必須更加努力思考),但恕我直言,好的做法。

1

1)編寫處理文件的代碼,每個任務保持簡單一個類,您可能會發現Apache CSVApache Commons有用。 2)然後看看Java Thread Pools爲這些類創建一個sperate進程運行器作爲單獨的任務,如果他們錯誤可以重新啓動它們。 3)最好的啓動方式取決於平臺,但我會假設你提到Excel表示它是windows PC。因此,最簡單的解決方案是從Windows-> Startup菜單項運行進程運行程序。稍微好一點的解決方案是使用windows service wrapper或者你可以在Apache ACD

+0

對於CSV處理,我會推薦Spring Batch。 – Rich 2012-02-07 14:23:14

0

之類的東西下運行。看看Pentaho ETL工具或Talend OpenStudio。
這個工具提供對文件,數據庫等的訪問。如果您需要,您可以編寫自己的插件或適配器。 Talend創建可以編譯和運行的Java代碼。

1

Java生態系統中有一個工具,它可以解決所有(幾乎)集成問題。

它被稱爲Apache Camel(http://camel.apache.org/)。它依賴於消費者和生產者和企業集成模式之間的概念。它提供容錯和併發處理配置功能。有定期投票的支持。它具有XML,CSV和XMPP組件。定義時間觸發的後臺作業很容易,並且可以與任何您喜歡的作業排隊信息系統集成。

如果您從頭開始編寫這樣的系統,則需要花費數週甚至數週時間,並且您可能會錯過某些錯誤條件。

相關問題