【问题标题】:Software Transactional Memory + Spring软件事务内存 + Spring
【发布时间】:2011-01-28 11:30:57
【问题描述】:

是否可以将 Spring 与软件事务内存集成,以便我可以在方法抛出异常时一起回滚所有对象和数据库事务。我需要 Spring+Deuce STM 或 Spring+Multiverse STM 的可能性。我的最终目标是在抛出异常的方法上回滚对象状态和数据库状态。

【问题讨论】:

    标签: spring object transactions stm


    【解决方案1】:

    目前 Multiverse 不直接支持这种集成,但这是一个有趣的功能。我是 Multiverse 团队的一员,将与作者讨论是否有任何东西可以让我们这样做或优先考虑这在我们正在开发的功能集中..

    考虑很久………………………………………………………………………… ...

    这样做的一种方法是在 STM 中的 Transaction 上注册一个 PostEvent 侦听器,如果 STM 事务失败,则回滚 DB 事务。也许这可能会有所帮助:)

    附:您尝试使用哪个版本的 Multiverse stm?

    --赛

    【讨论】:

    • 其实我对 STM/Multiverse 很陌生。我想要面向 Spring 的解决方案,以便 Spring DB 事务回滚恢复/还原在该特定方法中修改的所有对象。这是因为我在 Spring 框架上开发了一个完整的应用程序,并且我不会更改我的应用程序代码(除了引入一些注释)。我更喜欢使用 Multiverse 0.5。
    • 您可以使用 spring 事务事件监听器来查看事务是否已提交或回滚,并相应地继续执行 multiverse。我还没有尝试过,但我想它应该可以工作。问题是 DB 事务比 STM 事务长得多,我们不希望事务等待这么久..
    • 在 Spring 中,事务所有者将是方法。方法的事务回滚可以根据抛出的异常来确定。类似地,我想将该特定方法注释为事务性的(由 multiverse stm 提供),以便恢复对象状态更改。但是当我在 eclipse 中提供 javaagent 作为 VM 参数并运行应用程序时,我得到了异常为 ::
    • 2011 年 1 月 28 日下午 6:06:53 org.multiverse.javaagent.MultiverseClassFileTransformer handleThrowable 严重:检测类“com/xyz/myApp/dao/BaseDAO$$EnhancerByCGLIB$$17d35e18”时失败。无法中止 Javaagent 检测过程,因此 JVM 将继续,但由于此类未检测,因此它不是事务性的,因此所有赌注都已取消。 java.lang.RuntimeException: java.lang.ClassNotFoundException: org.multiverse.repackaged.org.objectweb.asm.ClassWriter.getCommonSuperClass 的 org.springframework.aop.framework.AopConfigException (Unknown Source)
    • 您可以尝试不使用 TransactionalTemplates 进行检测,看看这是否有效?
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2021-01-09
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多