分散オブジェクト環境を学ぶ
連載:HORBと遊ぼう(4)
HORBでサーバアプリケーションを作ろう
萩本順三
HORB Openマネージャ
株式会社豆蔵
2001/2/18
(3) サーバアプリケーションを作る |
ここまでで接続モデルの簡単な例を示しました。ここまでの例では、サーバ側で生成されるTest2リモートオブジェクトはHORBサーバによって自動的に生成されたものです。ここからは、生成モデルのもっと高度な使い方を説明しましょう。
まず、サーバ側にアプリケーションを起動し、その中からリモートオブジェクトを名前付きでHORBサーバに登録する方法を示します。この方法を使うと、生成モデルの欠点として挙げた、「すでに稼働中のオブジェクトのサービスをクライアントから受ける」ということができるようになります。
リスト4は、サーバ側で起動するアプリケーションです。まず4行目で、HORBServerを起動しています。このときポート番号を指定します。HORBのデフォルトポート番号は8887番ですが、ここでは9000番を使ってみましょう。この命令で、HORBサーバは別スレッドを立ち上げ、HORBのリモートサービスを開始します。あ、そうそう、1行目のhorb.orbパッケージのインポートをお忘れなく。
5行目、6行目でTest2クラスのオブジェクトを作成しています。この2つのインスタンスをリモートオブジェクトとして登録しているのが、7行目と8行目です。このようにHORBサーバへリモートオブジェクトを登録するには、registerObjectメソッド(HORBServerのクラスメソッド)を使います。このメソッドの引数は、左から「リモートクラスのクラス名」、「リモートクラスのインスタンス」、「オブジェクトID」です。
このプログラムは、9行目まできてハイ終わりというように見えるでしょう。実際は、4行目で起動されたHORBサーバのスレッドは、起動されたスレッドが終わるまでプロセスが終了しない(デーモン)として起動されていますので、このプログラムは終了せずにコマンドラインから強制終了するまで、HORBのリモートサービスを続けるのです。
001:import horb.orb.*; |
リスト4 ServerApp.java
|
では次にコンパイルと実行について説明します。
■ コンパイル
コンパイルは、次のとおりです。
>horbc Test2.java |
コンパイルが完了したら、実行しましょう。
■ Serverの起動
今度は、horbを起動するのではありません。ServerAppを起動して、ServerApp の中でHORBがスレッドとして起動されます。
>java ServerApp |
■ Clientの起動
起動パラメータでは、ServerAppで登録されたホスト名とオブジェクトIDを使用します。また、ServerAppの中でHORBサーバはポート番号9000で起動しましたよね。よってクライアントの起動パラメータは、次のように指定してください。
>java RemoteTest localhost:9000/testObj1
localhost:9000/testObj2 |
■ 実行結果
サーバ側に以下のように表示されます。この結果から、ServerAppの中で生成した2個のTest2オブジェクトにクライアントの代理オブジェクトがそれぞれ接続されたことが分かりますか。この実行イメージは図3のようになります。
>java ServerApp |
図3 クライアントから2個のリモートオブジェクトに接続する |
今回は、生成モデルと接続モデルについて解説し、最後に接続モデルの例としてサーバアプリケーションからリモートオブジェクトを登録する方法を説明しました。次回は、コンフィグレーションファイルを使ってHORBサーバのさまざまな起動形態について見ていきましょう。また、アクセスコントロールリスト(ACL)を使ったユーザー認証やプロトコルの拡張についても挑戦したいと思います。では、3月2日のHORBシンポジウムでお会いしましょう。
Index | |
(1) 生成モデルって何だ? | |
(2) 接続モデルって何だ? HORBサーバの起動 Clientの起動 実行結果 代理オブジェクトの引数 |
|
(3)サーバアプリケーションを作る コンパイル Serverの起動 Clientの起動 実行結果 |
|
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|