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