【问题标题】:Processing PDFs in a JavaEE application在 JavaEE 应用程序中处理 PDF
【发布时间】:2011-10-13 11:11:53
【问题描述】:

JavaEE 应用程序必须处理大量 PDF 文档。 处理的类型并不重要,但为了清楚起见,我们可以说它包括提取文本、将页面转换为图像、在第一页上标记 ID、打印、将它们保存到 DB。

传入的 PDF 来自各种各样的供应商,因此对它们几乎没有控制(如果有的话)。

所有操作都在后台进行,即有计时器轮询入站通道,检索文档并将它们发送到处理。没有用户交互。

两个顶级 java 库用于管理 PDF。由于 PDF 规范扩展和 PDF 生成工具之间的极端传播,它们不可能涵盖所有可能的缺陷,因此有时它们无法操作甚至打开文档。

很不幸,它们有时会失败,但不会引发异常,而是阻塞在无限的子方法中。这很关键,因为轮询计时器阻塞,不再处理文档,管理员意识到出现问题为时已晚,更糟糕的是,整个应用程序服务器必须重新启动,这在生产环境中并不容易/不公平。

那么驱动库的 EJB 如何理解调用被阻塞并停止事务呢?

我可以启动一个专用线程(不违反 JavaEE 规范)并设置一个带有超时的等待。当检查标志或达到超时时,等待结束。在后一种情况下,线程被认为是阻塞的,PDF 可以被标记为无效,例如,可以发送电子邮件警报。

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

谢谢

【问题讨论】:

    标签: jakarta-ee


    【解决方案1】:

    我不确定我是否完全理解了您所描述的内容,但恕我直言,您可以使用 MDB 进行异步处理(而不是创建单独的线程)或在事务上下文中运行 EJB 方法并为该方法设置事务超时哪个可以完成您描述的工作。如果事务超时,你会得到你想要的异常。

    【讨论】:

    • 很抱歉这么晚才回来,但最终我还是选择了 MDB/JMS 实现。
    猜你喜欢
    • 2014-07-06
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多