JAX-RS过滤器与资源之间的共享事务

时间:2018-10-26 16:01:27

标签: java hibernate jax-rs transactional

是否可以在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会话。我现在拥有的解决方案是在我的资源中合并已登录的用户,这很烦人。

我没有任何自定义交易管理或与交易相关的注释。我在Wildfly 11中将JAX-RS与Hibernate一起使用。

有没有办法只对我的过滤器和资源进行一次交易?

0 个答案:

没有答案