2011-07-26 57 views
0

JavaEE應用程序必須處理大量PDF文檔。 這種處理並不重要,但爲了清晰起見,我們可以說它包括提取文本,將頁面轉換爲圖像,在第一頁上打印ID,打印並將其保存到數據庫。在JavaEE應用程序中處理PDF

傳入PDF來自各種各樣的供應商,所以對它們的控制很少(如果有的話)。

所有操作都發生在後臺,即有定時器輪詢入站通道,檢索文檔並將它們發送到處理。沒有用戶交互。

兩個頂級java庫用於管理PDF。由於PDF規範的擴展和PDF生成工具之間的極端普及,它們不可能涵蓋每個可能的缺陷,因此有時它們無法操縱甚至打開文檔。

很不幸,它們有時會失敗,但不會引發異常,而會阻塞在無限的子方法中。這很關鍵,因爲輪詢計時器阻止了,沒有更多的文檔被處理,管理員意識到某些錯誤太晚了,更糟糕的是整個應用服務器必須重新啓動,這在生產環境中並不容易/不公平。

那麼驅動庫的EJB如何理解該調用被阻塞並停止事務呢?

我可以啓動一個專用線程(不會破壞JavaEE規範)並設置超時等待。當檢查標誌或達到超時時,等待結束。在後一種情況下,該線程被視爲被阻止,PDF可被標記爲無效,並且例如可發送電子郵件警報。

有沒有人看到任何替代和可行的解決方案?

感謝

回答

0

我不知道我完全得到你所描述的東西,但恕我直言,你既可以使用MDB的異步處理(而不是創建單獨線程)或者運行在一個事務上下文中的EJB方法和設置執行你描述的工作的方法的事務超時。如果交易超時,你會得到你想要的例外。

+0

不好意思回到這麼晚了,但最終我選擇了MDB/JMS實現。 – prepetti