在JavaEE应用程序中处理PDF

时间:2011-07-26 14:11:14

标签: java-ee

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

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

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

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

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

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

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