
分散オブジェクト環境を学ぶ
連載:HORBと遊ぼう(3)
オブジェクト指向にシームレスな
分散オブジェクト環境
萩本順三HORB Openマネージャ
株式会社豆蔵
2001/1/13
(2) HORBでオブジェクトが飛ぶ |
Javaでは、メソッドの引数や戻り値に、JDKで提供されているオブジェクトや自分で作成したオブジェクトを指定することができます。HORBで作成したリモート・クラスの引数や戻り値にも、制限付きではありますがオブジェクトを指定することができます。この制限とは、java.io.Serializableインターフェイスをimplementsしたクラスでなければならないということです。
さて、リモート・クラスの引数や戻り値にオブジェクトを渡すということは、どういうことでしょうか?
■オブジェクトがネットワーク間を渡り歩くとは?
すでに前回までにStringを引数や戻り値として使った例がありましたので、お分かりでしょうね。そうです、リモート・クラスに定義されたメソッドの引数や戻り値に指定されたオブジェクトは、ネットワーク間を渡り歩くオブジェクトになるのです。つまりオブジェクトが飛ぶんですよ。
このことを実感してもらうために以下のサンプル・コードを使って解説しましょう。
■リスト5 住所録を管理するリモート・クラス
addメソッドはネットワーク転送されてきた住所録オブジェクトをVectorに登録します。getAddressBooksメソッドは、Vectorをクライアントに戻します。
import java.util.*; |
リスト5 AddressBookStore.java |
■リスト6 1人分の住所録クラス(ネットワーク間を転送される)
1人分の住所録を管理するためのクラスです。toStringメソッドは、java.lang.Objectクラスのメソッドをオーバライドしたものです。このメソッドはオブジェクトの文字列表現を返すために使われ、System.out.printlnメソッドなどによって使われています。System.out.printlnメソッドは、渡されたオブジェクトにtoStringメソッドを送ることで、オブジェクトの文字列表現を取り出して標準出力に表示しています。
public class AddressBook
implements java.io.Serializable{ |
リスト6 AddressBook.java |
■リスト7 住所録を登録するクライアント
代理オブジェクトAddressBookStore_Proxyを生成して、3人分の住所録(AddressBook)オブジェクトを実オブジェクトAddressBookStoreに送ります。その後、getAddressBooksメソッドによって全員分の住所録をVectorとして受け取り、それを表示しています。
これらのクラスを使った、プログラムの全体的な流れを説明しましょう。まず、クライアントで作成された3個のAddressBookオブジェクトがサーバ側に転送されます。そして、AddressBookStore内のVectorオブジェクトにひとまず収納されます。
その後、クライアントから代理オブジェクト(AddressBookStore_Proxy)のgetAddressBooksメソッドが呼び出され、Vectorオブジェクトが丸ごとクライアントに転送され、標準出力に表示されています。
import java.util.*; |
リスト7 AddressBookClient.java
|
○コンパイル
AddressBookStore.javaをhorbcによってコンパイルします。その後、AddressBook.javaとAddressBookClient.javaをjavacによってコンパイルします。
>horbc -delete AddressBookStore.java |
○実行結果
いつものようにHORBサーバを立ち上げて、次にクライアントからAddressBookClientをjavaにて起動します。
[HORBサーバ] >horb
追加>郵便番号[002-0011] 氏名[萩本豆蔵] 住所[千駄ヶ谷] 電話[03-4001-1310]
追加>郵便番号[223-0101] 氏名[豆田鈴子] 住所[四谷三丁目] 電話[03-9999-1310] |
[クライアント]
>java AddressBookClient |
いかがですか。HORBでオブジェクトが飛んでいくというイメージがつかめましたか? とっても簡単なんだけど結構面白いアイデアが湧いてきませんか?
![]() |
Index | |
(1) HORBにおける継承とは クラスの継承利用 HORBリモート・クラスの継承利用 |
|
![]() |
(2) HORBでオブジェクトが飛ぶ オブジェクトがネットワーク間を渡り歩くとは? |
![]() |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
![]() |
|
|
|
![]() |