首页 > 解决方案 > 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 调用以实现事务逻辑?

标签: javajdbcrmirmicjrmp

解决方案


您可以考虑将 Spring 与 RMI 一起使用。它提供了一种使用事务的简化方式。@EnableTransactionManagement您只需从注释中设置一些持久性设置,它就会在@Transactional. 它可以是一个类或一个类的方法。

示例代码在这里

解释在项目 README 中。


推荐阅读