Совместно использовать транзакцию между фильтром JAX-RS и ресурсом - PullRequest
0 голосов
/ 26 октября 2018

Возможно ли иметь одну и ту же транзакцию в 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.

Есть ли способ иметь только одну транзакцию для моих фильтров и ресурса?

...