|
Java example source code file (idlj.1)
The idlj.1 Java example source code'\" t .\" Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. .\" Title: idlj .\" 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 "idlj" "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" idlj \- 指定されたインタフェース定義言語(IDL)ファイルに対してJavaバインディングを生成します。 .SH "概要" .sp .if n \{\ .RS 4 .\} .nf \fIidlj\fR [ \fIoptions\fR ] \fIidlfile\fR .fi .if n \{\ .RE .\} .PP \fIoptions\fR .RS 4 コマンドライン・オプション。オプションを参照してください。optionsの順番は任意ですが、\fIidlfile\fRよりも前に指定する必要があります。 .RE .PP \fIidlfile\fR .RS 4 インタフェース定義言語(IDL)による定義が含まれるファイルの名前。 .RE .SH "説明" .PP IDL\-to\-Javaコンパイラは、指定されたIDLファイルに対してJavaバインディングを生成します。バインディングの詳細は、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/mapping/jidlMapping\&.htmlにある Java IDL: Java言語マッピングへのIDLを参照してください。 .PP IDL\-to\-Javaコンパイラの以前のリリースの中には、\fIidltojava\fRという名前だったものがあります。 .SS "クライアント・バインディングおよびサーバー・バインディングの発行" .PP 次の\fIidlj\fRコマンドは、クライアント側バインディングを含む\fIMy\&.idl\fRという名前のIDLファイルを生成します。 .sp .if n \{\ .RS 4 .\} .nf idlj My\&.idl .fi .if n \{\ .RE .\} .PP 前の構文は次と同等です。 .sp .if n \{\ .RS 4 .\} .nf idlj \-fclient My\&.idl .fi .if n \{\ .RE .\} .PP 次の例では、サーバー側バインディングを生成し、クライアント側バインディングおよびスケルトンを含めており、これらはすべて、POA (継承モデル)です。 .sp .if n \{\ .RS 4 .\} .nf idlg \-fserver My\&.idl .fi .if n \{\ .RE .\} .PP クライアント側とサーバー側の両方のバインディングを生成する場合は、次のコマンド(どれも等価)のうちの1つを使用します。 .sp .if n \{\ .RS 4 .\} .nf idlj \-fclient \-fserver My\&.idl idlj \-fall My\&.idl .fi .if n \{\ .RE .\} .PP サーバー側で可能なモデルは2つあります。移殖可能サーバント継承モデルとTieモデルです。Tie委譲モデルを参照してください。 .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fB移殖可能サーバント継承モデル\fR .ps -1 .br .PP デフォルトのサーバー側のモデルは、移殖可能サーバント継承モデルです。\fIMy\&.idl\fR内で\fIMy\fRインタフェースが定義されている場合は、\fIMyPOA\&.java\fRというファイルが生成されます。\fIMy\fRインタフェースの実装を提供する必要があり、\fIMy\fRインタフェースは\fIMyPOA\fRクラスから継承する必要があります。\fIMyPOA\&.java\fRは、http://docs\&.oracle\&.com/javase/8/docs/api/org/omg/PortableServer/Servant\&.htmlにある \fIorg\&.omg\&.PortableServer\&.Servant\fRクラスを拡張するストリームベースのスケルトンです。 .PP \fIMy\fRインタフェースは、スケルトンが実装するIDLインタフェースに関連付けられている\fIcallHandler\fRインタフェースと操作インタフェースを実装します。 .PP ポータブル・オブジェクト・アダプタ(POA)の\fIPortableServer\fRモジュールは、ネイティブの\fIServant\fR型を定義します。http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/idl/POA\&.htmlにある ポータブル・オブジェクト・アダプタ(POA)を参照してください。 .PP Javaプログラミング言語では、\fIServant\fR型はJavaの\fIorg\&.omg\&.PortableServer\&.Servant\fRクラスにマップされます。これは、すべてのPOAサーバント実装のベース・クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッド、およびPOAによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドを提供します。 .PP 継承モデルのもう1つのオプションは、\fI\-oldImplBase\fRフラグを使用して、Java SE 1\&.4より前のリリースのJavaプログラミング言語と互換性のあるサーバー側バインディングを生成することです。\-\fIoldImplBase\fRフラグは非標準で、これらのAPIは非推奨です。このフラグを使用するのは、Java SE 1\&.3で記述された既存のサーバーとの互換性が必要な場合のみです。その場合、既存のmakeファイルを変更して、\fI\-oldImplBase\fRフラグを\fIidlj\fRコンパイラに追加する必要があります。それ以外の場合、POAベースのサーバー側マッピングが生成されます。下位互換性のあるサーバー側バインディングを生成するには、次を実行します。 .sp .5v .RE .sp .if n \{\ .RS 4 .\} .nf idlj \-fclient \-fserver \-oldImplBase My\&.idl idlj \-fall \-oldImplBase My\&.idl .fi .if n \{\ .RE .\} .PP \fIMy\&.idl\fR内で\fIMy\fRインタフェースが定義されている場合は、\fI_MyImplBase\&.java\fRというファイルが生成されます。\fIMy\fRインタフェースの実装を提供する必要があり、\fIMy\fRインタフェースは\fI_MyImplBase\fRクラスから継承する必要があります。 .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBTie委譲モデル\fR .ps -1 .br .PP もう1つのサーバー側モデルは、Tieモデルと呼ばれるものです。このサーバー側モデルは、委譲モデルです。Tieとスケルトンを同時に生成することはできないため、それらは別々に生成する必要があります。次のコマンドによって、Tieモデル用のバインディングが生成されます。 .sp .5v .RE .sp .if n \{\ .RS 4 .\} .nf idlj \-fall My\&.idl idlj \-fallTIE My\&.idl .fi .if n \{\ .RE .\} .PP \fIMy\fRインタフェースの場合、2番目のコマンドにより、\fIMyPOATie\&.java\fRが生成されます。\fIMyPOATie\fRクラスへのコンストラクタは、delegateを取ります。この例では、デフォルトのPOAモデルを使用しているため、コンストラクタにもPOAが必要です。delegateに対して実装を提供する必要がありますが、この実装は\fIMyOperations\fRインタフェースから継承する必要があるのみで、その他のクラスから継承する必要はありません。これをORBと一緒に使用するには、たとえば次のように\fIMyPOATie\fRクラス内で実装をラップする必要があります。 .sp .if n \{\ .RS 4 .\} .nf ORB orb = ORB\&.init(args, System\&.getProperties()); // Get reference to rootpoa & activate the POAManager POA rootpoa = (POA)orb\&.resolve_initial_references("RootPOA"); rootpoa\&.the_POAManager()\&.activate(); // create servant and register it with the ORB MyServant myDelegate = new MyServant(); myDelegate\&.setORB(orb); // create a tie, with servant being the delegate\&. MyPOATie tie = new MyPOATie(myDelegate, rootpoa); // obtain the objectRef for the tie My ref = tie\&._this(orb); .fi .if n \{\ .RE .\} .PP 他の実装から継承する必要がある場合、標準の継承モデルではなくTieモデルを使用することもできます。Javaの場合は、インタフェースの継承の個数に制限はありませんが、クラスの継承に使用できるスロットは1つのみです。継承モデルを使用した場合は、そのスロットが占有されます。Tieモデルを使用すると、そのスロットが使用されず、ユーザーが独自の目的で使用できます。この方法には、間接性のレベルが1つ導入されるという短所があります。メソッドを呼び出すときに、余分なメソッド呼出しが1回発生します。 .PP サーバー側の生成の場合、Java SE 1\&.4より前のバージョンのJava言語にマッピングするIDLのバージョンと互換性のある、Tieモデルのバインディングです。 .sp .if n \{\ .RS 4 .\} .nf idlj \-oldImplBase \-fall My\&.idl idlj \-oldImplBase \-fallTIE My\&.idl .fi .if n \{\ .RE .\} .PP \fIMy\fRインタフェースの場合、これにより、\fIMy_Tie\&.java\fRが生成されます。\fIMy_Tie\fRクラスへのコンストラクタは、\fIimpl\fRオブジェクトを取ります。\fIimpl\fRに対して実装を提供する必要がありますが、その実装は\fIHelloOperations\fRインタフェースから継承する必要があるのみで、その他のクラスから継承する必要はありません。しかし、これをORBと一緒に使用するには、たとえば次のように\fIMy_Tie\fR内で実装をラップする必要があります。 .sp .if n \{\ .RS 4 .\} .nf ORB orb = ORB\&.init(args, System\&.getProperties()); // create servant and register it with the ORB MyServant myDelegate = new MyServant(); myDelegate\&.setORB(orb); // create a tie, with servant being the delegate\&. MyPOATie tie = new MyPOATie(myDelegate); // obtain the objectRef for the tie My ref = tie\&._this(orb); .fi .if n \{\ .RE .\} .SS "発行されたファイルの代替位置の指定" .PP 発行されたファイルを現在のディレクトリ以外のディレクトリに置くには、\fIi\fR\fIdlj \-td /altdir My\&.idl\fRのコマンドでコンパイラを呼び出します。 .PP \fIMy\fRインタフェースの場合、バインディングは、\fI\&./My\&.java\fRではなく、\fI/altdir/My\&.java\fRなどに発行されます。 .SS "インクルード・ファイルの代替位置の指定" .PP \fIMy\&.idl\fRファイルが別の\fIidl\fRファイルである\fIMyOther\&.idl\fRをインクルードする場合、コンパイラでは、\fIMyOther\&.idl\fRファイルがローカル・ディレクトリに存在することを前提としています。たとえば、それが\fI/includes\fRにある場合は、次のようなコマンドでコンパイラを呼び出します。 .sp .if n \{\ .RS 4 .\} .nf idlj \-i /includes My\&.idl .fi .if n \{\ .RE .\} .PP たとえば、\fI/moreIncludes\fRにある\fIAnother\&.idl\fRも\fIMy\&.idl\fRにインクルードされているのであれば、次のようなコマンドでコンパイラを呼び出します。 .sp .if n \{\ .RS 4 .\} .nf idlj \-i /includes \-i /moreIncludes My\&.idl .fi .if n \{\ .RE .\} .PP このような形式の\fIinclude\fRは長くなるため、インクルード・ファイルを検索する場所をコンパイラに指示するための別の方法が用意されています。この方法は、環境変数の考え方と似ています。\fICLASSPATH\fR変数に一覧表示されているディレクトリ内にidl\&.configという名前のファイルを作成します。その\fIidl\&.config\fRの中に、次のような形式の行を入れます。 .sp .if n \{\ .RS 4 .\} .nf includes=/includes;/moreIncludes .fi .if n \{\ .RE .\} .PP コンパイラは、このファイルを検索し、インクルード・リストを読み込みます。この例では、ディレクトリの間の区切り文字はセミコロン(;)になっています。この区切り文字は、プラットフォームによって異なります。Windowsプラットフォームではセミコロンを使用し、UNIXプラットフォームではコロンを使用するなどです。 .SS "インクルード・ファイルに対するバインディングの発行" .PP デフォルトでは、コマンドラインに指定した\fIidl\fRファイルで定義されているインタフェースや構造体などについてのみ、Javaバインディングが生成されます。インクルードされたファイルで定義されている型については生成されません。たとえば、次の2つの\fIidl\fRファイルについて考えてみます。 .sp .if n \{\ .RS 4 .\} .nf My\&.idl file: #include <MyOther\&.idl> interface My { }; MyOther\&.idl file: interface MyOther { }; .fi .if n \{\ .RE .\} .PP デフォルトのルールに関して警告があります。グローバル・スコープに表示される\fI#include\fR文は、前述のとおりに処理されます。これらの\fI#include\fR文は、インポート文と見なすことができます。囲まれたスコープ内に表示される\fI#include\fR文は、本当の意味での\fI#include\fR文として処理されます。つまり、インクルードされたファイルにあるコードが、元のファイルにそのまま表示されているかのように処理され、それに対してJavaバインディングが発行されます。次はその例です。 .sp .if n \{\ .RS 4 .\} .nf My\&.idl file: #include <MyOther\&.idl> interface My { #include <Embedded\&.idl> }; MyOther\&.idl file: interface MyOther { }; Embedded\&.idl enum E {one, two, three}; .fi .if n \{\ .RE .\} .PP \fI idlj My\&.idl \fRを実行して、Javaファイルの次のリストを生成します。インポート文とみなされる\fI#include\fRに定義されていたため、\fIMyOther\&.java\fRは生成されませんでした。ただし、本当の意味での\fI#include\fRで定義されていたため、\fIE\&.java\fRは生成されました。\fIEmbedded\&.idl\fRファイルが\fIMy\fRインタフェースのスコープ内にインクルードされているため、\fIMy\fRのスコープ内(つまり、\fIMyPackage\fR内)に生成されています。\fI\-emitAll\fRフラグを使用した場合、インクルードされたすべてのファイルにあるすべての型が発行されます。 .sp .if n \{\ .RS 4 .\} .nf \&./MyHolder\&.java \&./MyHelper\&.java \&./_MyStub\&.java \&./MyPackage \&./MyPackage/EHolder\&.java \&./MyPackage/EHelper\&.java \&./MyPackage/E\&.java \&./My\&.java .fi .if n \{\ .RE .\} .SS "パッケージの接頭辞の挿入" .PP ABCという名前の会社のために作業していて、次のようなIDLファイルを構築したとしましょう。 .sp .if n \{\ .RS 4 .\} .nf Widgets\&.idl file: module Widgets { interface W1 {\&.\&.\&.}; interface W2 {\&.\&.\&.}; }; .fi .if n \{\ .RE .\} .PP IDL\-to\-Javaコンパイラを介してこのファイルを実行した場合、W1およびW2に対するJavaバインディングは、\fIWidgets\fRパッケージ内に格納されます。業界の慣例によると、会社のパッケージは、\fIcom\&.<company name>\fRという名前のパッケージ内に置くことになっています。この慣例に従うには、パッケージ名を\fIcom\&.abc\&.Widgets\fRにする必要があります。このパッケージ接頭辞をWidgetsモジュールに付加するには、次のコマンドを実行します。 .sp .if n \{\ .RS 4 .\} .nf idlj \-pkgPrefix Widgets com\&.abc Widgets\&.idl .fi .if n \{\ .RE .\} .PP Widgets\&.idlをインクルードしているIDLファイルがある場合は、そのコマンドにも\fI\-pkgPrefix\fRフラグが必要です。このフラグを指定しないと、そのIDLファイルは、\fIcom\&.abc\&.Widgets\fRパッケージではなく、\fIWidgets\fRパッケージを検索することになります。 .PP 接頭辞が必要なパッケージがいくつもある場合は、前述のidl\&.configファイルで接頭辞を指定するのが簡単です。パッケージ接頭辞の各行は、\fIPkgPrefix\&.<type>= Other Java examples (source code examples)Here is a short list of links related to this Java idlj.1 source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.