1 ." Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. |
1 '\" t |
2 ." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
2 .\" Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. |
3 ." |
3 .\" Title: tnameserv |
4 ." This code is free software; you can redistribute it and/or modify it |
4 .\" Language: English |
5 ." under the terms of the GNU General Public License version 2 only, as |
5 .\" Date: 2013年11月21日 |
6 ." published by the Free Software Foundation. |
6 .\" SectDesc: Java IDLおよびRMI-IIOPツール |
7 ." |
7 .\" Software: JDK 8 |
8 ." This code is distributed in the hope that it will be useful, but WITHOUT |
8 .\" Arch: 汎用 |
9 ." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
9 .\" |
10 ." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
10 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
11 ." version 2 for more details (a copy is included in the LICENSE file that |
11 .\" |
12 ." accompanied this code). |
12 .\" This code is free software; you can redistribute it and/or modify it |
13 ." |
13 .\" under the terms of the GNU General Public License version 2 only, as |
14 ." You should have received a copy of the GNU General Public License version |
14 .\" published by the Free Software Foundation. |
15 ." 2 along with this work; if not, write to the Free Software Foundation, |
15 .\" |
16 ." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
16 .\" This code is distributed in the hope that it will be useful, but WITHOUT |
17 ." |
17 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
18 ." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
18 .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
19 ." or visit www.oracle.com if you need additional information or have any |
19 .\" version 2 for more details (a copy is included in the LICENSE file that |
20 ." questions. |
20 .\" accompanied this code). |
21 ." |
21 .\" |
22 .TH tnameserv 1 "07 May 2011" |
22 .\" You should have received a copy of the GNU General Public License version |
|
23 .\" 2 along with this work; if not, write to the Free Software Foundation, |
|
24 .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
25 .\" |
|
26 .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
27 .\" or visit www.oracle.com if you need additional information or have any |
|
28 .\" questions. |
|
29 .\" |
|
30 .pl 99999 |
|
31 .TH "tnameserv" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" |
|
32 .\" ----------------------------------------------------------------- |
|
33 .\" * Define some portability stuff |
|
34 .\" ----------------------------------------------------------------- |
|
35 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
36 .\" http://bugs.debian.org/507673 |
|
37 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html |
|
38 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
39 .ie \n(.g .ds Aq \(aq |
|
40 .el .ds Aq ' |
|
41 .\" ----------------------------------------------------------------- |
|
42 .\" * set default formatting |
|
43 .\" ----------------------------------------------------------------- |
|
44 .\" disable hyphenation |
|
45 .nh |
|
46 .\" disable justification (adjust text to left margin only) |
|
47 .ad l |
|
48 .\" ----------------------------------------------------------------- |
|
49 .\" * MAIN CONTENT STARTS HERE * |
|
50 .\" ----------------------------------------------------------------- |
|
51 .SH "NAME" |
|
52 tnameserv \- インタフェース定義言語(IDL)。 |
|
53 .SH "概要" |
|
54 .sp |
|
55 .if n \{\ |
|
56 .RS 4 |
|
57 .\} |
|
58 .nf |
|
59 \fItnameserve\fR \fI\-ORBInitialPort\fR [ \fInameserverport\fR ] |
|
60 .fi |
|
61 .if n \{\ |
|
62 .RE |
|
63 .\} |
|
64 .PP |
|
65 \-ORBInitialPort \fInameserverport\fR |
|
66 .RS 4 |
|
67 ネーミング・サービスがORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references\fRメソッドの実装に使用するブートストラップ・プロトコルをリスニングする初期ポートです。 |
|
68 .RE |
|
69 .SH "説明" |
|
70 .PP |
|
71 Java IDLには、Object Request Broker Daemon (ORBD)が含まれます。ORBDは、ブートストラップ・サービス、一時ネーミング・サービス、永続ネーミング・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルではORBDを使用していますが、一時ネーミング・サービスを使用する例では、\fIorbd\fRのかわりに\fItnameserv\fRを使用できます。 |
|
72 .PP |
|
73 http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlにある |
|
74 orbd(1)または「Naming Service」を参照してください。 |
|
75 .PP |
|
76 CORBAのCOS (Common Object Services)ネーミング・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスである\fItnameserv\fRは、COSネーム・サービスの仕様を単純な形で実装したものです。 |
|
77 .PP |
|
78 オブジェクト参照はネームスペースに名前で格納され、オブジェクト参照と名前のペアは、それぞれネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、ネームスペースの唯一の永続バインディングです。Java IDLネーミング・サービス・プロセスを停止して再起動すると、残りのネームスペースは失われます。 |
|
79 .PP |
|
80 アプレットまたはアプリケーションからCOSネーミング・サービスを使用するためには、そのORBがネーミング・サービスが動作しているホストのポートを知っているか、そのネーミング・サービスの初期ネーミング・コンテキスト文字列にアクセスできる必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。 |
|
81 .SS "ネーミング・サービスの起動" |
|
82 .PP |
|
83 Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java IDL製品をインストールすると、Java IDLネーミング・サービスを起動するスクリプト(Oracle Solaris: |
|
84 \fItnameserv\fR)または実行可能ファイル(Windows: |
|
85 \fItnameserv\&.exe\fR)が作成されます。バックグラウンドで動作するように、ネーム・サービスを起動してください。 |
|
86 .PP |
|
87 特に指定しない場合、Java IDLネーミング・サービスは、ORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references methods\fRメソッドの実装に使用するブートストラップ・プロトコルに対してポート900でリスニングします。 |
|
88 .sp |
|
89 .if n \{\ |
|
90 .RS 4 |
|
91 .\} |
|
92 .nf |
|
93 tnameserv \-ORBInitialPort nameserverport& |
|
94 .fi |
|
95 .if n \{\ |
|
96 .RE |
|
97 .\} |
|
98 .PP |
|
99 ネーム・サーバー・ポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時、1024より小さいポートでプロセスを開始する場合は、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050のように別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、UNIXコマンド・シェルで次のように入力します。 |
|
100 .sp |
|
101 .if n \{\ |
|
102 .RS 4 |
|
103 .\} |
|
104 .nf |
|
105 tnameserv \-ORBInitialPort 1050& |
|
106 .fi |
|
107 .if n \{\ |
|
108 .RE |
|
109 .\} |
|
110 .PP |
|
111 WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。 |
|
112 .sp |
|
113 .if n \{\ |
|
114 .RS 4 |
|
115 .\} |
|
116 .nf |
|
117 start tnameserv \-ORBInitialPort 1050 |
|
118 .fi |
|
119 .if n \{\ |
|
120 .RE |
|
121 .\} |
|
122 .PP |
|
123 ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。これを行うには、ORBオブジェクトの作成時に\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティに新しいポート番号を設定します。 |
|
124 .SS "異なるホスト上でのサーバーとクライアントの実行" |
|
125 .PP |
|
126 Java IDLとRMI\-IIOPのほとんどのチュートリアルでは、ネーミング・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際にデプロイメントする場合には、クライアントとサーバーを、ネーミング・サービスとは異なるホスト・マシン上で実行することが多くなります。 |
|
127 .PP |
|
128 クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティと\fIorg\&.omg\&.CORBA\&.ORBInitialHost\fRプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。この例は、「Getting Started Using RMI\-IIOP」 |
|
129 (http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi\-iiop/rmiiiopexample\&.html)に示されています |
|
130 .PP |
|
131 コマンドライン・オプション\fI\-ORBInitialPort nameserverport#\fRと\fI\-ORBInitialHost nameserverhostname\fRを使用して、クライアントとサーバーに対してネーミング・サービスを探す場所を指定することもできます。コマンドライン・オプションを使用してこれを行う方法の1つの例は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/tutorial/jidl2machines\&.htmlの「Java IDL: The Hello World Example on Two Machines」 |
|
132 を参照してください |
|
133 .PP |
|
134 たとえば、一時ネーム・サービス\fItnameserv\fRが、ホスト\fInameserverhost\fRのポート1050上で実行されているとします。さらに、クライアントがホスト\fIclienthost\fR上で実行され、サーバーはホスト\fIserverhost\fR上で実行されているとします。 |
|
135 .PP |
|
136 ホスト\fInameserverhost\fR上で\fItnameserv\fRを起動します。 |
|
137 .sp |
|
138 .if n \{\ |
|
139 .RS 4 |
|
140 .\} |
|
141 .nf |
|
142 tnameserv \-ORBInitialPort 1050 |
|
143 .fi |
|
144 .if n \{\ |
|
145 .RE |
|
146 .\} |
|
147 .PP |
|
148 \fIserverhost\fR上でサーバーを起動します。 |
|
149 .sp |
|
150 .if n \{\ |
|
151 .RS 4 |
|
152 .\} |
|
153 .nf |
|
154 java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost |
|
155 .fi |
|
156 .if n \{\ |
|
157 .RE |
|
158 .\} |
|
159 .PP |
23 |
160 |
24 .LP |
161 \fIclienthost\fR上でクライアントを起動します。 |
25 .SH "名前" |
162 .sp |
26 Java IDL: 一時ネームサービス \- \f2tnameserv\fP |
163 .if n \{\ |
27 .LP |
164 .RS 4 |
28 .LP |
165 .\} |
29 このドキュメントでは、Java IDL 一時ネームサービス \f2tnameserv\fP の使用方法について説明します。Java IDL には、Object Request Broker Daemon (ORBD) も含まれています。ORBD は、ブートストラップサービス、一時ネームサービス、\f3持続\fPネームサービス、およびサーバーマネージャーを含むデーモンプロセスです。Java IDL のすべてのチュートリアルでは ORBD を使用していますが、一時ネームサービスを使用する例では、\f2orbd\fP の代わりに \f2tnameserv\fP を使用できます。\f2orbd\fP ツールの詳細については、orbd の orbd(1)または |
166 .nf |
30 .na |
167 java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost |
31 \f2ORBD に含まれる Java IDL ネームサービス\fP @ |
168 .fi |
32 .fi |
169 .if n \{\ |
33 http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlに関するトピックを参照してください。 |
170 .RE |
34 .LP |
171 .\} |
35 .LP |
172 .SS "ネーミング・サービスの停止" |
36 ここでは、以下の項目について説明します。 |
173 .PP |
37 .LP |
174 Java IDLネーミング・サービスを停止するには、Unixの場合は、\fIkill\fRなどのオペレーティング・システムのコマンドを使用し、Windowsの場合は、\fI[Ctrl]+[C]\fRキーを使用します。ネーミング・サービスを明示的に停止するまでは、呼出し待機状態が続きます。サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。 |
38 .RS 3 |
175 .SH "オプション" |
39 .TP 2 |
176 .PP |
40 o |
177 \-J\fIoption\fR |
41 Java\ IDL 一時ネームサービス |
178 .RS 4 |
42 .TP 2 |
179 Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 |
43 o |
180 .RE |
44 Java\ IDL 一時ネームサービスの起動 |
181 .SH "例" |
45 .TP 2 |
182 .SS "ネームスペースへのオブジェクトの追加" |
46 o |
183 .PP |
47 Java\ IDL 一時ネームサービスの停止 |
184 次の例では、ネームスペースに名前を追加する方法を示します。このサンプル・プログラムは、このままの状態で完全に動作する一時ネーム・サービス・クライアントで、次のような単純なツリーを作成するものです。 |
48 .TP 2 |
185 .sp |
49 o |
186 .if n \{\ |
50 サンプルクライアント: 名前空間へのオブジェクトの追加 |
187 .RS 4 |
51 .TP 2 |
188 .\} |
52 o |
189 .nf |
53 サンプルクライアント: 名前空間のブラウズ |
190 Initial Naming Context |
54 .RE |
191 plans |
|
192 Personal |
|
193 calendar |
|
194 schedule |
|
195 .fi |
|
196 .if n \{\ |
|
197 .RE |
|
198 .\} |
|
199 .PP |
|
200 この例で、\fIplans\fRはオブジェクト参照、\fIPersonal\fRは\fIcalendar\fRと\fIschedule\fRの2つのオブジェクト参照を含むネーミング・コンテキストです。 |
|
201 .sp |
|
202 .if n \{\ |
|
203 .RS 4 |
|
204 .\} |
|
205 .nf |
|
206 import java\&.util\&.Properties; |
|
207 import org\&.omg\&.CORBA\&.*; |
|
208 import org\&.omg\&.CosNaming\&.*; |
|
209 |
|
210 public class NameClient { |
55 |
211 |
56 .LP |
212 public static void main(String args[]) { |
57 .SH "Java IDL 一時ネームサービス" |
|
58 .LP |
|
59 .LP |
|
60 CORBA の COS (Common Object Services) ネームサービスは、ファイルシステムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDL の一時ネームサービスである \f2tnameserv\fP は、COS ネームサービスの仕様を単純な形で実装したものです。 |
|
61 .LP |
|
62 .LP |
|
63 オブジェクト参照は名前空間に名前で格納され、オブジェクト参照と名前のペアは、それぞれ「ネームバインディング」と呼ばれます。ネームバインディングは「ネーミングコンテキスト」に組み込むことができます。ネーミングコンテキストはそれ自体がネームバインディングであり、ファイルシステムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは「初期ネーミングコンテキスト」に格納されます。名前空間において、初期ネーミングコンテキストは唯一の持続的バインディングです。それ以外のネーミングコンテキストは、Java IDL のネーミングサービスプロセスが停止し、再起動されると失われます。 |
|
64 .LP |
|
65 .LP |
|
66 アプレットまたはアプリケーションから COS ネームサービスを使用するためには、その ORB はネームサービスが動作しているホストのポートを知っているか、そのネームサービスの文字列化された初期ネーミングコンテキストにアクセスできなければなりません。ネームサービスは、Java IDL のネームサービスでもその他の COS 準拠のネームサービスでもかまいません。 |
|
67 .LP |
|
68 .SH "Java IDL 一時ネームサービスの起動" |
|
69 .LP |
|
70 .LP |
|
71 Java IDL ネームサービスは、ネームサービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java\ IDL 製品をインストールすると、Java\ IDL ネームサービスを起動するスクリプト (Solaris: \f2tnameserv\fP) または実行可能ファイル (Windows NT: \f2tnameserv.exe\fP) が作成されます。バックグラウンドで動作するように、ネームサービスを起動してください。 |
|
72 .LP |
|
73 .LP |
|
74 特に指定しない場合、Java IDL ネームサービスは、ORB の \f2resolve_initial_references()\fP メソッドと \f2list_initial_references()\fP メソッドの実装に使用するブートストラッププロトコルに対してポート 900 で待機します。 |
|
75 .LP |
|
76 .nf |
|
77 \f3 |
|
78 .fl |
|
79 tnameserv \-ORBInitialPort \fP\f4nameserverport\fP\f3& |
|
80 .fl |
|
81 \fP |
|
82 .fi |
|
83 |
213 |
84 .LP |
214 try { |
85 .LP |
215 .fi |
86 ネームサーバーポートを指定しない場合、デフォルトでポート 900 が使用されます。Solaris ソフトウェアの実行時は、1024 より小さいポートでプロセスを開始する場合、root ユーザーになる必要があります。このため、1024 または 1024 よりも大きいポート番号を使用することをお勧めします。1050 のように別のポートを指定し、ネームサービスをバックグラウンドで実行するには、UNIX コマンドシェルで次のように入力します。 |
216 .if n \{\ |
87 .LP |
217 .RE |
88 .nf |
218 .\} |
89 \f3 |
219 .PP |
90 .fl |
220 ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 |
91 tnameserv \-ORBInitialPort 1050& |
221 .sp |
92 .fl |
222 .if n \{\ |
93 \fP |
223 .RS 4 |
94 .fi |
224 .\} |
|
225 .nf |
|
226 Properties props = new Properties(); |
|
227 props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); |
|
228 ORB orb = ORB\&.init(args, props); |
|
229 .fi |
|
230 .if n \{\ |
|
231 .RE |
|
232 .\} |
|
233 .PP |
|
234 次のコードでは、初期ネーミング・コンテキストを取得し、それを\fIctx\fRに代入します。2行目では、\fIctx\fRをダミーのオブジェクト参照\fIobjref\fRにコピーします。このobjrefには、あとで様々な名前を割り当ててネームスペースに追加します。 |
|
235 .sp |
|
236 .if n \{\ |
|
237 .RS 4 |
|
238 .\} |
|
239 .nf |
|
240 NamingContext ctx = |
|
241 NamingContextHelper\&.narrow( |
|
242 orb\&.resolve_initial_references("NameService")); |
|
243 NamingContext objref = ctx; |
|
244 .fi |
|
245 .if n \{\ |
|
246 .RE |
|
247 .\} |
|
248 .PP |
|
249 次のコードでは、\fItext\fRタイプの名前\fIplans\fRを作成し、それをダミーのオブジェクト参照にバインドします。その後、\fIrebind\fRメソッドを使用して初期ネーミング・コンテキストの下に\fIplans\fRを追加しています。\fIrebind\fRメソッドを使用すれば、\fIbind\fRメソッドを使用した場合に発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。 |
|
250 .sp |
|
251 .if n \{\ |
|
252 .RS 4 |
|
253 .\} |
|
254 .nf |
|
255 NameComponent nc1 = new NameComponent("plans", "text"); |
|
256 NameComponent[] name1 = {nc1}; |
|
257 ctx\&.rebind(name1, objref); |
|
258 System\&.out\&.println("plans rebind successful!"); |
|
259 .fi |
|
260 .if n \{\ |
|
261 .RE |
|
262 .\} |
|
263 .PP |
|
264 次のコードでは、\fIdirectory\fRタイプの\fIPersonal\fRというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照\fIctx2\fRを\fIname\fRにバインドし、初期ネーミング・コンテキストに追加します。 |
|
265 .sp |
|
266 .if n \{\ |
|
267 .RS 4 |
|
268 .\} |
|
269 .nf |
|
270 NameComponent nc2 = new NameComponent("Personal", "directory"); |
|
271 NameComponent[] name2 = {nc2}; |
|
272 NamingContext ctx2 = ctx\&.bind_new_context(name2); |
|
273 System\&.out\&.println("new naming context added\&.\&."); |
|
274 .fi |
|
275 .if n \{\ |
|
276 .RE |
|
277 .\} |
|
278 .PP |
|
279 残りのコードでは、ダミーのオブジェクト参照を\fIschedule\fRと\fIcalendar\fRという名前でネーミング・コンテキスト\fIPersonal\fR(\fIctx2\fR)にバインドします。 |
|
280 .sp |
|
281 .if n \{\ |
|
282 .RS 4 |
|
283 .\} |
|
284 .nf |
|
285 NameComponent nc3 = new NameComponent("schedule", "text"); |
|
286 NameComponent[] name3 = {nc3}; |
|
287 ctx2\&.rebind(name3, objref); |
|
288 System\&.out\&.println("schedule rebind successful!"); |
|
289 |
|
290 NameComponent nc4 = new NameComponent("calender", "text"); |
|
291 NameComponent[] name4 = {nc4}; |
|
292 ctx2\&.rebind(name4, objref); |
|
293 System\&.out\&.println("calender rebind successful!"); |
|
294 } catch (Exception e) { |
|
295 e\&.printStackTrace(System\&.err); |
|
296 } |
|
297 } |
|
298 } |
|
299 .fi |
|
300 .if n \{\ |
|
301 .RE |
|
302 .\} |
|
303 .SS "ネームスペースの参照" |
|
304 .PP |
|
305 次のサンプル・プログラムでは、ネームスペースをブラウズする方法を示します。 |
|
306 .sp |
|
307 .if n \{\ |
|
308 .RS 4 |
|
309 .\} |
|
310 .nf |
|
311 import java\&.util\&.Properties; |
|
312 import org\&.omg\&.CORBA\&.*; |
|
313 import org\&.omg\&.CosNaming\&.*; |
|
314 |
|
315 public class NameClientList { |
95 |
316 |
96 .LP |
317 public static void main(String args[]) { |
97 .LP |
|
98 Windows の MS\-DOS システムプロンプトでは、次のように入力します。 |
|
99 .LP |
|
100 .nf |
|
101 \f3 |
|
102 .fl |
|
103 start tnameserv \-ORBInitialPort 1050 |
|
104 .fl |
|
105 \fP |
|
106 .fi |
|
107 |
318 |
108 .LP |
319 try { |
109 .LP |
320 .fi |
110 ネームサーバーのクライアントには、新しいポート番号を知らせる必要があります。このため、ORB オブジェクトの作成時に \f2org.omg.CORBA.ORBInitialPort\fP プロパティーに新しいポート番号を設定します。 |
321 .if n \{\ |
111 .LP |
322 .RE |
112 .SS |
323 .\} |
113 異なるマシン上でのクライアントとサーバーの実行 |
324 .PP |
114 .LP |
325 ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 |
115 .LP |
326 .sp |
116 Java IDL と RMI\-IIOP のほとんどのチュートリアルでは、ネームサービス、サーバー、およびクライアントはすべて開発用のマシン上で実行されます。実際に配備する場合には、クライアントとサーバーを、ネームサービスとは異なるホスト上で実行することが多くなります。 |
327 .if n \{\ |
117 .LP |
328 .RS 4 |
118 .LP |
329 .\} |
119 クライアントとサーバーがネームサービスを見つけるには、クライアントとサーバーが、ネームサービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の \f2org.omg.CORBA.ORBInitialPort\fP プロパティーと \f2org.omg.CORBA.ORBInitialHost\fP プロパティーをネームサービスが実行されているポートの番号とマシンの名前に設定します。この例は、 |
330 .nf |
120 .na |
331 Properties props = new Properties(); |
121 \f2「RMI\-IIOP を使った Hello World の例」に示されています。\fP @ |
332 props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); |
122 .fi |
333 ORB orb = ORB\&.init(args, props); |
123 http://java.sun.com/javase/6/docs/technotes/guides/rmi\-iiop/rmiiiopexample.htmlコマンド行オプション \f2\-ORBInitialPort\fP \f2nameserverport#\fP と \f2\-ORBInitialHost\fP \f2nameserverhostname\fP を使用して、クライアントとサーバーに対してネームサービスを探す場所を指定することもできます。 |
334 .fi |
124 .na |
335 .if n \{\ |
125 \f2「Java IDL: 2 台のマシン上で実行する Hello World プログラム」\fP @ |
336 .RE |
126 .fi |
337 .\} |
127 http://java.sun.com/javase/6/docs/technotes/guides/idl/tutorial/jidl2machines.html には、コマンド行オプションを使用して指定する方法が示されています。 |
338 .PP |
128 .LP |
339 次のコードでは、初期ネーミング・コンテキストを取得しています。 |
129 .LP |
340 .sp |
130 たとえば、一時ネームサービス \f2tnameserv\fP が、ホスト \f2nameserverhost\fP のポート 1050 上で実行されているとします。さらに、クライアントがホスト \f2clienthost\fP 上で実行され、サーバーはホスト \f2serverhost\fP 上で実行されているとします。 |
341 .if n \{\ |
131 .LP |
342 .RS 4 |
132 .RS 3 |
343 .\} |
133 .TP 2 |
344 .nf |
134 o |
345 NamingContext nc = |
135 次のように、ホスト \f2nameserverhost\fP 上で \f2tnameserv\fP を起動します。 |
346 NamingContextHelper\&.narrow( |
136 .nf |
347 orb\&.resolve_initial_references("NameService")); |
137 \f3 |
348 .fi |
138 .fl |
349 .if n \{\ |
139 tnameserv \-ORBInitialPort 1050 |
350 .RE |
140 .fl |
351 .\} |
141 |
352 .PP |
142 .fl |
353 \fIlist\fRメソッドは、ネーミング・コンテキストのバインディングをリストします。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストから\fIBindingListHolder\fRに返されます。残りのバインディングは、\fIBindingIteratorHolder\fRに返されます。 |
143 \fP |
354 .sp |
144 .fi |
355 .if n \{\ |
145 .TP 2 |
356 .RS 4 |
146 o |
357 .\} |
147 \f2serverhost\fP 上でサーバーを起動します。 |
358 .nf |
148 .nf |
359 BindingListHolder bl = new BindingListHolder(); |
149 \f3 |
360 BindingIteratorHolder blIt= new BindingIteratorHolder(); |
150 .fl |
361 nc\&.list(1000, bl, blIt); |
151 java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost |
362 .fi |
152 .fl |
363 .if n \{\ |
153 \fP |
364 .RE |
154 .fi |
365 .\} |
155 .TP 2 |
366 .PP |
156 o |
367 次のコードでは、返された\fIBindingListHolder\fRからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。 |
157 \f2clienthost\fP 上でクライアントを起動します。 |
368 .sp |
158 .nf |
369 .if n \{\ |
159 \f3 |
370 .RS 4 |
160 .fl |
371 .\} |
161 java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost |
372 .nf |
162 .fl |
373 Binding bindings[] = bl\&.value; |
163 \fP |
374 if (bindings\&.length == 0) return; |
164 .fi |
375 .fi |
165 .RE |
376 .if n \{\ |
166 |
377 .RE |
167 .LP |
378 .\} |
168 .SS |
379 .PP |
169 \-J オプション |
380 残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 |
170 .LP |
381 .sp |
171 このコマンド行オプションは、\f2tnameserve\fP とともに使用できます。 |
382 .if n \{\ |
172 .RS 3 |
383 .RS 4 |
173 .TP 3 |
384 .\} |
174 \-Joption |
385 .nf |
175 Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 |
386 for (int i=0; i < bindings\&.length; i++) { |
176 .RE |
387 |
177 |
388 // get the object reference for each binding |
178 .LP |
389 org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name); |
179 .SH "Java IDL 一時ネームサービスの停止" |
390 String objStr = orb\&.object_to_string(obj); |
180 .LP |
391 int lastIx = bindings[i]\&.binding_name\&.length\-1; |
181 .LP |
392 |
182 Java IDL ネームサービスを停止するには、Unix の場合は、\f2kill\fP などのオペレーティングシステムのコマンドを使い、Windows の場合は、\f2Ctrl\-C\fP を使います。ネームサービスを明示的に停止するまでは、呼び出し待機状態が続きます。なお、サービスを終了させると、Java IDL ネームサービスに登録されている名前は失われます。 |
393 // check to see if this is a naming context |
183 .LP |
394 if (bindings[i]\&.binding_type == BindingType\&.ncontext) { |
184 .SH "サンプルクライアント: 名前空間へのオブジェクトの追加" |
395 System\&.out\&.println("Context: " + |
185 .LP |
396 bindings[i]\&.binding_name[lastIx]\&.id); |
186 .LP |
397 } else { |
187 次に示すサンプルプログラムは、名前を名前空間に追加する方法を示すものです。このサンプルプログラムは、このままの状態で完全に動作する一時ネームサービスクライアントで、次のような単純なツリーを作成するものです。 |
398 System\&.out\&.println("Object: " + |
188 .LP |
399 bindings[i]\&.binding_name[lastIx]\&.id); |
189 .nf |
400 } |
190 \f3 |
401 } |
191 .fl |
402 } catch (Exception e) { |
192 \fP\f3 |
403 e\&.printStackTrace(System\&.err) |
193 .fl |
404 } |
194 \fP\f4初期\fP\f3 |
|
195 .fl |
|
196 \fP\f4ネーミングコンテキスト\fP\f3 |
|
197 .fl |
|
198 / \\ |
|
199 .fl |
|
200 / \\ |
|
201 .fl |
|
202 plans \fP\f4Personal\fP\f3 |
|
203 .fl |
|
204 / \\ |
|
205 .fl |
|
206 / \\ |
|
207 .fl |
|
208 calendar schedule\fP |
|
209 .fl |
|
210 .fi |
|
211 |
|
212 .LP |
|
213 .LP |
|
214 この例で、\f3plans\fP はオブジェクト参照、\f3Personal\fP は \f3calendar\fP と \f3schedule\fP の 2 つのオブジェクト参照を含むネーミングコンテキストです。 |
|
215 .LP |
|
216 .nf |
|
217 \f3 |
|
218 .fl |
|
219 import java.util.Properties; |
|
220 .fl |
|
221 import org.omg.CORBA.*; |
|
222 .fl |
|
223 import org.omg.CosNaming.*; |
|
224 .fl |
|
225 |
|
226 .fl |
|
227 public class NameClient |
|
228 .fl |
|
229 { |
|
230 .fl |
|
231 public static void main(String args[]) |
|
232 .fl |
|
233 { |
|
234 .fl |
|
235 try { |
|
236 .fl |
|
237 \fP |
|
238 .fi |
|
239 |
|
240 .LP |
|
241 前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 |
|
242 .nf |
|
243 \f3 |
|
244 .fl |
|
245 Properties props = new Properties(); |
|
246 .fl |
|
247 props.put("org.omg.CORBA.ORBInitialPort", "1050"); |
|
248 .fl |
|
249 ORB orb = ORB.init(args, props); |
|
250 .fl |
|
251 |
|
252 .fl |
|
253 \fP |
|
254 .fi |
|
255 |
|
256 .LP |
|
257 次のコードでは、初期ネーミングコンテキストを取得し、それを \f3ctx\fP に代入します。2 行目では、\f3ctx\fP をダミーのオブジェクト参照 \f3objref\fP にコピーします。この objref には、あとでさまざまな名前を割り当てて名前空間に追加します。 |
|
258 .nf |
|
259 \f3 |
|
260 .fl |
|
261 NamingContext ctx = |
|
262 .fl |
|
263 NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); |
|
264 .fl |
|
265 NamingContext objref = ctx; |
|
266 .fl |
|
267 |
|
268 .fl |
|
269 \fP |
|
270 .fi |
|
271 |
|
272 .LP |
|
273 次のコードでは、text 型の名前 plans を作成し、それをダミーのオブジェクト参照にバインドします。その後、rebind を使用して初期ネーミングコンテキストの下に \f2plans を追加しています\fP。 \f2rebind\fP メソッドを使用すれば、bind を使用した場合に発生する例外を発生させずに、 \f2このプログラムを何度も繰り返し実行できます\fP。 |
|
274 .nf |
|
275 \f3 |
|
276 .fl |
|
277 NameComponent nc1 = new NameComponent("plans", "text"); |
|
278 .fl |
|
279 NameComponent[] name1 = {nc1}; |
|
280 .fl |
|
281 ctx.rebind(name1, objref); |
|
282 .fl |
|
283 System.out.println("plans rebind sucessful!"); |
|
284 .fl |
|
285 |
|
286 .fl |
|
287 \fP |
|
288 .fi |
|
289 |
|
290 .LP |
|
291 次のコードでは、directory 型の Personal というネーミングコンテキストを作成します。その結果得られるオブジェクト参照 \f3ctx2\fP をこの名前にバインドし、初期ネーミングコンテキストに追加します。 |
|
292 .nf |
|
293 \f3 |
|
294 .fl |
|
295 NameComponent nc2 = new NameComponent("Personal", "directory"); |
|
296 .fl |
|
297 NameComponent[] name2 = {nc2}; |
|
298 .fl |
|
299 NamingContext ctx2 = ctx.bind_new_context(name2); |
|
300 .fl |
|
301 System.out.println("new naming context added.."); |
|
302 .fl |
|
303 |
|
304 .fl |
|
305 \fP |
|
306 .fi |
|
307 |
|
308 .LP |
|
309 残りのコードでは、ダミーのオブジェクト参照を schedule と calendar という名前でネーミングコンテキスト "Personal" (\f3ctx2\fP) にバインドします。 |
|
310 .nf |
|
311 \f3 |
|
312 .fl |
|
313 NameComponent nc3 = new NameComponent("schedule", "text"); |
|
314 .fl |
|
315 NameComponent[] name3 = {nc3}; |
|
316 .fl |
|
317 ctx2.rebind(name3, objref); |
|
318 .fl |
|
319 System.out.println("schedule rebind sucessful!"); |
|
320 .fl |
|
321 |
|
322 .fl |
|
323 NameComponent nc4 = new NameComponent("calender", "text"); |
|
324 .fl |
|
325 NameComponent[] name4 = {nc4}; |
|
326 .fl |
|
327 ctx2.rebind(name4, objref); |
|
328 .fl |
|
329 System.out.println("calender rebind sucessful!"); |
|
330 .fl |
|
331 |
|
332 .fl |
|
333 |
|
334 .fl |
|
335 } catch (Exception e) { |
|
336 .fl |
|
337 e.printStackTrace(System.err); |
|
338 .fl |
|
339 } |
405 } |
340 .fl |
|
341 } |
|
342 .fl |
|
343 } |
406 } |
344 .fl |
407 .fi |
345 \fP |
408 .if n \{\ |
346 .fi |
409 .RE |
347 |
410 .\} |
348 .LP |
411 .SH "関連項目" |
349 .SH "サンプルクライアント: 名前空間のブラウズ" |
412 .sp |
350 .LP |
413 .RS 4 |
351 .LP |
414 .ie n \{\ |
352 次のサンプルプログラムでは、名前空間をブラウズする方法を示します。 |
415 \h'-04'\(bu\h'+03'\c |
353 .LP |
416 .\} |
354 .nf |
417 .el \{\ |
355 \f3 |
418 .sp -1 |
356 .fl |
419 .IP \(bu 2.3 |
357 import java.util.Properties; |
420 .\} |
358 .fl |
421 orbd(1) |
359 import org.omg.CORBA.*; |
422 .RE |
360 .fl |
423 .br |
361 import org.omg.CosNaming.*; |
424 'pl 8.5i |
362 .fl |
425 'bp |
363 |
|
364 .fl |
|
365 public class NameClientList |
|
366 .fl |
|
367 { |
|
368 .fl |
|
369 public static void main(String args[]) |
|
370 .fl |
|
371 { |
|
372 .fl |
|
373 try { |
|
374 .fl |
|
375 \fP |
|
376 .fi |
|
377 |
|
378 .LP |
|
379 前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 |
|
380 .nf |
|
381 \f3 |
|
382 .fl |
|
383 |
|
384 .fl |
|
385 Properties props = new Properties(); |
|
386 .fl |
|
387 props.put("org.omg.CORBA.ORBInitialPort", "1050"); |
|
388 .fl |
|
389 ORB orb = ORB.init(args, props); |
|
390 .fl |
|
391 |
|
392 .fl |
|
393 |
|
394 .fl |
|
395 \fP |
|
396 .fi |
|
397 |
|
398 .LP |
|
399 次のコードでは、初期ネーミングコンテキストを取得しています。 |
|
400 .nf |
|
401 \f3 |
|
402 .fl |
|
403 NamingContext nc = |
|
404 .fl |
|
405 NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); |
|
406 .fl |
|
407 |
|
408 .fl |
|
409 \fP |
|
410 .fi |
|
411 |
|
412 .LP |
|
413 \f2list\fP メソッドは、ネーミングコンテキストに追加されているバインディングをリストします。この場合、最大 1000 個までのバインディングが初期ネーミングコンテキストから BindingListHolder に返されます。残りのバインディングは、BindingIteratorHolder に返されます。 |
|
414 .nf |
|
415 \f3 |
|
416 .fl |
|
417 BindingListHolder bl = new BindingListHolder(); |
|
418 .fl |
|
419 BindingIteratorHolder blIt= new BindingIteratorHolder(); |
|
420 .fl |
|
421 nc.list(1000, bl, blIt); |
|
422 .fl |
|
423 |
|
424 .fl |
|
425 \fP |
|
426 .fi |
|
427 |
|
428 .LP |
|
429 次のコードでは、返された BindingListHolder からバインディングの配列を取得します。バインディングがない場合は、プログラムは終了します。 |
|
430 .nf |
|
431 \f3 |
|
432 .fl |
|
433 Binding bindings[] = bl.value; |
|
434 .fl |
|
435 if (bindings.length == 0) return; |
|
436 .fl |
|
437 |
|
438 .fl |
|
439 \fP |
|
440 .fi |
|
441 |
|
442 .LP |
|
443 残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 |
|
444 .nf |
|
445 \f3 |
|
446 .fl |
|
447 for (int i=0; i < bindings.length; i++) { |
|
448 .fl |
|
449 |
|
450 .fl |
|
451 // get the object reference for each binding |
|
452 .fl |
|
453 org.omg.CORBA.Object obj = nc.resolve(bindings[i].binding_name); |
|
454 .fl |
|
455 String objStr = orb.object_to_string(obj); |
|
456 .fl |
|
457 int lastIx = bindings[i].binding_name.length\-1; |
|
458 .fl |
|
459 |
|
460 .fl |
|
461 // check to see if this is a naming context |
|
462 .fl |
|
463 if (bindings[i].binding_type == BindingType.ncontext) { |
|
464 .fl |
|
465 System.out.println( "Context: " + |
|
466 .fl |
|
467 bindings[i].binding_name[lastIx].id); |
|
468 .fl |
|
469 } else { |
|
470 .fl |
|
471 System.out.println("Object: " + |
|
472 .fl |
|
473 bindings[i].binding_name[lastIx].id); |
|
474 .fl |
|
475 } |
|
476 .fl |
|
477 } |
|
478 .fl |
|
479 |
|
480 .fl |
|
481 } catch (Exception e) { |
|
482 .fl |
|
483 e.printStackTrace(System.err); |
|
484 .fl |
|
485 } |
|
486 .fl |
|
487 } |
|
488 .fl |
|
489 } |
|
490 .fl |
|
491 \fP |
|
492 .fi |
|
493 |
|
494 .LP |
|
495 |
|