jdk/src/solaris/doc/sun/man/man1/ja/tnameserv.1
changeset 2 90ce3da70b43
child 2692 345bc8d65b19
equal deleted inserted replaced
0:fd16c54261b3 2:90ce3da70b43
       
     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