2011-06-09 60 views
0

我目前正在設計一個java關聯引擎,它從pdf文件中提取數據並將關係數據庫中的結構化數據關聯(在必要時引發警報)。在Java中處理鏈中的排隊作業

着眼於PDF的文件處理系統包括:

正在執行從PDF定製提取的組件。

其解析有時無序不潔數據轉換成所需的數據結構

歸一化部件,其將正常化的值用於比較

並且與DB接口(其中所提取的數據將組分A組分插入其餘數據)

這些組件應該可以在其他處理鏈中重複使用,但它們都會在最初運行在同一個系統上。

我認爲在組件之間進行某種緩衝是明智的做法,使用JMS隊列是明智的做法還是會讓事情複雜化?我一直在試驗一個簡單的linkedblockingqueue對象,但是這個對象必須在組件之間傳遞,所以它需要一個主組件來驅動我不知道的所有東西,是否有一種解決這個問題的標準方法?

回答

1

我會使用鏈接呼叫,除非你有額外的要求。

loadPDF(new PDFExtractor(new PDFParser(new Normalizer(new DBEnricher(listener))))); 

如果你想要多個線程,我會使用一個ExecutorService線程池在不同的線程中處理每個文件。

+0

對於完成的作業,包含每個組件的隊列對象是否相當標準,並讓處理程序從中取出或在單獨的處理程序中擁有隊列? – zode64 2011-06-09 16:07:48

+0

我想讓一個組件通過方法調用調用另一個組件,並在出現錯誤時返回結果或拋出異常。我沒有看到需要一個隊列。 – 2011-06-09 16:11:36

+0

使用隊列的想法是,一些作業將如此處理器和內存密集型,這些任務完成並且結果排隊以便資源可以被釋放,並且隊列可以被運行的多個線程使用同時 – zode64 2011-06-09 16:59:39