1 '\" t
   2 .\" Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20 .\" or visit www.oracle.com if you need additional information or have any
  21 .\" questions.
  22 .\"
  23 .\" Title: tnameserv
  24 .\" Language: Japanese
  25 .\" Date: 2013年11月21日
  26 .\" SectDesc: Java IDLおよびRMI-IIOPツール
  27 .\" Software: JDK 8
  28 .\" Arch: 汎用
  29 .\" Part Number: E58103-01
  30 .\" Doc ID: JSSON
  31 .\"
  32 .if n .pl 99999
  33 .TH "tnameserv" "1" "2013年11月21日" "JDK 8" "Java IDLおよびRMI-IIOPツール"
  34 .\" -----------------------------------------------------------------
  35 .\" * Define some portability stuff
  36 .\" -----------------------------------------------------------------
  37 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  38 .\" http://bugs.debian.org/507673
  39 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
  40 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  41 .ie \n(.g .ds Aq \(aq
  42 .el       .ds Aq '
  43 .\" -----------------------------------------------------------------
  44 .\" * set default formatting
  45 .\" -----------------------------------------------------------------
  46 .\" disable hyphenation
  47 .nh
  48 .\" disable justification (adjust text to left margin only)
  49 .ad l
  50 .\" -----------------------------------------------------------------
  51 .\" * MAIN CONTENT STARTS HERE *
  52 .\" -----------------------------------------------------------------
  53 .SH "名前"
  54 tnameserv \- インタフェース定義言語(IDL)。
  55 .SH "概要"
  56 .sp
  57 .if n \{\
  58 .RS 4
  59 .\}
  60 .nf
  61 \fBtnameserve\fR \fB\-ORBInitialPort\fR [ \fInameserverport\fR ]
  62 .fi
  63 .if n \{\
  64 .RE
  65 .\}
  66 .PP
  67 \-ORBInitialPort \fInameserverport\fR
  68 .RS 4
  69 ネーミング・サービスがORBの\fBresolve_initial_references\fRメソッドと\fBlist_initial_references\fRメソッドの実装に使用するブートストラップ・プロトコルをリスニングする初期ポートです。
  70 .RE
  71 .SH "説明"
  72 .PP
  73 Java IDLには、Object Request Broker Daemon (ORBD)が含まれます。ORBDは、ブートストラップ・サービス、一時ネーミング・サービス、永続ネーミング・サービスおよびサーバー・マネージャを含むデーモン・プロセスです。Java IDLのすべてのチュートリアルではORBDを使用していますが、一時ネーミング・サービスを使用する例では、\fBorbd\fRのかわりに\fBtnameserv\fRを使用できます。
  74 .PP
  75 orbd(1)http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/jidlNaming\&.html
  76 にあるまたは「Naming Service」を参照してください。
  77 .PP
  78 CORBAのCOS (Common Object Services)ネーミング・サービスは、ファイル・システムがファイルに対してディレクトリ構造を提供しているのと同じように、オブジェクト参照に対してツリー構造のディレクトリを提供します。Java IDLの一時ネーム・サービスである\fBtnameserv\fRは、COSネーム・サービスの仕様を単純な形で実装したものです。
  79 .PP
  80 オブジェクト参照はネームスペースに名前で格納され、オブジェクト参照と名前のペアは、それぞれネーム・バインディングと呼ばれます。ネーム・バインディングはネーミング・コンテキストに組み込むことができます。ネーミング・コンテキストはネーム・バインディングであり、ファイル・システムのサブディレクトリと同じ編成機能を持ちます。すべてのバインディングは初期ネーミング・コンテキストの下に格納されます。初期ネーミング・コンテキストは、ネームスペースの唯一の永続バインディングです。Java IDLネーミング・サービス・プロセスを停止して再起動すると、残りのネームスペースは失われます。
  81 .PP
  82 アプレットまたはアプリケーションからCOSネーミング・サービスを使用するためには、そのORBがネーミング・サービスが動作しているホストのポートを知っているか、そのネーミング・サービスの初期ネーミング・コンテキスト文字列にアクセスできる必要があります。ネーム・サービスは、Java IDLのネーム・サービスでもその他のCOS準拠のネーム・サービスでもかまいません。
  83 .SS "ネーミング・サービスの起動"
  84 .PP
  85 Java IDLネーム・サービスは、ネーム・サービスを使用するアプリケーションまたはアプレットより前に起動しておく必要があります。Java IDL製品をインストールすると、Java IDLネーミング・サービスを起動するスクリプト(Oracle Solaris:
  86 \fBtnameserv\fR)または実行可能ファイル(Windows:
  87 \fBtnameserv\&.exe\fR)が作成されます。バックグラウンドで動作するように、ネーム・サービスを起動してください。
  88 .PP
  89 特に指定しない場合、Java IDLネーミング・サービスは、ORBの\fBresolve_initial_references\fRメソッドと\fBlist_initial_references methods\fRメソッドの実装に使用するブートストラップ・プロトコルに対してポート900でリスニングします。
  90 .sp
  91 .if n \{\
  92 .RS 4
  93 .\}
  94 .nf
  95 \fBtnameserv \-ORBInitialPort nameserverport&\fR
  96  
  97 .fi
  98 .if n \{\
  99 .RE
 100 .\}
 101 .PP
 102 ネーム・サーバー・ポートを指定しない場合、デフォルトでポート900が使用されます。Oracle Solarisソフトウェアの実行時、1024より小さいポートでプロセスを開始する場合は、rootユーザーになる必要があります。このため、1024以上のポート番号を使用することをお薦めします。1050のように別のポートを指定し、ネーム・サービスをバックグラウンドで実行するには、Solaris、LinuxまたはOS Xコマンド・シェルで次のように入力します。
 103 .sp
 104 .if n \{\
 105 .RS 4
 106 .\}
 107 .nf
 108 \fBtnameserv \-ORBInitialPort 1050&\fR
 109  
 110 .fi
 111 .if n \{\
 112 .RE
 113 .\}
 114 .PP
 115 WindowsのMS\-DOSシステム・プロンプトでは、次のように入力します。
 116 .sp
 117 .if n \{\
 118 .RS 4
 119 .\}
 120 .nf
 121 \fBstart tnameserv \-ORBInitialPort 1050\fR
 122  
 123 .fi
 124 .if n \{\
 125 .RE
 126 .\}
 127 .PP
 128 ネーム・サーバーのクライアントには、新しいポート番号を知らせる必要があります。これを行うには、ORBオブジェクトの作成時に\fBorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティに新しいポート番号を設定します。
 129 .SS "異なるホスト上でのサーバーとクライアントの実行"
 130 .PP
 131 Java IDLとRMI\-IIOPのほとんどのチュートリアルでは、ネーミング・サービス、サーバーおよびクライアントはすべて開発用のマシン上で実行されます。実際にデプロイメントする場合には、クライアントとサーバーを、ネーミング・サービスとは異なるホスト・マシン上で実行することが多くなります。
 132 .PP
 133 クライアントとサーバーがネーム・サービスを見つけるには、クライアントとサーバーが、ネーム・サービスが実行されているポートの番号とホストを認識している必要があります。そのためには、クライアントとサーバーのファイル内の\fBorg\&.omg\&.CORBA\&.ORBInitialPort\fRプロパティと\fBorg\&.omg\&.CORBA\&.ORBInitialHost\fRプロパティをネーム・サービスが実行されているポートの番号とマシンの名前に設定します。この例は、「Getting Started Using RMI\-IIOP」
 134 (http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/rmi\-iiop/rmiiiopexample\&.html)に示されています
 135 .PP
 136 コマンド行オプション\fB\-ORBInitialPort nameserverport#\fRと\fB\-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」
 137 を参照してください
 138 .PP
 139 たとえば、一時ネーム・サービス\fBtnameserv\fRが、ホスト\fBnameserverhost\fRのポート1050上で実行されているとします。さらに、クライアントがホスト\fBclienthost\fR上で実行され、サーバーはホスト\fBserverhost\fR上で実行されているとします。
 140 .PP
 141 ホスト\fBnameserverhost\fR上で\fBtnameserv\fRを起動します。
 142 .sp
 143 .if n \{\
 144 .RS 4
 145 .\}
 146 .nf
 147 \fBtnameserv \-ORBInitialPort 1050\fR
 148  
 149 .fi
 150 .if n \{\
 151 .RE
 152 .\}
 153 .PP
 154 \fBserverhost\fR上でサーバーを起動します。
 155 .sp
 156 .if n \{\
 157 .RS 4
 158 .\}
 159 .nf
 160 \fBjava Server \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost\fR
 161  
 162 .fi
 163 .if n \{\
 164 .RE
 165 .\}
 166 .PP
 167 
 168 \fBclienthost\fR上でクライアントを起動します。
 169 .sp
 170 .if n \{\
 171 .RS 4
 172 .\}
 173 .nf
 174 \fBjava Client \-ORBInitialPort 1050 \-ORBInitialHost nameserverhost\fR
 175  
 176 .fi
 177 .if n \{\
 178 .RE
 179 .\}
 180 .SS "ネーミング・サービスの停止"
 181 .PP
 182 Java IDLネーミング・サービスを停止するには、Solaris、LinuxまたはOS Xの場合は、\fBkill\fRなどのオペレーティング・システムのコマンドを使用し、Windowsの場合は、\fB[Ctrl]+[C]\fRキーを使用します。ネーミング・サービスを明示的に停止するまでは、呼出し待機状態が続きます。サービスを終了させると、Java IDLネーム・サービスに登録されている名前は失われます。
 183 .SH "オプション"
 184 .PP
 185 \-J\fIoption\fR
 186 .RS 4
 187 Java Virtual Machineに\fBoption\fRを渡します。\fBoption\fRには、Javaアプリケーション起動ツールのリファレンス・ページに記載されているオプションを1つ指定します。たとえば、\fB\-J\-Xms48m\fRと指定すると、スタートアップ・メモリーは48MBに設定されます。java(1)を参照してください。
 188 .RE
 189 .SH "例"
 190 .SS "ネームスペースへのオブジェクトの追加"
 191 .PP
 192 次の例では、ネームスペースに名前を追加する方法を示します。このサンプル・プログラムは、自己完結型の一時ネーム・サービス・クライアントで、次のような単純なツリーを作成するものです。
 193 .sp
 194 .if n \{\
 195 .RS 4
 196 .\}
 197 .nf
 198 \fBInitial Naming Context\fR
 199 \fB     plans\fR
 200 \fB     Personal\fR
 201 \fB          calendar\fR
 202 \fB          schedule\fR
 203  
 204 .fi
 205 .if n \{\
 206 .RE
 207 .\}
 208 .PP
 209 この例で、\fBplans\fRはオブジェクト参照、\fBPersonal\fRは\fBcalendar\fRと\fBschedule\fRの2つのオブジェクト参照を含むネーミング・コンテキストです。
 210 .sp
 211 .if n \{\
 212 .RS 4
 213 .\}
 214 .nf
 215 \fBimport java\&.util\&.Properties;\fR
 216 \fBimport org\&.omg\&.CORBA\&.*;\fR
 217 \fBimport org\&.omg\&.CosNaming\&.*;\fR
 218 \fB \fR
 219 \fBpublic class NameClient {\fR
 220  
 221 \fB    public static void main(String args[]) {\fR
 222  
 223 \fB        try {\fR
 224  
 225 .fi
 226 .if n \{\
 227 .RE
 228 .\}
 229 .PP
 230 ネーミング・サービスの起動で、\fBnameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。
 231 .sp
 232 .if n \{\
 233 .RS 4
 234 .\}
 235 .nf
 236 \fB            Properties props = new Properties();\fR
 237 \fB            props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fR
 238 \fB            ORB orb = ORB\&.init(args, props);\fR
 239  
 240 .fi
 241 .if n \{\
 242 .RE
 243 .\}
 244 .PP
 245 次のコードでは、初期ネーミング・コンテキストを取得し、それを\fBctx\fRに代入します。2行目では、\fBctx\fRをダミーのオブジェクト参照\fBobjref\fRにコピーします。このobjrefには、あとで様々な名前を割り当ててネームスペースに追加します。
 246 .sp
 247 .if n \{\
 248 .RS 4
 249 .\}
 250 .nf
 251 \fB            NamingContext ctx =\fR
 252 \fB                NamingContextHelper\&.narrow(\fR
 253 \fB                    orb\&.resolve_initial_references("NameService"));\fR
 254 \fB             NamingContext objref = ctx;\fR
 255  
 256 .fi
 257 .if n \{\
 258 .RE
 259 .\}
 260 .PP
 261 次のコードでは、\fBtext\fRタイプの名前\fBplans\fRを作成し、それをダミーのオブジェクト参照にバインドします。その後、\fBrebind\fRメソッドを使用して初期ネーミング・コンテキストの下に\fBplans\fRを追加しています。\fBrebind\fRメソッドを使用すれば、\fBbind\fRメソッドを使用した場合に発生する例外を発生させずに、このプログラムを何度も繰返し実行できます。
 262 .sp
 263 .if n \{\
 264 .RS 4
 265 .\}
 266 .nf
 267 \fB            NameComponent nc1 = new NameComponent("plans", "text");\fR
 268 \fB            NameComponent[] name1 = {nc1};\fR
 269 \fB            ctx\&.rebind(name1, objref);\fR
 270 \fB            System\&.out\&.println("plans rebind successful!");\fR
 271  
 272 .fi
 273 .if n \{\
 274 .RE
 275 .\}
 276 .PP
 277 次のコードでは、\fBdirectory\fRタイプの\fBPersonal\fRというネーミング・コンテキストを作成します。その結果得られるオブジェクト参照\fBctx2\fRを\fBname\fRにバインドし、初期ネーミング・コンテキストに追加します。
 278 .sp
 279 .if n \{\
 280 .RS 4
 281 .\}
 282 .nf
 283 \fB            NameComponent nc2 = new NameComponent("Personal", "directory");\fR
 284 \fB            NameComponent[] name2 = {nc2};\fR
 285 \fB            NamingContext ctx2 = ctx\&.bind_new_context(name2);\fR
 286 \fB            System\&.out\&.println("new naming context added\&.\&.");\fR
 287  
 288 .fi
 289 .if n \{\
 290 .RE
 291 .\}
 292 .PP
 293 残りのコードでは、ダミーのオブジェクト参照を\fBschedule\fRと\fBcalendar\fRという名前でネーミング・コンテキスト\fBPersonal\fR(\fBctx2\fR)にバインドします。
 294 .sp
 295 .if n \{\
 296 .RS 4
 297 .\}
 298 .nf
 299 \fB            NameComponent nc3 = new NameComponent("schedule", "text");\fR
 300 \fB            NameComponent[] name3 = {nc3};\fR
 301 \fB            ctx2\&.rebind(name3, objref);\fR
 302 \fB            System\&.out\&.println("schedule rebind successful!");\fR
 303 \fB \fR
 304 \fB            NameComponent nc4 = new NameComponent("calender", "text");\fR
 305 \fB            NameComponent[] name4 = {nc4};\fR
 306 \fB            ctx2\&.rebind(name4, objref);\fR
 307 \fB            System\&.out\&.println("calender rebind successful!");\fR
 308 \fB        } catch (Exception e) {\fR
 309 \fB            e\&.printStackTrace(System\&.err);\fR
 310 \fB        }\fR
 311 \fB    }\fR
 312 \fB}\fR
 313  
 314 .fi
 315 .if n \{\
 316 .RE
 317 .\}
 318 .SS "ネームスペースの参照"
 319 .PP
 320 次のサンプル・プログラムでは、ネームスペースをブラウズする方法を示します。
 321 .sp
 322 .if n \{\
 323 .RS 4
 324 .\}
 325 .nf
 326 \fBimport java\&.util\&.Properties;\fR
 327 \fBimport org\&.omg\&.CORBA\&.*;\fR
 328 \fBimport org\&.omg\&.CosNaming\&.*;\fR
 329 \fB \fR
 330 \fBpublic class NameClientList {\fR
 331  
 332 \fB    public static void main(String args[]) {\fR
 333  
 334 \fB        try {\fR
 335  
 336 .fi
 337 .if n \{\
 338 .RE
 339 .\}
 340 .PP
 341 ネーミング・サービスの起動で、\fBnameserver\fRはポート1050で起動されました。次のコードで、このポート番号をクライアント・システムに知らせます。
 342 .sp
 343 .if n \{\
 344 .RS 4
 345 .\}
 346 .nf
 347 \fB            Properties props = new Properties();\fR
 348 \fB            props\&.put("org\&.omg\&.CORBA\&.ORBInitialPort", "1050");\fR
 349 \fB            ORB orb = ORB\&.init(args, props);\fR
 350  
 351 .fi
 352 .if n \{\
 353 .RE
 354 .\}
 355 .PP
 356 次のコードでは、初期ネーミング・コンテキストを取得しています。
 357 .sp
 358 .if n \{\
 359 .RS 4
 360 .\}
 361 .nf
 362 \fB            NamingContext nc =\fR
 363 \fB            NamingContextHelper\&.narrow(\fR
 364 \fB                orb\&.resolve_initial_references("NameService"));\fR
 365  
 366 .fi
 367 .if n \{\
 368 .RE
 369 .\}
 370 .PP
 371 \fBlist\fRメソッドは、ネーミング・コンテキストのバインディングをリストします。この場合、最大1000個までのバインディングが初期ネーミング・コンテキストから\fBBindingListHolder\fRに返されます。残りのバインディングは、\fBBindingIteratorHolder\fRに返されます。
 372 .sp
 373 .if n \{\
 374 .RS 4
 375 .\}
 376 .nf
 377 \fB            BindingListHolder bl = new BindingListHolder();\fR
 378 \fB            BindingIteratorHolder blIt= new BindingIteratorHolder();\fR
 379 \fB            nc\&.list(1000, bl, blIt);\fR
 380  
 381 .fi
 382 .if n \{\
 383 .RE
 384 .\}
 385 .PP
 386 次のコードでは、返された\fBBindingListHolder\fRからバインディングの配列を取得します。バインディングがない場合は、プログラムが終了します。
 387 .sp
 388 .if n \{\
 389 .RS 4
 390 .\}
 391 .nf
 392 \fB            Binding bindings[] = bl\&.value;\fR
 393 \fB            if (bindings\&.length == 0) return;\fR
 394  
 395 .fi
 396 .if n \{\
 397 .RE
 398 .\}
 399 .PP
 400 残りのコードでは、バインディングに対してループ処理を行い、名前を出力します。
 401 .sp
 402 .if n \{\
 403 .RS 4
 404 .\}
 405 .nf
 406 \fB            for (int i=0; i < bindings\&.length; i++) {\fR
 407 \fB \fR
 408 \fB                // get the object reference for each binding\fR
 409 \fB                org\&.omg\&.CORBA\&.Object obj = nc\&.resolve(bindings[i]\&.binding_name);\fR
 410 \fB                String objStr = orb\&.object_to_string(obj);\fR
 411 \fB                int lastIx = bindings[i]\&.binding_name\&.length\-1;\fR
 412 \fB \fR
 413 \fB                // check to see if this is a naming context\fR
 414 \fB                if (bindings[i]\&.binding_type == BindingType\&.ncontext) {\fR
 415 \fB                    System\&.out\&.println("Context: " +\fR
 416 \fB                        bindings[i]\&.binding_name[lastIx]\&.id);\fR
 417 \fB                } else {\fR
 418 \fB                    System\&.out\&.println("Object: " +\fR
 419 \fB                        bindings[i]\&.binding_name[lastIx]\&.id);\fR
 420 \fB                }\fR
 421 \fB            }\fR
 422 \fB        } catch (Exception e) {\fR
 423 \fB            e\&.printStackTrace(System\&.err)\fR
 424 \fB        }\fR
 425 \fB    }\fR
 426 \fB}\fR
 427  
 428 .fi
 429 .if n \{\
 430 .RE
 431 .\}
 432 .SH "関連項目"
 433 .sp
 434 .RS 4
 435 .ie n \{\
 436 \h'-04'\(bu\h'+03'\c
 437 .\}
 438 .el \{\
 439 .sp -1
 440 .IP \(bu 2.3
 441 .\}
 442 orbd(1)
 443 .RE
 444 .br
 445 'pl 8.5i
 446 'bp