【发布时间】:2013-06-18 07:26:19
【问题描述】:
目前我有一个 JPA 实体来执行某种任务。一些进程写入该表,调度进程处理该任务,并在准备好时更改状态。我需要确定任务的优先级,并在它们失败时以递减的频率重试它们。我的环境是 GlassFish 3 + JPA 通过 Hibernate + MySQL + XA 事务。从中期来看,该项目将用 Spring 解决方案(使用 Jetty 左右)取代 GlassFish。
它以某种方式让它工作了,但我对此并不满意:我得到了 OptimisticLockExceptions,看起来我在某些时候没有正确处理事务,而且 GlassFish 上的 JPA 计时器也有点乱,如果你需要可变时间。
我觉得我在这里使用了错误的工具,我应该使用一些成熟、稳定的设计,而不是组合在一起的东西。使用 JPA 实体似乎是重量级的,但原始 JDBC 看起来是一个更糟糕的选择。当然我想避免严重的库依赖,但也许我忽略了针对我的特定问题的简单“罐装”解决方案(这似乎并不罕见)。
[编辑]
为了澄清:我不会更改用例(我什至没有代码了),我只是想获得一些通用指南,以便下次“做对”(TM) .回答 ben75 的问题:worker 可能是多线程的,我需要小事务,因为这应该一直运行 - 可能需要几个月。
【问题讨论】:
-
你的工作进程是单线程的吗?谁确定优先级(工人或生产者或......)?你什么时候得到那些 OptimisticLocking(在任务执行结束时或......)?在任务的整个执行过程中,您是否只有一个事务?
标签: hibernate jakarta-ee jpa producer-consumer