В нашем приложении Java EE у нас есть настройка, где
Service A является конечной точкой. В некоторых действительных бизнес -случаях эта конечная точка бросает исключение и возвращает код ошибки клиенту - это
ожидаемое поведение и не может быть изменено. Служба B выполняет обновление (данные о работе с активностью), которое мы хотим сохранить , даже когда обслуживание A -ожидаемой ошибки. Class = "Lang-Java PrettyPrint-Override">
Код: Выделить всё
// Service A (has maven dep on ServiceB)
@POST
@Path("/{id}/book")
public Response bookXXXX(..) {
try {
serviceB.doSmth(); // should persist even if error follows
...
} catch (SpecificServiceBException e) {
throw Response.error(Status.CONFLICT, someInfo); // expected and cannot be changed
}
}
< /code>
// Service B
@ApplicationScoped
public class ServiceB {
@Inject
private IRepository repository;
public void deleteActivity(Long key) {
ActivityEntity activity = find...;
activity.updateLastDate(null);
repository.update(activity);
}
}
мы пробовали использовать @transactional (tress_new) , но это приводит к
тупикам в базе данных (Oracle). Поскольку база данных теперь имеет две одновременные транзакции и ожидает первого («Внешний») для совершения и наоборот. Весна.
Подробнее здесь:
https://stackoverflow.com/questions/796 ... ransaction