1

我们有一个基本的 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 和业务逻辑以允许这种情况发生并防止半/永久锁定?由于事务在业务层开始和结束,我不确定我们如何锁定它并在用户在表示层进行交互时保持该锁定。

4

0 回答 0