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