@ Publicless (name = "A") открытый класс A {
@PersistenceContext
private EntityManager entityManager;
@EJB
private B serviceB;
public void doSomeProcessA(List<AnyEntity> entities) {
for (AnyEntity entity: entities) {
//do some process.
entityManager.persist(entity);
serviceB.b(entity.getPrimaryKey());
}
}
}
@Stateless(name = B)
public class B {
@PersistenceContext
private EntityManager entityManager;
@Resource
private SessionContext sessionContext;
public void b (String id) {
AnyEntity entity = entityManager.find(AnyEntity.class, id);
try {
//do some process
entityManager.merge(entity);
} catch (Exception e) {
sessionContext.setRollbackOnly();
}
}
}
это мой сценарий.Я хочу сохранить сущность в первую очередь.И сделать некоторые другие изменения в сущности в функции b.Если возникает какое-либо исключение, я хочу сделать откат обновления транзакции объекта, но я хочу сохранить постоянный объект.
Если я использую этот код в качестве примера, если произойдет какое-либо исключение, персистентные сущности не будут зафиксированы.Если я использую @TransactionAttribute (TransactionAttributeType.REQUIRES_NEW) для функции, процесс не завершен в службе A, транзакция не завершена и не записана в db, я не могу достичь сущности в службе B. Я не могу изменить b как b (сущность AnyEntity), потому чтобизнес-логики, которую мы используем.Что я могу сделать, чтобы решить эту проблему.