用于管理顺序命令列表的数据结构/Java技术

用于管理顺序命令列表的数据结构/Java技术,java,sql,design-patterns,data-structures,middle-tier,Java,Sql,Design Patterns,Data Structures,Middle Tier,我不确定这个用例是否存在一些特殊的东西——但它感觉像是一个有人可能已经制作了某种有用的结构/技术/设计模式的案例 我的处境 我从中间层(Java)执行了一组SQL命令,通过从相关的暂存表中的联接将数据插入/更新/删除到任何一组非常大的表中 我有更多的SQL命令,它们根据临时表/实际表内容更新各种派生表。不同的表将通过不同的查询与不同的派生表交互(通常)。根据用例的不同,这些命令可能必须与第一个集合交错-因此,我不一定要同时执行集合1和集合2 我的问题 因此,我需要构建一个顺序执行的命令链,如

我不确定这个用例是否存在一些特殊的东西——但它感觉像是一个有人可能已经制作了某种有用的结构/技术/设计模式的案例

我的处境

  • 我从中间层(Java)执行了一组SQL命令,通过从相关的暂存表中的联接将数据插入/更新/删除到任何一组非常大的表中

  • 我有更多的SQL命令,它们根据临时表/实际表内容更新各种派生表。不同的表将通过不同的查询与不同的派生表交互(通常)。根据用例的不同,这些命令可能必须与第一个集合交错-因此,我不一定要同时执行集合1和集合2

我的问题

因此,我需要构建一个顺序执行的命令链,如果其中任何一个失败,我需要触发回滚。我希望尽可能以最清晰、有文档记录的方式完成这项工作

有人知道这种编码的标准方法吗?我敢肯定,任何从存储过程代码迁移到中间层代码的人都曾经这样做过,如果有好的选择,我不想重新发明轮子


其他信息

我最关心的问题之一是把一切都说清楚。为了详细说明,我将有一组专门设计的查询:

  • 截断暂存表A'并用主键填充它,主键指向删除记录
  • 基于带's'的联接从实际表A中删除
  • 截断“暂存表A”,并用upserts的完整数据填充它
  • 基于联接将记录从A更新/插入到A
同样的逻辑也适用于表B、C、D等。不幸的是,在这种情况下,只有A和C需要一个额外的步骤,比如将删除同步到某个派生表,在删除之后但在升级之前完成


显然,我想对更新表的所有逻辑进行分组,我也想对更新派生表的所有逻辑进行分组,但在执行时,它们必须智能地交错,这听起来很混乱。

不要自己写这样的东西。这就是人生的目的

您可以使用或来执行此操作

将工作单元注释为事务性的,并让数据库和JDBC处理它


如果您必须自己做,请遵循面向方面的方法,并将其作为装饰性的“前后”实现。

您只是想让您的代码具有事务性,还是想了解一种基于动态依赖项/条件的工作排序模式?我已经实现了它,它的事务性/工作正常。我感兴趣的是更好地管理(命令组之间的)依赖关系。听起来您需要某种图形实现。这似乎和你的很相似。在一些JTA感知环境中运行的命令模式也是我自己做的。序列中的每个命令要么成功,要么失败,JTA负责处理周围的事务。各种命令向JTA注册,以通知发送事件(成功/失败)并相应地采取行动。如果我的目标数据库不能正确支持XA,我可以使用JTA吗?XA表示两阶段提交;一个数据库本身并不需要它。如果你的意思是“我的数据库不支持事务”,你要么改变数据库供应商,要么你是SOL。