什么是“正确的”?使用 Spring 从一个 EAR 文件到另一个 EAR 文件调用事务安全的方法?
我有两个 Spring 应用程序 A 和 B,每个应用程序都位于一个单独的 EAR 文件中。现在我想从 A 呼叫到 B,反之亦然,甚至可能是 A -> 。 B->一个或更多。
调用必须交易安全。
推荐的方法是什么?
I have two spring applications A and B, each within an individual EAR file. Now I want to call from A to B and vice versa, maybe even A -> B -> A or more.
The calls have to be transactionally safe.
What is the recommended approach?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
确保安全的唯一方法是使用由容器管理的 JTA 事务。 Spring 通过其 JtaTransactionManager 支持这些,因此您可以像 Spring 中的任何其他事务一样编写事务逻辑。所有数据源必须由容器管理,而不是由应用程序管理。
The only way to keep this safe is to use JTA transactions, managed by the container. Spring supports these via its
JtaTransactionManager
, so you can write your transactional logic the same as any other transactions in Spring. All data sources must be managed by the container, not by the applications.进行同步事务(通过两次提交)从一个 EAR 到另一个 EAR 的调用的唯一方法是使用远程 EJB :(
如果在您的情况下可能的话,我宁愿使用 JMS 进行异步调用,发送该消息将与您的事务结合在一起,但接收方将无法回滚您的事务,因为远程 EJB 调用可以回滚您的事务。
The only way to make a synchronous transactional -- with two face commit -- call from one EAR to another is to use remote EJBs :(
If it is possible in your case I would rather go for an asynchronous call using JMS, the sending of the message will be coupled with your transaction but the receiver won't be able to rollback your transaction as it would be possible with a remote EJB call.