我正在编写一个提供管理 JPA 实体(使用 Hibernate)的 REST 服务(使用 Apache-CXF)的应用程序。
我对事务管理有点迷茫,想听听你关于这个话题的建议。
目前,我在我的业务 REST 服务和较低的服务之间放置了一个中间层,仅用于事务管理目的。
目前,我的代码看起来很像:
@Service
class PersistanceService<MyBusinessClass>{
MyBusinessClass load(Long id);
void save(MyBusinessClass businessObject);
}
@Service
class BusinessService<MyBusinessClass>{
void doSomethingOn(MyBusinessClass businessObject);
}
@Service
class TransactionBusinessService<MyBusinessClass>{
@Transactional
void doSomethingOn(Long id) {
MyBusinessClass businessObject = persistanceService.load(id);
businessService.doSomethingOn(businessObject);
persistanceService.save(businessObject);
}
}
@Service
@path("/foo")
class RESTService {
@Path("/doSomething")
void doSomethingOn(Long id) {
transactionBusinessService.doSomethingOn(id);
}
}
我认为TransactionBusinessService是矫枉过正。我希望 ''Spring'' 或 ''CXF'' 为我处理事务:我觉得请求是这样做的良好粒度:在每个请求的开头初始化一个实体管理器,并在最后提交更新.
我尝试将@Transactional注释添加到REST 方法本身,但它似乎被忽略了,或者与CXF 冲突。
- 您认为在请求级别委派事务而不再为它烦恼是个好主意吗?
- 如何让 Spring 或 CXF 将事务管理绑定到我的请求?
提前感谢您的建议。