2012-06-06 80 views
1

我开发一个信息系统,有件事我不知道该如何处理。 假设我的网站允许管理员编辑用户。当两个管理员想要同时编辑同一用户时,不应允许稍后点击编辑的管理员,然后再点击第一个管理员。与服务器和JPA交易客户交谈

所以我要当管理员点击编辑按钮时,就会把编辑的形式打开的事务,并承诺。我能想到的

一种解决方案是把EntityManager的一个名为ConversationScoped CDI豆。但我认为这不是一个好的解决方案,因为表示层应该与业务层分开,并且数据库访问属于业务层。

另一种解决办法是从名为ConversationScoped CDI豆会呼吁有状态bean的方法把EntityManager的一个状态bean和管理事务。但是,在Web层管理交易是一个好主意?如果我决定将我的业务层部署在另一个应用程序服务器上,会管理远程EJB上的事务吗?而且,如果EJB被钝化,交易会丢失吗?

这也与另一个问题有关,当您使用EntityManager从数据库检索对象时,一旦事务关闭,它就会被分离。如果对象有一些延迟的初始化字段,则Web层无法访问它们,因为当对象返回到Web层时,它将被分离。因此,您可以管理Web层中的事务或迭代业务层中的惰性初始化字段。前者的解决方案似乎不正确,后者可能会变得非常冗长和复杂。

我知道我问了太多的问题,但我真的想知道如何正确地做到这一点。

我有这些技术:CDI,Seam 3和EJB。

当然,如果你知道一个更好的解决方案,我很高兴听到这个消息。

提前致谢。

+2

有乐观锁定的Google。悲观锁定是你所描述的,但现在的乐观是常态。 – davidfrancis

+0

@davidfrancis谢谢! – VaclavDedik

+0

Doh为什么我没有给出答案并得到一些代表呢!别介意,很高兴帮助;]。 – davidfrancis

回答

2

JPA乐观锁定机制解决了这个问题(请参阅@davidfrancis评论)。