src/linux/doc/man/ja/tnameserv.1

Print this page

        

*** 1,495 **** ! ." Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. ! ." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ! ." ! ." This code is free software; you can redistribute it and/or modify it ! ." under the terms of the GNU General Public License version 2 only, as ! ." published by the Free Software Foundation. ! ." ! ." This code is distributed in the hope that it will be useful, but WITHOUT ! ." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ! ." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! ." version 2 for more details (a copy is included in the LICENSE file that ! ." accompanied this code). ! ." ! ." You should have received a copy of the GNU General Public License version ! ." 2 along with this work; if not, write to the Free Software Foundation, ! ." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ! ." ! ." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ! ." or visit www.oracle.com if you need additional information or have any ! ." questions. ! ." ! .TH tnameserv 1 "07 May 2011" ! ! .LP ! .SH "名前" ! Java IDL: 一時ネームサービス \- \f2tnameserv\fP ! .LP ! .LP ! このドキュメントでは、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)または ! .na ! \f2ORBD に含まれる Java IDL ネームサービス\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/idl/jidlNaming.htmlに関するトピックを参照してください。 ! .LP ! .LP ! ここでは、以下の項目について説明します。 ! .LP ! .RS 3 ! .TP 2 ! o ! Java\ IDL 一時ネームサービス ! .TP 2 ! o ! Java\ IDL 一時ネームサービスの起動 ! .TP 2 ! o ! Java\ IDL 一時ネームサービスの停止 ! .TP 2 ! o ! サンプルクライアント: 名前空間へのオブジェクトの追加 ! .TP 2 ! o ! サンプルクライアント: 名前空間のブラウズ .RE ! ! .LP ! .SH "Java IDL 一時ネームサービス" ! .LP ! .LP ! CORBA の COS (Common Object Services) ネームサービスは、ファイルシステムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDL の一時ネームサービスである \f2tnameserv\fP は、COS ネームサービスの仕様を単純な形で実装したものです。 ! .LP ! .LP ! オブジェクト参照は名前空間に名前で格納され、オブジェクト参照と名前のペアは、それぞれ「ネームバインディング」と呼ばれます。ネームバインディングは「ネーミングコンテキスト」に組み込むことができます。ネーミングコンテキストはそれ自体がネームバインディングであり、ファイルシステムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは「初期ネーミングコンテキスト」に格納されます。名前空間において、初期ネーミングコンテキストは唯一の持続的バインディングです。それ以外のネーミングコンテキストは、Java IDL のネーミングサービスプロセスが停止し、再起動されると失われます。 ! .LP ! .LP ! アプレットまたはアプリケーションから COS ネームサービスを使用するためには、その ORB はネームサービスが動作しているホストのポートを知っているか、そのネームサービスの文字列化された初期ネーミングコンテキストにアクセスできなければなりません。ネームサービスは、Java IDL のネームサービスでもその他の COS 準拠のネームサービスでもかまいません。 ! .LP ! .SH "Java IDL 一時ネームサービスの起動" ! .LP ! .LP ! Java IDL ネームサービスは、ネームサービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java\ IDL 製品をインストールすると、Java\ IDL ネームサービスを起動するスクリプト (Solaris: \f2tnameserv\fP) または実行可能ファイル (Windows NT: \f2tnameserv.exe\fP) が作成されます。バックグラウンドで動作するように、ネームサービスを起動してください。 ! .LP ! .LP ! 特に指定しない場合、Java IDL ネームサービスは、ORB の \f2resolve_initial_references()\fP メソッドと \f2list_initial_references()\fP メソッドの実装に使用するブートストラッププロトコルに対してポート 900 で待機します。 ! .LP ! .nf ! \f3 ! .fl ! tnameserv \-ORBInitialPort \fP\f4nameserverport\fP\f3& ! .fl ! \fP .fi ! ! .LP ! .LP ! ネームサーバーポートを指定しない場合、デフォルトでポート 900 が使用されます。Solaris ソフトウェアの実行時は、1024 より小さいポートでプロセスを開始する場合、root ユーザーになる必要があります。このため、1024 または 1024 よりも大きいポート番号を使用することをお勧めします。1050 のように別のポートを指定し、ネームサービスをバックグラウンドで実行するには、UNIX コマンドシェルで次のように入力します。 ! .LP ! .nf ! \f3 ! .fl ! tnameserv \-ORBInitialPort 1050& ! .fl ! \fP .fi ! ! .LP ! .LP ! Windows の MS\-DOS システムプロンプトでは、次のように入力します。 ! .LP ! .nf ! \f3 ! .fl ! start tnameserv \-ORBInitialPort 1050 ! .fl ! \fP .fi ! ! .LP ! .LP ! ネームサーバーのクライアントには、新しいポート番号を知らせる必要があります。このため、ORB オブジェクトの作成時に \f2org.omg.CORBA.ORBInitialPort\fP プロパティーに新しいポート番号を設定します。 ! .LP ! .SS ! 異なるマシン上でのクライアントとサーバーの実行 ! .LP ! .LP ! Java IDL と RMI\-IIOP のほとんどのチュートリアルでは、ネームサービス、サーバー、およびクライアントはすべて開発用のマシン上で実行されます。実際に配備する場合には、クライアントとサーバーを、ネームサービスとは異なるホスト上で実行することが多くなります。 ! .LP ! .LP ! クライアントとサーバーがネームサービスを見つけるには、クライアントとサーバーが、ネームサービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の \f2org.omg.CORBA.ORBInitialPort\fP プロパティーと \f2org.omg.CORBA.ORBInitialHost\fP プロパティーをネームサービスが実行されているポートの番号とマシンの名前に設定します。この例は、 ! .na ! \f2「RMI\-IIOP を使った Hello World の例」に示されています。\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/rmi\-iiop/rmiiiopexample.htmlコマンド行オプション \f2\-ORBInitialPort\fP \f2nameserverport#\fP と \f2\-ORBInitialHost\fP \f2nameserverhostname\fP を使用して、クライアントとサーバーに対してネームサービスを探す場所を指定することもできます。 ! .na ! \f2「Java IDL: 2 台のマシン上で実行する Hello World プログラム」\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/idl/tutorial/jidl2machines.html には、コマンド行オプションを使用して指定する方法が示されています。 ! .LP ! .LP ! たとえば、一時ネームサービス \f2tnameserv\fP が、ホスト \f2nameserverhost\fP のポート 1050 上で実行されているとします。さらに、クライアントがホスト \f2clienthost\fP 上で実行され、サーバーはホスト \f2serverhost\fP 上で実行されているとします。 ! .LP ! .RS 3 ! .TP 2 ! o ! 次のように、ホスト \f2nameserverhost\fP 上で \f2tnameserv\fP を起動します。 ! .nf ! \f3 ! .fl ! tnameserv \-ORBInitialPort 1050 ! .fl ! ! .fl ! \fP .fi ! .TP 2 ! o ! \f2serverhost\fP 上でサーバーを起動します。 ! .nf ! \f3 ! .fl ! java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost ! .fl ! \fP ! .fi ! .TP 2 ! o ! \f2clienthost\fP 上でクライアントを起動します。 ! .nf ! \f3 ! .fl ! java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost ! .fl ! \fP .fi .RE ! .LP ! .SS ! \-J オプション ! .LP ! このコマンド行オプションは、\f2tnameserve\fP とともに使用できます。 ! .RS 3 ! .TP 3 ! \-Joption ! Java 仮想マシンに \f2option\fP を渡します。\f2option\fP には、java(1)のリファレンスページに記載されているオプションを 1 つ指定します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って背後の実行環境にオプションを渡すことはよく行われています。 .RE ! ! .LP ! .SH "Java IDL 一時ネームサービスの停止" ! .LP ! .LP ! Java IDL ネームサービスを停止するには、Unix の場合は、\f2kill\fP などのオペレーティングシステムのコマンドを使い、Windows の場合は、\f2Ctrl\-C\fP を使います。ネームサービスを明示的に停止するまでは、呼び出し待機状態が続きます。なお、サービスを終了させると、Java IDL ネームサービスに登録されている名前は失われます。 ! .LP ! .SH "サンプルクライアント: 名前空間へのオブジェクトの追加" ! .LP ! .LP ! 次に示すサンプルプログラムは、名前を名前空間に追加する方法を示すものです。このサンプルプログラムは、このままの状態で完全に動作する一時ネームサービスクライアントで、次のような単純なツリーを作成するものです。 ! .LP ! .nf ! \f3 ! .fl ! \fP\f3 ! .fl ! \fP\f4初期\fP\f3 ! .fl ! \fP\f4ネーミングコンテキスト\fP\f3 ! .fl ! / \\ ! .fl ! / \\ ! .fl ! plans \fP\f4Personal\fP\f3 ! .fl ! / \\ ! .fl ! / \\ ! .fl ! calendar schedule\fP ! .fl .fi ! .LP ! .LP ! この例で、\f3plans\fP はオブジェクト参照、\f3Personal\fP は \f3calendar\fP と \f3schedule\fP の 2 つのオブジェクト参照を含むネーミングコンテキストです。 ! .LP ! .nf ! \f3 ! .fl ! import java.util.Properties; ! .fl ! import org.omg.CORBA.*; ! .fl ! import org.omg.CosNaming.*; ! .fl - .fl - public class NameClient - .fl - { - .fl - public static void main(String args[]) - .fl - { - .fl try { - .fl - \fP .fi ! ! .LP ! 前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 .nf - \f3 - .fl Properties props = new Properties(); ! .fl ! props.put("org.omg.CORBA.ORBInitialPort", "1050"); ! .fl ! ORB orb = ORB.init(args, props); ! .fl ! ! .fl ! \fP .fi ! ! .LP ! 次のコードでは、初期ネーミングコンテキストを取得し、それを \f3ctx\fP に代入します。2 行目では、\f3ctx\fP をダミーのオブジェクト参照 \f3objref\fP にコピーします。この objref には、あとでさまざまな名前を割り当てて名前空間に追加します。 .nf - \f3 - .fl NamingContext ctx = ! .fl ! NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); ! .fl NamingContext objref = ctx; - .fl - - .fl - \fP .fi ! ! .LP ! 次のコードでは、text 型の名前 plans を作成し、それをダミーのオブジェクト参照にバインドします。その後、rebind を使用して初期ネーミングコンテキストの下に \f2plans を追加しています\fP。 \f2rebind\fP メソッドを使用すれば、bind を使用した場合に発生する例外を発生させずに、 \f2このプログラムを何度も繰り返し実行できます\fP。 .nf - \f3 - .fl NameComponent nc1 = new NameComponent("plans", "text"); - .fl NameComponent[] name1 = {nc1}; ! .fl ! ctx.rebind(name1, objref); ! .fl ! System.out.println("plans rebind sucessful!"); ! .fl ! ! .fl ! \fP .fi ! ! .LP ! 次のコードでは、directory 型の Personal というネーミングコンテキストを作成します。その結果得られるオブジェクト参照 \f3ctx2\fP をこの名前にバインドし、初期ネーミングコンテキストに追加します。 .nf - \f3 - .fl NameComponent nc2 = new NameComponent("Personal", "directory"); - .fl NameComponent[] name2 = {nc2}; ! .fl ! NamingContext ctx2 = ctx.bind_new_context(name2); ! .fl ! System.out.println("new naming context added.."); ! .fl ! ! .fl ! \fP .fi ! ! .LP ! 残りのコードでは、ダミーのオブジェクト参照を schedule と calendar という名前でネーミングコンテキスト "Personal" (\f3ctx2\fP) にバインドします。 .nf - \f3 - .fl NameComponent nc3 = new NameComponent("schedule", "text"); - .fl NameComponent[] name3 = {nc3}; ! .fl ! ctx2.rebind(name3, objref); ! .fl ! System.out.println("schedule rebind sucessful!"); ! .fl - .fl NameComponent nc4 = new NameComponent("calender", "text"); - .fl NameComponent[] name4 = {nc4}; ! .fl ! ctx2.rebind(name4, objref); ! .fl ! System.out.println("calender rebind sucessful!"); ! .fl ! ! .fl ! ! .fl } catch (Exception e) { ! .fl ! e.printStackTrace(System.err); ! .fl } - .fl } - .fl } - .fl - \fP .fi ! .LP ! .SH "サンプルクライアント: 名前空間のブラウズ" ! .LP ! .LP ! 次のサンプルプログラムでは、名前空間をブラウズする方法を示します。 ! .LP ! .nf ! \f3 ! .fl ! import java.util.Properties; ! .fl ! import org.omg.CORBA.*; ! .fl ! import org.omg.CosNaming.*; ! .fl - .fl - public class NameClientList - .fl - { - .fl - public static void main(String args[]) - .fl - { - .fl try { - .fl - \fP .fi ! ! .LP ! 前述の「Java IDL 一時ネームサービスの起動」で、ネームサーバーはポート 1050 を使用して起動しました。次のコードで、このポート番号をクライアントシステムに知らせます。 .nf - \f3 - .fl - - .fl Properties props = new Properties(); ! .fl ! props.put("org.omg.CORBA.ORBInitialPort", "1050"); ! .fl ! ORB orb = ORB.init(args, props); ! .fl ! ! .fl ! ! .fl ! \fP .fi ! ! .LP ! 次のコードでは、初期ネーミングコンテキストを取得しています。 .nf - \f3 - .fl NamingContext nc = ! .fl ! NamingContextHelper.narrow(orb.resolve_initial_references("NameService")); ! .fl ! ! .fl ! \fP .fi ! ! .LP ! \f2list\fP メソッドは、ネーミングコンテキストに追加されているバインディングをリストします。この場合、最大 1000 個までのバインディングが初期ネーミングコンテキストから BindingListHolder に返されます。残りのバインディングは、BindingIteratorHolder に返されます。 .nf - \f3 - .fl BindingListHolder bl = new BindingListHolder(); - .fl BindingIteratorHolder blIt= new BindingIteratorHolder(); ! .fl ! nc.list(1000, bl, blIt); ! .fl ! ! .fl ! \fP .fi ! ! .LP ! 次のコードでは、返された BindingListHolder からバインディングの配列を取得します。バインディングがない場合は、プログラムは終了します。 .nf ! \f3 ! .fl ! Binding bindings[] = bl.value; ! .fl ! if (bindings.length == 0) return; ! .fl ! ! .fl ! \fP .fi ! ! .LP 残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 .nf ! \f3 ! .fl ! for (int i=0; i < bindings.length; i++) { ! .fl - .fl // get the object reference for each binding ! .fl ! org.omg.CORBA.Object obj = nc.resolve(bindings[i].binding_name); ! .fl ! String objStr = orb.object_to_string(obj); ! .fl ! int lastIx = bindings[i].binding_name.length\-1; ! .fl - .fl // check to see if this is a naming context ! .fl ! if (bindings[i].binding_type == BindingType.ncontext) { ! .fl ! System.out.println( "Context: " + ! .fl ! bindings[i].binding_name[lastIx].id); ! .fl } else { ! .fl ! System.out.println("Object: " + ! .fl ! bindings[i].binding_name[lastIx].id); ! .fl } - .fl } - .fl - - .fl } catch (Exception e) { ! .fl ! e.printStackTrace(System.err); ! .fl } - .fl } - .fl } - .fl - \fP .fi ! ! .LP ! --- 1,425 ---- ! '\" t ! .\" Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. ! .\" Title: tnameserv ! .\" Language: English ! .\" Date: 2013年11月21日 ! .\" SectDesc: Java IDLおよびRMI-IIOPツール ! .\" Software: JDK 8 ! .\" Arch: 汎用 ! .\" ! .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ! .\" ! .\" This code is free software; you can redistribute it and/or modify it ! .\" under the terms of the GNU General Public License version 2 only, as ! .\" published by the Free Software Foundation. ! .\" ! .\" This code is distributed in the hope that it will be useful, but WITHOUT ! .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ! .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! .\" version 2 for more details (a copy is included in the LICENSE file that ! .\" accompanied this code). ! .\" ! .\" You should have received a copy of the GNU General Public License version ! .\" 2 along with this work; if not, write to the Free Software Foundation, ! .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ! .\" ! .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ! .\" or visit www.oracle.com if you need additional information or have any ! .\" questions. ! .\" ! .pl 99999 ! .TH "tnameserv" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール" ! .\" ----------------------------------------------------------------- ! .\" * Define some portability stuff ! .\" ----------------------------------------------------------------- ! .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! .\" http://bugs.debian.org/507673 ! .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html ! .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! .ie \n(.g .ds Aq \(aq ! .el .ds Aq ' ! .\" ----------------------------------------------------------------- ! .\" * set default formatting ! .\" ----------------------------------------------------------------- ! .\" disable hyphenation ! .nh ! .\" disable justification (adjust text to left margin only) ! .ad l ! .\" ----------------------------------------------------------------- ! .\" * MAIN CONTENT STARTS HERE * ! .\" ----------------------------------------------------------------- ! .SH "NAME" ! tnameserv \- インタフェース定義言語(IDL)。 ! .SH "概要" ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \fItnameserve\fR \fI\-ORBInitialPort\fR [ \fInameserverport\fR ] ! .fi ! .if n \{\ .RE ! .\} ! .PP ! \-ORBInitialPort \fInameserverport\fR ! .RS 4 ! ネーミング・サービスがORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references\fRメソッドの実装に使用するブートストラップ・プロトコルをリスニングする初期ポートです。 ! .RE ! .SH "説明" ! .PP ! Java IDLには、Object Request Broker Daemon (ORBD)が含まれます。ORBDは、ブートストラップ・サービス、一時ネーミング・サービス、永続ネーミング・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルではORBDを使用していますが、一時ネーミング・サービスを使用する例では、\fIorbd\fRのかわりに\fItnameserv\fRを使用できます。 ! .PP ! http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.htmlにある ! orbd(1)または「Naming Service」を参照してください。 ! .PP ! CORBAのCOS (Common Object Services)ネーミング・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスである\fItnameserv\fRは、COSネーム・サービスの仕様を単純な形で実装したものです。 ! .PP ! オブジェクト参照はネームスペースに名前で格納され、オブジェクト参照と名前のペアは、それぞれネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、ネームスペースの唯一の永続バインディングです。Java IDLネーミング・サービス・プロセスを停止して再起動すると、残りのネームスペースは失われます。 ! .PP ! アプレットまたはアプリケーションからCOSネーミング・サービスを使用するためには、そのORBがネーミング・サービスが動作しているホストのポートを知っているか、そのネーミング・サービスの初期ネーミング・コンテキスト文字列にアクセスできる必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。 ! .SS "ネーミング・サービスの起動" ! .PP ! Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java IDL製品をインストールすると、Java IDLネーミング・サービスを起動するスクリプト(Oracle Solaris: ! \fItnameserv\fR)または実行可能ファイル(Windows: ! \fItnameserv\&.exe\fR)が作成されます。バックグラウンドで動作するように、ネーム・サービスを起動してください。 ! .PP ! 特に指定しない場合、Java IDLネーミング・サービスは、ORBの\fIresolve_initial_references\fRメソッドと\fIlist_initial_references methods\fRメソッドの実装に使用するブートストラップ・プロトコルに対してポート900でリスニングします。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! tnameserv \-ORBInitialPort nameserverport& .fi ! .if n \{\ ! .RE ! .\} ! .PP ! ネーム・サーバー・ポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時、1024より小さいポートでプロセスを開始する場合は、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050のように別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、UNIXコマンド・シェルで次のように入力します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! tnameserv \-ORBInitialPort 1050& .fi ! .if n \{\ ! .RE ! .\} ! .PP ! WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! start tnameserv \-ORBInitialPort 1050 .fi ! .if n \{\ ! .RE ! .\} ! .PP ! ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。これを行うには、ORBオブジェクトの作成時に\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティに新しいポート番号を設定します。 ! .SS "異なるホスト上でのサーバーとクライアントの実行" ! .PP ! Java IDLとRMI\-IIOPのほとんどのチュートリアルでは、ネーミング・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際にデプロイメントする場合には、クライアントとサーバーを、ネーミング・サービスとは異なるホスト・マシン上で実行することが多くなります。 ! .PP ! クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の\fIorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティと\fIorg\&.omg\&.CORBA\&.ORBInitialHost\fRプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。この例は、「Getting Started Using RMI\-IIOP」 ! (http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi\-iiop/rmiiiopexample\&.html)に示されています ! .PP ! コマンドライン・オプション\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」 ! を参照してください ! .PP ! たとえば、一時ネーム・サービス\fItnameserv\fRが、ホスト\fInameserverhost\fRのポート1050上で実行されているとします。さらに、クライアントがホスト\fIclienthost\fR上で実行され、サーバーはホスト\fIserverhost\fR上で実行されているとします。 ! .PP ! ホスト\fInameserverhost\fR上で\fItnameserv\fRを起動します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! tnameserv \-ORBInitialPort 1050 .fi ! .if n \{\ ! .RE ! .\} ! .PP ! \fIserverhost\fR上でサーバーを起動します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! java Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost .fi + .if n \{\ .RE + .\} + .PP ! \fIclienthost\fR上でクライアントを起動します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! java Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost ! .fi ! .if n \{\ .RE ! .\} ! .SS "ネーミング・サービスの停止" ! .PP ! Java IDLネーミング・サービスを停止するには、Unixの場合は、\fIkill\fRなどのオペレーティング・システムのコマンドを使用し、Windowsの場合は、\fI[Ctrl]+[C]\fRキーを使用します。ネーミング・サービスを明示的に停止するまでは、呼出し待機状態が続きます。サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。 ! .SH "オプション" ! .PP ! \-J\fIoption\fR ! .RS 4 ! Java仮想マシンに\fIoption\fRを渡します。\fIoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fI\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。 ! .RE ! .SH "例" ! .SS "ネームスペースへのオブジェクトの追加" ! .PP ! 次の例では、ネームスペースに名前を追加する方法を示します。このサンプル・プログラムは、このままの状態で完全に動作する一時ネーム・サービス・クライアントで、次のような単純なツリーを作成するものです。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! Initial Naming Context ! plans ! Personal ! calendar ! schedule .fi + .if n \{\ + .RE + .\} + .PP + この例で、\fIplans\fRはオブジェクト参照、\fIPersonal\fRは\fIcalendar\fRと\fIschedule\fRの2つのオブジェクト参照を含むネーミング・コンテキストです。 + .sp + .if n \{\ + .RS 4 + .\} + .nf + import java\&.util\&.Properties; + import org\&.omg\&.CORBA\&.*; + import org\&.omg\&.CosNaming\&.*; + + public class NameClient { ! public static void main(String args[]) { try { .fi ! .if n \{\ ! .RE ! .\} ! .PP ! ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf Properties props = new Properties(); ! props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); ! ORB orb = ORB\&.init(args, props); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 次のコードでは、初期ネーミング・コンテキストを取得し、それを\fIctx\fRに代入します。2行目では、\fIctx\fRをダミーのオブジェクト参照\fIobjref\fRにコピーします。このobjrefには、あとで様々な名前を割り当ててネームスペースに追加します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf NamingContext ctx = ! NamingContextHelper\&.narrow( ! orb\&.resolve_initial_references("NameService")); NamingContext objref = ctx; .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 次のコードでは、\fItext\fRタイプの名前\fIplans\fRを作成し、それをダミーのオブジェクト参照にバインドします。その後、\fIrebind\fRメソッドを使用して初期ネーミング・コンテキストの下に\fIplans\fRを追加しています。\fIrebind\fRメソッドを使用すれば、\fIbind\fRメソッドを使用した場合に発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf NameComponent nc1 = new NameComponent("plans", "text"); NameComponent[] name1 = {nc1}; ! ctx\&.rebind(name1, objref); ! System\&.out\&.println("plans rebind successful!"); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 次のコードでは、\fIdirectory\fRタイプの\fIPersonal\fRというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照\fIctx2\fRを\fIname\fRにバインドし、初期ネーミング・コンテキストに追加します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf NameComponent nc2 = new NameComponent("Personal", "directory"); NameComponent[] name2 = {nc2}; ! NamingContext ctx2 = ctx\&.bind_new_context(name2); ! System\&.out\&.println("new naming context added\&.\&."); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 残りのコードでは、ダミーのオブジェクト参照を\fIschedule\fRと\fIcalendar\fRという名前でネーミング・コンテキスト\fIPersonal\fR(\fIctx2\fR)にバインドします。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf NameComponent nc3 = new NameComponent("schedule", "text"); NameComponent[] name3 = {nc3}; ! ctx2\&.rebind(name3, objref); ! System\&.out\&.println("schedule rebind successful!"); NameComponent nc4 = new NameComponent("calender", "text"); NameComponent[] name4 = {nc4}; ! ctx2\&.rebind(name4, objref); ! System\&.out\&.println("calender rebind successful!"); } catch (Exception e) { ! e\&.printStackTrace(System\&.err); } } } .fi + .if n \{\ + .RE + .\} + .SS "ネームスペースの参照" + .PP + 次のサンプル・プログラムでは、ネームスペースをブラウズする方法を示します。 + .sp + .if n \{\ + .RS 4 + .\} + .nf + import java\&.util\&.Properties; + import org\&.omg\&.CORBA\&.*; + import org\&.omg\&.CosNaming\&.*; + + public class NameClientList { ! public static void main(String args[]) { try { .fi ! .if n \{\ ! .RE ! .\} ! .PP ! ネーミング・サービスの起動で、\fInameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf Properties props = new Properties(); ! props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050"); ! ORB orb = ORB\&.init(args, props); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 次のコードでは、初期ネーミング・コンテキストを取得しています。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf NamingContext nc = ! NamingContextHelper\&.narrow( ! orb\&.resolve_initial_references("NameService")); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! \fIlist\fRメソッドは、ネーミング・コンテキストのバインディングをリストします。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストから\fIBindingListHolder\fRに返されます。残りのバインディングは、\fIBindingIteratorHolder\fRに返されます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf BindingListHolder bl = new BindingListHolder(); BindingIteratorHolder blIt= new BindingIteratorHolder(); ! nc\&.list(1000, bl, blIt); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 次のコードでは、返された\fIBindingListHolder\fRからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf ! Binding bindings[] = bl\&.value; ! if (bindings\&.length == 0) return; .fi ! .if n \{\ ! .RE ! .\} ! .PP 残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。 + .sp + .if n \{\ + .RS 4 + .\} .nf ! for (int i=0; i < bindings\&.length; i++) { // get the object reference for each binding ! org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name); ! String objStr = orb\&.object_to_string(obj); ! int lastIx = bindings[i]\&.binding_name\&.length\-1; // check to see if this is a naming context ! if (bindings[i]\&.binding_type == BindingType\&.ncontext) { ! System\&.out\&.println("Context: " + ! bindings[i]\&.binding_name[lastIx]\&.id); } else { ! System\&.out\&.println("Object: " + ! bindings[i]\&.binding_name[lastIx]\&.id); } } } catch (Exception e) { ! e\&.printStackTrace(System\&.err) } } } .fi ! .if n \{\ ! .RE ! .\} ! .SH "関連項目" ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! orbd(1) ! .RE ! .br ! 'pl 8.5i ! 'bp