Java UnitOfWork模式如何帮助解决并发问题?
我从Martin Fowler的名著中读到了关于工作单元的企业设计模式,我有几个问题: 作者说这种模式需要:Java UnitOfWork模式如何帮助解决并发问题?,java,hibernate,persistence,unit-of-work,Java,Hibernate,Persistence,Unit Of Work,我从Martin Fowler的名著中读到了关于工作单元的企业设计模式,我有几个问题: 作者说这种模式需要: 1.避免冗余的数据库通信(很明显) 2.解决并发问题 问题: 实际上,我不明白这种模式如何帮助解决并发问题。你能解释一下吗 我应该为每个实体类或每个实体对象或每个应用程序的单实例创建UoW实例吗 UoW一书中的一个例子如下: class UnitOfWork .... private List newObjects = new ArrayList(); private
1.避免冗余的数据库通信(很明显)
2.解决并发问题 问题:
class UnitOfWork ....
private List newObjects = new ArrayList();
private List dirtyObjects = new ArrayList();
private List removedObjects = new ArrayList();
public void registerNew(DomainObject o){...}
public void registerDirty(DomainObject o){...}
public void registerRemoved(DomainObject o){...}
public void registerClean(DomainObject o){...}
这里看起来像是单个UoW负责一些对象集
但在另一个例子中:
class UnitOfWorkServlet ...
final protected void doGet(HttpServletRequest request,HttpServletResponse response){
try{
UnitOfWork.newCurrent(); // create UnitOfWorkInstance in ThreadLocal
handleGet(request, response);
UnitOfWork.getCurrent().commit()
} finally(){
UnitOfWork.setCurrent(null) //threadLocalInstance.set(null)
}
}
在这里,我们为每个Get请求创建新的UoW实例,看起来每个请求都与另一个请求隔离开来。它如何解决并发问题
假设我们有两个相关实体:客户和订单。我们应该创建两个不同的UnitOfWork实例,还是在两个实体中都使用单个实例
作者声明我们必须将UoF实例存储在ThreadLocal中以避免灾难,但我不明白为什么。他在说什么 假设我们有两个来自UI的不同的同时请求,但它们都更新了数据库中的客户端字段。你能解释一下这些请求的行为吗?应创建多少UoF工作以及它们如何解决并发问题 附笔。 我主要是在java方面有经验的,所以如果你的答案能够解释基于JPA/Hibernate的事情,对我来说是可以的