V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
evilic
V2EX  ›  编程

求助更好的解决办法: Java 或其它语言如何编写代码实现业务事务?

  •  
  •   evilic · 2016-06-02 11:49:50 +08:00 · 3238 次点击
    这是一个创建于 3102 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 背景是这样的

      现在需要写一些业务上的接口,接口只能给调用者返回成功或者失败。如果成功,则完全成功;如果失败,则什么事情也好像没发生过一样。恩,没错,就跟数据库事务一样。

    • 遇到的问题是这样的

      业务上的操作,包括了很多的小的操作——小的操作在执行了基本的功能后,会调用数据库接口提供的方法来更新数据库(举例来说,小操作可能是:关灯是一个小操作,开灯是一个小操作,单独的一个操作之后它们都会把数据库标记为灯的状态)。这样,业务操作如果调用的小的操作过多的话,那执行回滚操作时的工作量就十分酸爽了……

    • 已经尝试的解决办法和效果

      第一个解决办法:把互相为逆操作的小操作写在一起为一个整体,然后把业务操作写成这些小整体连在一起的链,这样来处理。大概就是过滤器的责任链模式这样。但最终发现,当前的业务可能会因为其它的原因而进行不同的分支判断或者调整,从而这个方法不够灵活;

      上网找是否有好的解决办法,结果是好像没有……

    • 现在希望大家帮忙的

      各位指条路吧……冇思路啊……

      麻烦各位了~谢谢谢谢谢谢了……

    7 条回复    2016-06-02 13:41:59 +08:00
    evilic
        1
    evilic  
    OP
       2016-06-02 12:57:21 +08:00
    或者各位给个能搜索的关键字也是极好的……
    SoloCompany
        2
    SoloCompany  
       2016-06-02 13:08:22 +08:00 via iPhone   ❤️ 1
    加执行堆栈,如果失败就反方向回滚
    Infernalzero
        3
    Infernalzero  
       2016-06-02 13:13:30 +08:00
    spring DataSourceTransactionManager
    evilic
        4
    evilic  
    OP
       2016-06-02 13:17:34 +08:00
    @SoloCompany 貌似是可行并且比当前我的处理方法更好的~谢谢。感谢已发送~
    evilic
        5
    evilic  
    OP
       2016-06-02 13:20:37 +08:00
    @Infernalzero DataSourceTransactionManager 可以管理 DataSource 之外的事务吗?

    我不太了解这个,弱弱的问问。

    下了一本《 Java 事务设计策略》,不知道对于我这个情况是否有帮助……
    skydiver
        6
    skydiver  
       2016-06-02 13:36:19 +08:00   ❤️ 1
    典型的分布式事务问题,可以参考 http://coolshell.cn/articles/10910.html 以及 Google 一下相关内容
    evilic
        7
    evilic  
    OP
       2016-06-02 13:41:59 +08:00
    @skydiver 好的,我跟进一下~感谢已发送~谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2629 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.