创建样板项目以向启用 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/