jdk/src/solaris/doc/sun/man/man1/ja/tnameserv.1
changeset 23600 d21826f6c789
parent 9566 d7241af95355
child 30373 7b7094f0b833
equal deleted inserted replaced
23599:e1bdea08040e 23600:d21826f6c789
     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