【发布时间】:2011-10-13 11:11:53
【问题描述】:
JavaEE 应用程序必须处理大量 PDF 文档。 处理的类型并不重要,但为了清楚起见,我们可以说它包括提取文本、将页面转换为图像、在第一页上标记 ID、打印、将它们保存到 DB。
传入的 PDF 来自各种各样的供应商,因此对它们几乎没有控制(如果有的话)。
所有操作都在后台进行,即有计时器轮询入站通道,检索文档并将它们发送到处理。没有用户交互。
两个顶级 java 库用于管理 PDF。由于 PDF 规范扩展和 PDF 生成工具之间的极端传播,它们不可能涵盖所有可能的缺陷,因此有时它们无法操作甚至打开文档。
很不幸,它们有时会失败,但不会引发异常,而是阻塞在无限的子方法中。这很关键,因为轮询计时器阻塞,不再处理文档,管理员意识到出现问题为时已晚,更糟糕的是,整个应用程序服务器必须重新启动,这在生产环境中并不容易/不公平。
那么驱动库的 EJB 如何理解调用被阻塞并停止事务呢?
我可以启动一个专用线程(不违反 JavaEE 规范)并设置一个带有超时的等待。当检查标志或达到超时时,等待结束。在后一种情况下,线程被认为是阻塞的,PDF 可以被标记为无效,例如,可以发送电子邮件警报。
有没有人看到任何替代和可行的解决方案?
谢谢
【问题讨论】:
标签: jakarta-ee