如何使用JAX-RS,Spring和JPA管理事务
我正在使用JAX-RS提供基于HTTP的界面来管理数据模型.数据模型存储在数据库中并通过JPA进行交互. 这允许我修改数据模型的接口以适应REST客户端,并且大多数似乎工作得很好.但是,我不确定如何处理由JAX-RS资源提供的方法需要事务的情况,这会影响JPA get,update,commit-on-tx-end模式,因为只有事务包装get操作,因此永远不会提交更新.如果单个REST操作需要多个JPA操作,我可以看到同样的问题. 当我使用Spring的事务支持时,显而易见的事情是将@Transactional应用于JAX-RS资源中的这些方法.但是,为了实现这一点,Spring需要管理JAX-RS资源的生命周期,而我所知道的使用示例在需要时通过“new”创建资源,这让我有点紧张. 我可以想到以下解决方案: >更新我的JPA方法,以原子方式从我的REST接口提供我想要做的所有事务的事务管理版本.应该工作,将事务保持在JAX-RS层之外,但是阻止了get,这意味着我需要创建一个非常精细的JPA接口. 有人有什么建议吗?我很可能错过了某个关键点. 更新 – 为了解决get,commit-on-tx-close流程周围缺少事务的问题,我可以公开EntityManager merge(object)方法并手动调用它.不整齐,但不能解决更大的问题. 更新2 @skaffman
在JAX-RS资源中,由new创建,没有事务
最佳答案
我有一些建议
>在JPA和JAX-RS图层之间引入一个图层.该层由Spring管理的@Transactional bean组成,并将从其组件JPA调用组成各种业务级操作.这有点类似于你的(1),但保持JPA层简单. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |