当我说“软”事务时,我的意思是某些内容不涉及某些数据库中的持久性而只是逻辑对象修改。这就是故事。
普通的JAVA应用程序,没有框架,可能有很多线程。
无需跟踪doSomething()中的任何特定更改,也因为我可以为每个对象提供许多不同的doSomething方法。我没有使用特定的框架,我想保持它“轻松”,比如说。
有没有办法实现这样的行为?
非常感谢提前!
答案 0 :(得分:4)
您可以查看Memento Pattern:
memento模式是一种软件设计模式,可以将对象恢复到以前的状态(通过回滚撤消)。
答案 1 :(得分:2)
是的,这样的功能是可能的并且经常用于例如ORM框架或servlet容器。 ORM框架主要提供某种实体缓存,其中存储了预先填充的Java对象。必须将对这些对象的修改与数据库事务同步。某些servlet容器还提供对HTTP会话的事务访问。例如。请求期间的修改将应用于会话的副本,并且只有在请求成功并以其他方式丢弃时才会永久应用。
通常,此类功能基于在启动事务时制作状态的副本,在事务期间处理副本,并在提交事务时用修改后的副本替换永久状态,如果事务是,则分别丢弃副本回滚。您可能还需要其他功能来检查甚至禁止并发修改。
由于Java中没有“标准”方式来制作对象副本,因此您必须自己做一些工作,并且有几种可能的方法:
Cloneable
,但要确保克隆方法返回对象的深层副本而不是默认的浅层副本(出站引用只是“移动”到新对象而不是制作实际的副本引用对象)。ByteArrayOutputStream
并读取对象以获取副本。答案 2 :(得分:0)