JSF / JPA / EJB从“编辑”页面锁定实体的最佳实践

时间:2013-12-11 17:14:08

标签: jsf jpa entitymanager optimistic-locking pessimistic-locking

我们有一个基本的JSF / EJB / JPA Web应用程序,其中EJB业务bean与JPA /实体管理器一起工作并管理所有事务。

那是:

Page.xhtml => PageBean.java => BusinessBean.java => Entity.java

Page.xhtml显示实体的值。 PageBean通过方法调用(例如BusinessBean.getEntityById(x))从业务层检索实体。业务bean检索实体,如下所示:

public Entity getEntityById(String id) {
  return EntityManager.find(Entity.class, id);
}

然后在表示层中编辑实体,当提交表单时,将从业务bean上的后备页bean调用业务方法:

public Entity saveExistingEntity(Entity e) {
  Entity exists = entityManager.find(Entity.class, e.getId())
  if(exists != null) {
    entityManager.merge(e);
  }
  return e;
}

我不确定这是否是最好的方法,欢迎对此方法发表评论。

然而,核心问题涉及管理锁定。要求是当用户输入“编辑”时。实体的页面,实体被锁定,不允许其他用户通过任何其他方法编辑它(例如,为该实体输入编辑页面)。

如何构建我们的页面支持bean和业务逻辑以允许这种情况发生并防止半/永久锁定(如果用户消失)?由于交易在业务层开始和结束,我不确定如何在用户在表示层中进行交互时锁定它并保持锁定。

0 个答案:

没有答案