SlideShare a Scribd company logo
RMI を使ってみた
孫 東照
2017 年 8 月 23 日
https://www.slideshare.net/danielsun5454/20170823-rmi
アジェンダー
●
自己紹介
●
きっかけ
●
RMI を使ってみた
●
チュートリアルにない内容
●
付録
自己紹介
●
孫 東照(そん とうしょう)
– 孫悟空の孫
– 東照宮の東照
●
サーバーサイド Java エンジニア( Struts1 職人)
●
Linux(Fedora) ユーザー
●
本日のサンプルコード
– https://github.com/hanaokaiwa/rmi.acpi
きっかけ
●
プロジェクトでは Linux+KVM ( guest:
Windows7 )を使用
●
KVM の guest からは host のバッテリー状況が
見えない
●
複数のメンバーがノート PC の電源を挿し忘れて
いて、騒ぎを起こした
きっかけ
●
KVM の guest から host のバッテリー状況が取れるプ
ログラムの作成を決意
●
もちろん Java で!
– 候補
●
EJB リモート呼び出し
●
RESTful サービス
●
RMI ( Remote Method Invocation )
JavaEE サーバーが必要
RMI を使ってみた
●
インターフェース定義
public interface Acpi extends java.rmi.Remote {
// バッテリーの残量 % を取得する
int getBatteryCapacity() throws RemoteException;
// AC 電源が ON かどうかを取得する
boolean onAcPower() throws RemoteException;
// バッテリーが充電中かどうかを取得する
boolean isCharging() throws RemoteException;
}
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/rmi/hello/hello-world.html 参考
RMI を使ってみた
●
Server 側で bind
// Acpi インターフェースの実装クラス
AcpiServer obj = new AcpiServer();
Acpi stub = (Acpi) UnicastRemoteObject.exportObject(obj);
// bind を実施
Registry registry = LocateRegistry.getRegistry();
registry.bind("BIND_NAME", stub);
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/rmi/hello/hello-world.html 参考
RMI を使ってみた
●
Client 側から呼び出し
String hostname = "xxxxx";
// Acpi を Server から取得
Registry registry = LocateRegistry.getRegistry(hostname);
Acpi acpi = (Acpi) registry.lookup("BIND_NAME");
// acpi を使用
int capacity = acpi.getBatteryCapacity();
boolean onAcPower = acpi.onAcPower();
boolean isCharging = acpi.isCharging();
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/rmi/hello/hello-world.html 参考
RMI を使ってみた
●
実行順番
– rmiregistry
– Server 側
– Client 側
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/rmi/hello/hello-world.html 参考
チュートリアルにない内容
●
rmiregistry の CLASSPATH 設定
– Acpi インターフェースが参照できる
– 設定しないと、 Server 側から bind 時に以下例外
java.rmi.ServerException: RemoteException occurred in server thread;
nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments;
nested exception is:
java.lang.ClassNotFoundException: Acpi
...
チュートリアルにない内容
●
Server 側から hostname 指定
– Server 側から「 -Djava.rmi.server.hostname
=xxx 」を使用
– 使用しないと Client 側から以下の例外
java.rmi.ConnectException: Connection refused to host:
127.0.0.1;
nested exception is:
java.net.ConnectException: Connection refused
...
※KVM 特有の問題かもしれない
チュートリアルにない内容
●
Server 側で終了時 unbind をする
// unbind を実施
Registry registry = LocateRegistry.getRegistry();
registry.unbind("BIND_NAME");
– unbind しないと、再度 Server 側から bind をする
と以下の例外
java.rmi.AlreadyBoundException: BIND_NAME
...
※rmiregistry を再起動するか、上記のコードを実行する必要がある
チュートリアルにない内容
●
Server 側から port 番号指定
※ 指定しないと、ランダムなポートを使用する
int port = 12345;
// Acpi インターフェースの実装クラス
AcpiServer obj = new AcpiServer();
Acpi stub =
(Acpi) UnicastRemoteObject.exportObject(obj, port);
// bind を実施
Registry registry = LocateRegistry.getRegistry();
registry.bind("BIND_NAME", stub);
※rmiregistry のデフォルトポートは 1099
付録
●
画面キャプチャー
http://www.javainthebox.net/laboratory/JavaSE6/trayicon/trayicon.html 参考
付録
●
私が思う RMI の動作
Client rmiregistry
Server
1. rmiregistry 起動
3. Server を BIND_NAME
で bind
4. BIND_NAME を要求
5. Server の
ポートを返す
2. あるポートを Listen
7. 結果を返す
6. リモート
呼び出し

More Related Content

What's hot

Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
Tatsumi Naganuma
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migration
spg_games
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
 
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
furandon_pig
 
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
Nobuhiro Nakashima
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
Yohei Sasaki
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
mganeko
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
Satoshi Takami
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
mganeko
 
[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いているAkihiro Kuwano
 
NetBSD on Conoha VPS at JNUG BoF 2014
NetBSD on Conoha VPS at JNUG BoF 2014NetBSD on Conoha VPS at JNUG BoF 2014
NetBSD on Conoha VPS at JNUG BoF 2014Ryo ONODERA
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
mganeko
 
Node.js Hands-On
Node.js Hands-OnNode.js Hands-On
Node.js Hands-On
Akinari Tsugo
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
Ito Kohta
 
JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js
Martin Heidegger
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
 
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
Ryosuke Akiyama
 

What's hot (20)

Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migration
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
 
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
こんてなぐらし!〜FreeBSD VPSでライブマイグレーション〜
 
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
 
20131012 nodejs
20131012 nodejs20131012 nodejs
20131012 nodejs
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
Google Meet でもバーチャル背景を使いたい (WebRTC Meetup Online)
 
[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている
 
NetBSD on Conoha VPS at JNUG BoF 2014
NetBSD on Conoha VPS at JNUG BoF 2014NetBSD on Conoha VPS at JNUG BoF 2014
NetBSD on Conoha VPS at JNUG BoF 2014
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
Node.js Hands-On
Node.js Hands-OnNode.js Hands-On
Node.js Hands-On
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
 
JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
 

Similar to 20170823 rmiを使ってみた

OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾外道 父
 
第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報
Midori Oge
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
Shinya Okano
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトnormalian
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
kishima7
 
Let's play with Goldfish
Let's play with GoldfishLet's play with Goldfish
Let's play with Goldfish
Tetsuyuki Kobayashi
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係Misao X
 
JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発Yoichi Toyota
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
mametter
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
masayoshi takahashi
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
Wataru NOGUCHI
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
Yuta Ogura
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
ogawatti
 

Similar to 20170823 rmiを使ってみた (20)

OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイト
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
 
Let's play with Goldfish
Let's play with GoldfishLet's play with Goldfish
Let's play with Goldfish
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係
 
JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発
 
Mbed2013
Mbed2013Mbed2013
Mbed2013
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集今時のDev opsの取り組み事例集
今時のDev opsの取り組み事例集
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
Open VZ
Open VZOpen VZ
Open VZ
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 

20170823 rmiを使ってみた