Возможно ли иметь одну и ту же транзакцию в ContainerRequestFilter
и в ресурсе?
В настоящее время у меня есть следующая реализация фильтра (упрощенная):
@Provider
public class SecurityContextFilter implements ContainerRequestFilter {
@Inject UserDAO userDAO;
@Override
public void filter(ContainerRequestContext requestContext) {
Integer idUser = getIdUserFromToken(...);
User user = this.userDAO.getById(idUser);
// Create securityContext with principal = user
requestContext.setSecurityContext(...);
}
}
Так что в моемРесурс, я могу ввести SecurityContext
и извлечь свой принципал, который является зарегистрированным в User
.
Однако этот пользователь отсоединен, поэтому у меня нет доступа к отложенным загруженным свойствам.В журналах базы данных я вижу, что транзакция фиксируется в конце фильтра, а ресурс выполняется в новой транзакции.В моем понимании это означает, что в моих фильтрах и ресурсах есть другой сеанс Hibernate.Решение, которое у меня есть сейчас, - это объединение вошедшего в систему пользователя в моем ресурсе, что раздражает.
У меня нет ни пользовательского управления транзакциями, ни аннотаций, связанных с транзакциями.Я использую JAX-RS с Hibernate в Wildfly 11.
Есть ли способ иметь только одну транзакцию для моих фильтров и ресурса?