0

在我的 Java SE/Java EE 应用程序中,我有一个 DAO 接口来包装实体管理器以允许简单的 CRUD 操作。我还有一个扩展的 DAO 接口,它允许将简单的 CRUD 操作作为批处理操作执行,这意味着所有操作都将在同一个事务下完成。如果顺序 CRUD 操作之一失败,这允许我回滚。

public interface DomEntityManager {
   void createEntity(Object aEntity) throws TransactionException;
   void deleteEntity(Object aEntity) throws TransactionException;
   void updateEntity(Object aEntity) throws TransactionException;
   <T> T findById(int aId, Class<T> aClass);
   <T> T getNewEntity(Class<T> aClass) throws TransactionException;
}

public interface BatchDomEntityManager extends DomEntityManager {
   void execute(BatchTransation transaction);
}

public interface BatchTransaction {
   public void run();
}

在上述设计中,我想要实现的是,如果客户端调用代码在执行 BatchTransaction 方法中调用任何 DomEntityManager 操作,那么我希望这些操作使用单个事务。

目前,Dom 实体管理器实现具有直接的实现,其中为每个请求创建一个实体管理器,并在 DAO 方法内的请求结束时启动和提交新事务。我对如何实施共享实体管理器案例感到困惑。我应该使用 ThreadLocal,在这种情况下,执行事务块应该在单独的线程中执行。我可以阻止执行调用,直到事务完成。

感谢您的任何建议。

4

0 回答 0