前書き
技術名を聞いた時には、全くピンとこなかったのですが
調べてみたら面白かったです。
備忘がてら、概要と動向を纏めます。
概要
この技術なに?
- Java Remote Method Invocation(RMI)とは、
異なるJVM上のインスタンス(RemoteObject)に設けたメソッドを呼び出す為の機能。- RepogitoryからRemoteObject取得後、普段どおりJavaコーディングする。
- RESTのように「Httpリクエスト投げて...」等と通信を意識する必要は無い。
- 実装例はひしだまさんが詳しい。
- Java 1.1で導入。
- java.rmiパッケージ配下に、ServerやClientの関連classとinterfaceが有る。
興味深い点
- JVMコンテキストでメソッド呼び出せる。
- 分散ガベージコレクション機構を備える。
- RMIで呼び出すと、Server側JVMはClientに参照をリースする。
- Clientが一定期間リース更新しなければ、Server側JVMはインスタンスをGC可能として扱う。
- GCタイミングで、マーク済のRemoteObjectも破棄する。
- 分散ガベージコレクション機構を備える。
- 通信プロトコルを選べる。
- Java Remote Method Protocol(JRMP): Java専用。
- SOAPと比べてXML処理がない分、オーバーヘッド低い。シリアライズのみ行うイメージ。
- HTTP: 非推奨。
- Internet Inter-ORB Protocol(IIOP): 標準外だが利点あり。
- CORBA仕様の一部。Java SE 11でJEP 320にて標準からは廃止された。
- Java以外の、異なる言語のObject Request Brokerとも通信が可能。
- Java Remote Method Protocol(JRMP): Java専用。
動向
-
RemoteObjectには状態が定義されていたがJava SE 15でJEP 385にて廃止。
- 以前はRemote Object Activationで、active/inactive/lazyを切り替え可能だった。
-
数年前の情報によれば、Remote EJBではRMIを利用...だが、現状どうなのか?調べきれず。
参考リンク
- パッケージ概要:java.rmi
- Java Remote Method Invocation(Java SE 8)
- RMIと関連技術