JavaEEアプリケーションでは、多数のPDFドキュメントを処理する必要があります。 処理の種類は重要ではありませんが、わかりやすくするために、テキストの抽出、ページのイメージへの変換、最初のページのIDのスタンプ、印刷、DBへの保存などがあります。JavaEEアプリケーションでのPDFの処理
受信したPDFは、さまざまなサプライヤーから提供されているため、(存在する場合は)制御できません。
すべての操作はバックグラウンドで行われます。つまり、受信チャネルをポーリングしてドキュメントを取得し、処理に送信するタイマーがあります。ユーザーの操作はありません。
2つのトップレベルJavaライブラリを使用してPDFを管理します。 PDF仕様の拡張とPDF生成ツール間の極端な普及により、すべての可能性のある欠陥をカバーすることはできないため、ドキュメントを操作したり開いたりすることができないことがあります。
非常に残念なことに、例外が発生することなく失敗することはありますが、無限のサブメソッドでブロックされることがあります。これは、ポーリングタイマーがブロックされ、ドキュメントが処理されなくなり、管理者が何か間違っていることを認識し、実稼働環境では簡単ではないアプリケーションサーバー全体を再起動する必要があります。
ライブラリーを駆動するEJBは、呼び出しがブロックされてトランザクションが停止することをどのように理解できますか?
(JavaEE仕様を破ることなく)専用のスレッドを開始し、タイムアウトで待機を設定することができました。フラグは、フラグがチェックされるか、タイムアウトに達すると終了します。後者の場合、スレッドはブロックされたとみなされ、PDFは無効とマークされ、たとえば電子メールアラートを送信することができます。
誰にも代替手段と実現可能な解決策がありますか?
おかげ
私はMDB/JMS実装に行きました。 – prepetti