java - java RMI服务中的常见事务逻辑?
问题描述
我们有几个带有 RMI-api 的遗留 Java 服务,由需要“rmic”预编译的旧 JRMP 方法实现。
作为将所有内容迁移到最新 JDK 的一部分,我还尝试将 RMI 内容重写为更当前的方法,其中实现类从 UnicastRemoteObject 扩展,从而摆脱了 rmic 预编译步骤。
遵循一个简单的示例,例如这里: https ://www.mkyong.com/java/java-rmi-hello-world-example/ 但我无法使用commit/rollback transaction-logic找到这样的示例。
在当前的遗留代码中,所有事务逻辑都在 JRMP 容器代码中的单个通用方法 invokeObject() 中处理,该方法将在一个地方拦截所有RMI api 调用,如果 RMI 调用是成功,如果抛出异常则回滚。
在没有 JRMP 容器的情况下,我无法弄清楚如何在新方法中执行此操作。显然,我不想将提交/回滚逻辑编码到每个 api 方法中(有几十个),但仍将统一的逻辑保留在一个地方。
任何建议、提示、参考等,如何在一个点中拦截所有 RMI 调用以实现事务逻辑?
解决方案
您可以考虑将 Spring 与 RMI 一起使用。它提供了一种使用事务的简化方式。@EnableTransactionManagement
您只需从注释中设置一些持久性设置,它就会在@Transactional
. 它可以是一个类或一个类的方法。
解释在项目 README 中。
推荐阅读
- javascript - 根据选定的下拉列表项自动填充多个文本框
- deep-learning - pytorch 内存不足
- azure - 如何从 ADF 中的文件名中提取日期?
- php - 在 Laravel (v8) 中访问顶级组件内的视图数据
- cloudflare - 将请求从一个域转发到另一个域而不更改浏览器中的 URL
- android - Android 导出上的 Godot SQLite 数据库
- php - 我想知道如何在 PHP 的复杂语句中组合 If、AND 和 OR
- javascript - 如何将数组数组转换为 JavaScript 中的对象数组?
- node.js - 如何为离线构建创建 NPM 环境
- r - 在 x 轴上按日期替换背景颜色(例如按月份)