際際滷

際際滷Share a Scribd company logo
RMI を聞ってみた
O |孚
2017 定 8 埖 23 晩
/danielsun5454/20170823-rmi
アジェンダ`
¢
徭失B初
¢
きっかけ
¢
RMI を聞ってみた
¢
チュ`トリアルにない坪否
¢
原h
徭失B初
¢
O |孚┐修 とうしょう
C O歴腎のO
C |孚mの|孚
¢
サ`バ`サイド Java エンジニア Struts1 繁
¢
Linux(Fedora) ユ`ザ`
¢
云晩のサンプルコ`ド
C https://github.com/hanaokaiwa/rmi.acpi
きっかけ
¢
プロジェクトでは Linux+KVM  guest:
Windows7 を聞喘
¢
KVM の guest からは host のバッテリ`彜rが
えない
¢
}方のメンバ`がノ`ト PC の坿を靴畦れて
いて、Xぎを軟こした
きっかけ
¢
KVM の guest から host のバッテリ`彜rが函れるプ
ログラムの恬撹をQ吭
¢
もちろん Java で
C 昨a
¢
EJB リモ`ト柵び竃し
¢
RESTful サ`ビス
¢
RMI  Remote Method Invocation 
JavaEE サ`バ`が駅勣
RMI を聞ってみた
¢
インタ`フェ`ス協x
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 インタ`フェ`スのg廾クラス
AcpiServer obj = new AcpiServer();
Acpi stub = (Acpi) UnicastRemoteObject.exportObject(obj);
// bind をg仏
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 を聞ってみた
¢
g佩桑
C rmiregistry
C Server 
C Client 
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/rmi/hello/hello-world.html 歌深
チュ`トリアルにない坪否
¢
rmiregistry の CLASSPATH O協
C Acpi インタ`フェ`スが歌孚できる
C O協しないと、 Server 箸ら bind rに參和箭翌
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 峺協
C Server 箸ら仝 -Djava.rmi.server.hostname
=xxx 々を聞喘
C 聞喘しないと Client 箸ら參和の箭翌
java.rmi.ConnectException: Connection refused to host:
127.0.0.1;
nested exception is:
java.net.ConnectException: Connection refused

☆KVM 蒙嗤の}かもしれない
チュ`トリアルにない坪否
¢
Server 箸能K阻r unbind をする
// unbind をg仏
Registry registry = LocateRegistry.getRegistry();
registry.unbind("BIND_NAME");
C unbind しないと、壅業 Server 箸ら bind をする
と參和の箭翌
java.rmi.AlreadyBoundException: BIND_NAME

☆rmiregistry を壅軟咾垢襪、貧のコ`ドをg佩する駅勣がある
チュ`トリアルにない坪否
¢
Server 箸ら port 桑催峺協
☆ 峺協しないと、ランダムなポ`トを聞喘する
int port = 12345;
// Acpi インタ`フェ`スのg廾クラス
AcpiServer obj = new AcpiServer();
Acpi stub =
(Acpi) UnicastRemoteObject.exportObject(obj, port);
// bind をg仏
Registry registry = LocateRegistry.getRegistry();
registry.bind("BIND_NAME", stub);
☆rmiregistry のデフォルトポ`トは 1099
原h
¢
鮫中キャプチャ`
http://www.javainthebox.net/laboratory/JavaSE6/trayicon/trayicon.html 歌深
原h
¢
暴が房う RMI の嘛
Client rmiregistry
Server
1. rmiregistry 軟
3. Server を BIND_NAME
で bind
4. BIND_NAME を勣箔
5. Server の
ポ`トを卦す
2. あるポ`トを Listen
7. Y惚を卦す
6. リモ`ト
柵び竃し

More Related Content

20170823 rmiを聞ってみた