Questions tagged «transaction»

3
SOA服务组合实际上在实践中有效吗?
SOA主要服务设计原则之一是服务可组合性原则(https://en.wikipedia.org/wiki/Service_composability_principle)。 这个想法是,通过使用现有服务作为构建模块来组合新服务,可以迅速开发新服务。类似于实现新方法时如何调用对象的现有方法。这就是SOA可以大大提高生产力的地方。 实际上有人真的这样做吗?我已经在书面文本中看到了无休止的重复,但是我自己还没有在现实世界中工作的经验。本书的大部分内容都没有提及事务处理,这在我看来是实现可组合服务的最大障碍。 首先,在组成任何非平凡的服务之前,您确实确实需要解决交易问题。当然,如果该示例具有服务“ findCurrentTime()”和“ writeLogMessage()”,则很容易不必担心事务,但是在具有诸如“ depositMoney()”和“ withdrawMoney()”之类的真实示例时则不必担心。 我知道两个选择: 使用WS-Atomic Transaction或类似工具实施真实交易 实施基于补偿的解决方案,使用“ cancelA()”或类似方法补偿对A的调用,如果对B的调用失败 这两个问题似乎都非常棘手/对我来说几乎无法使用: WS-原子交易 一个很大的复杂性,大多数的建议,我发现只是警告“疼痛的屁股,不这样做” 支持是有限的,例如,如果您使用开源ESB,则主要替代产品ServiceMix,Mule或WSO2不支持它 赔偿金 对我来说,实施赔偿处理似乎很复杂。如果服务A成功并且我们从未从服务B得到答案并且不知道它是失败还是成功,我们该怎么办?手动处理这种逻辑(作为合成服务的实现者)使我想裂开手腕-这是某些工具应该为我完成的工作! 我也看不到如何在非平凡的服务中使用补偿方法。假设您的服务A是“ depositMoney()”,并且成功,其他一些操作很快将钱转移到其他地方,然后我们收到“ compensateDepositMoney()”,我们现在该怎么办?好像一大罐蠕虫。 在我看来,服务组合是SOA的一项基本原则,如果您不能(方便地)组合服务,那么您真的无法获得SOA的好处。现实是什么?90%的SOA用户在没有实际服务组合的情况下使用“ crispled SOA”?还是大多数用户实际上使用服务组合,而我却夸大了它的难度?

3
如何在单个事务中管理2种DAO方法?
在一次采访中有人问我:我们如何在一次交易中管理两种交易/道方法。所需功能: 如果其中任何一个失败,我们都需要回滚这两种方法。 可以将这两种方法与单个事务分开附加调用。 管理应该在DAO层上,而不是在服务层上。 我认为:这个问题与春季交易管理有关。

2
通过事务将业务逻辑与数据库逻辑分开
我们的应用程序包含三层。服务层提供外部API。BO层用于我们的业务逻辑,而DAO层用于我们的数据库连接。 假设每次更新文件时,我们还希望更改文件夹中的某些内容,例如“上次修改日期”。这需要在事务中完成。要么成功,要么文件和文件夹都被编辑。否则发生故障,事务将回滚,因此两个对象都处于先前状态。 “编辑文件时编辑文件夹”操作纯粹是业务逻辑。因此,这将意味着它属于BO层。但是,我们将Objectify用于数据库,因此要启动事务,我们需要调用ofy()。transact(...)。如果在BO层中调用此函数,则会破坏我们的设计,因为在业务层中将有数据库特定的调用(Objectify)。 什么是解决此问题的干净方法?

5
单个故障是否会使批量操作失败?
我正在使用的API中有一个批量删除操作,该操作接受ID数组: ["1000", ..., "2000"] 我可以按照自己的意愿随意执行删除操作,因此我决定使整个事务具有事务性:也就是说,如果单个ID无效,则整个请求将失败。我将其称为严格模式。 try{ savepoint = conn.setSavepoint(); for(id : IDs) if( !deleteItem(id) ){ conn.rollback(savepoint); sendHttp400AndBeDoneWithIt(); return; } conn.commit(); } 备选方案(在软件套件中的其他位置实现)是尽我们所能在后端进行操作,并报告阵列中的故障。该软件的这一部分处理的请求较少,因此从理论上讲,响应不会成为一个巨大的数组。 资源贫乏的服务器中最近发生的一个错误使我再次查看代码,现在我在质疑最初的决定-但是这次,我更多地是出于业务需求而不是最佳实践的动力。例如,如果我未能通过整个请求,则用户将不得不重试,而如果删除了许多项目,则用户可以完成操作,然后要求管理员执行其余操作(在我修复错误的同时) !)。这将是许可模式。 我尝试在网上寻找有关此事的一些指导,但我空手而归。所以我来找你:这种性质的批量操作最期望什么?我应该坚持更严格,还是应该更宽容?

7
确定每周数据系列中交易的算法?
我正在尝试开发一个小型报告工具(具有sqlite后端)。我可以最好地将此工具描述为“交易”分类帐。我正在尝试做的是跟踪每周数据提取中的“交易”: “新”(或添加)-资源对于我的应用程序来说是新的,因为我的应用程序之前可能没有跟踪过该资源,因为尚未通过提取看到它。 “更新”(或命中)-最近使用了该资源,将保留期再更新一周。 “删除”(或删除)-自上次报告以来该项目未使用(可选,但是可以很好地绘制出每周对资源需求的变化图)。 我所得到的只是每周的数据提取(以竖线分隔的平面文件),这些数据来自我无法控制的旧版归档/记录管理系统。 每一行都可以大致提炼为: resource_id | resource info | customer_id | customer_info 样本数据: 10| Title X | 1 | Bob 11| Another title | 1 | Bob 10| Title X | 2 | Alice 目的是使报告X个月未使用过的资源变得容易(基于最后一次点击)。在保留期中,如果资源很受欢迎,则将其保留在附近以便于访问。尚未使用18个月的资源已标记为可在其他地方进行长期存档。 这一定是一个普遍的问题。想知道是否有通用算法来确定数据集之间的新内容/相同内容/已删除的内容(数据库还是最新摘录)?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.