Spring+Jersey 事务注解

标签 spring rest jpa transactions jersey

创建样板项目以向启用 JPA 的数据库公开 RESTful API。它使用以下版本:
- Spring 3.2.6
- 休眠 4.3.0
- 泽西 2.5.1
我终于能够让他们一起玩,但仍然存在一些问题。这是最令人费解的事情之一(请参阅 REST 服务类的摘录)

@Service
@Path("resources")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
@Transactional
public class ResourceServices extends AbstractServices<Resource> {
...
}

如果使用@Service 注释类,则忽略@Transactional 注释并且不会启动方法的事务。但是,当更改为 @Component 时,一切正常。想不通,为什么。

整个项目可见here

最佳答案

我也对此感到困惑,但最终想通了。

jersey-spring 模块只会导入 @Component来自您的上下文的bean。字面上有一个 beanClass.isAnnotationPresent(Component.class)签到SpringComponentProvider .

否则,它似乎只创建了 bean 的半生不熟的请求范围实例(我在服务构造函数中使用 Thread.dumpStack 进行了跟踪)。他们似乎有依赖注入(inject),但没有 AOP。

Jersey 的问题跟踪器中已经有许多 JIRA 项目:JERSEY-2495 , JERSEY-2059 , JERSEY-2301

更新 :我对这些的拉取请求已被合并,这应该在 Jersey 2.11 中修复。

关于Spring+Jersey 事务注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104567/

相关文章:

java - 多个事务管理器 - 在运行时选择一个 - Spring

java - 如何在 JPA 中映射这些实体

java - 部署在 Tomcat 上的 DBCP 中的死锁问题

java - 当我从数据库表中获取特定列时,在代码中出现 java.sql.SQLException

java - 无法让 MappedSuperClass 抽象实体与 Spring Boot 和 JPA 一起使用

java - Spring 数据休息 : set null value by PATCH request

rest - 如何使用 Windows Phone 8 POST 到 RESTful API

javascript - CSRF/CSRF 安全 REST 调用的最佳实践?

java - JPA CriteriaQuery 计算用于 where 谓词的日期时间差

java - @AdminPresentation在broadleafCommerce中有什么用