我有一个 JavaEE 6 / EJB3.1 / Glassfish 3.1.2 应用程序,它从远程计算机检索 .xml 页面,将它们转换为 java 对象,然后将它们中的每一个都保存在我的 mysql 数据库中。有成千上万个这样的 .xml 页面,我只是在逐步添加它们。
这很好用,除了它非常慢(70ms 页面检索 + 转换和持久化实体的少量时间)。
我想同时进行这项工作以加快速度 - 最好的方法是什么?
可能值得注意:每个页面检索都会更新 mysql 数据库中用于获取页面的 OAuth 凭据的计数,如果它处于最大值,则不会继续(引发异常)。我不确定这是否/多少会使事情复杂化 - 但如果两个线程看到它低于最大值,那么在更新计数之前获取页面它可能会超过最大值。
到目前为止,我的研究已将其缩小到两种可能性(尽管可以随意添加其他可能性):
- Message Driven Beans - 我想,虽然可能是错误的,但我会让一个会话 bean 发送 url 消息,直到消息队列已满(比如添加了 10 个 url),然后阻塞直到队列未满。Glassfish 将创建我创建的消息 bean 的 10 个实例,每个实例从其中一个 url 获取一个 .xml,更新 OAuth 计数,然后将此 .xml 作为消息发送到另一个队列,其中另一个消息 bean 可以转换并持续存在。此队列中的 xml。
- 使用@Asynchronous方法并创建我自己的线程安全队列?这可能更简单,更适合我正在做的事情,但我不确定我将如何实现它。
任何意见,将不胜感激!