CORBAおよびEJB
2. Java VMのデフォルトJavaロケールは、クライアントの環境変数NLS_LANGを反映し
たカレント・データベース・セッションの(データベース・パラメータ
NLS_LANGUAGEおよびNLS_TERRITORYで定義された)言語設定に従います。この
ため、Oracleの言語および地域名は、Javaロケール名にマッピングされます。また、
Java VMのデフォルトのコード化は、データベース・キャラクタ・セットに従います。
3. loadjavaユーティリティは、JDKがサポートするコード化処理によりコード化された JavaおよびSQLJソース・ファイルのロードをサポートします。JavaまたはSQLJプロ グラムの内容は、データベース・キャラクタ・セットで制約されません。また、プログ ラム・ファイルのUnicodeエスケープ・シークエンスもサポートされます。
CORBA および および および および EJB
VisigenicのCORBA Object Request Broker(ORB)をデータベース・サーバーに統合する
と、IIOPプロトコルを実行するJava CORBAオブジェクトおよびEJBサーバーになります。
また、CORBAサポートには、CORBAオブジェクトのデータベースへの配置を可能にする サポート・サービスのセットが含まれます。OracleのCORBAサポートの詳細は、『Oracle8 Database Programming with Java』を参照してください。
CORBAおよびEJB
Oracle8iでは、CORBAオブジェクト名を指定するために、CosNaming標準をインプリメン
トしています。CosNamingは、バインド名のコンテキストであるディレクトリに似た構造
でCORBAオブジェクトを表します。新しいJNDI URLのsess_iiop:が作成され、CORBA
オブジェクトにセッション・ベースのIIOP接続を指定します。ローカル・データベースで
CORBAオブジェクトの名前は、次のように公開されます。
sess_iiop://local:2222:ORCL/Demo/MyGreeting
2222はIIOPリクエストを受け取るポート番号、ORCLはデータベース・インスタンス識別 子、/Demo/MyGreetingは公開済オブジェクトの名前です。Oracle8iのCORBAオブジェ クトの名前領域は、US7ASCII文字に制限されています。
図6-6に、CORBA環境のコンポーネントを示します。
図 図図
図6-6 CORBAをサポートするコンポーネントをサポートするコンポーネントをサポートするコンポーネントをサポートするコンポーネント
CORBA ORB オブジェクト・
アダプタ
JDBC KPRB
Java VM IIOP
Java CORBAクライアント
ブラウザ Greeting=
lookup("/Demo/MyGreeting");
Greeting.Hello('Oracle');
Greeting.jar
IIOPインタプリタ ORB
Oracle8i /Demo/MyGreeting
PublishedObject GreetingImpl publish
loadjava
GreetingImpl LoginServer PublishContext GreetingImpl用 PublishedObject
CORBAおよびEJB
Java CORBA オブジェクト オブジェクト オブジェクト オブジェクト
Oracle8iのCORBAオブジェクトは、Javaでのみ記述することができ、データベースのJava
VM上で実行できます。CORBAクライアントは、標準サポートされたどの言語でも記述で きます。CORBAオブジェクトを識別するインタフェース定義言語(IDL)ファイルおよび そのインタフェースは、idl2javaトランスレータによりコンパイルされ、クライアントのス タブおよびCORBAサーバー・オブジェクトのスケルトン・コードを生成します。CORBA オブジェクトのプログラムを作成する場合は、生成されたスケルトン・クラスを拡張し、ス ケルトン・コードとともにデータベースにロードすることで、JavaのIDLで定義された
CORBAオブジェクトの実装クラスをプログラミングする必要があります。
Greeting.idl
Module Demo {
interface Greeting {
wstring Hello(string str);
};
};
>idl2java Greeting.IDL Creating:
Demo/Greeting.java Demo/GreetingHolder.java Demo/GreetingHelper.java Demo/_GreetingImpBase.java
GreetingImpl.java
public class GreetingImpl extends _GreetingImplBase implements ActivatableObject {
public GreetingImpl (String name) {
super(name);
}
public GreetingImpl() {
super();
}
public org.omg.CORBA.Object _intializeAuroraObject() {
return this }
CORBAおよびEJB
public String Hello(String str) {
return "Hello" + str;
} }
前述のコードでは、CORBAオブジェクトGreetingは、Hello()メソッドとともにイン プリメントされています。CORBA標準では、CORBA/IIOPを経由してマルチバイト文字列 を渡すためにwstringデータ型を定義しており、Visigenic ORBはwstringデータ型を
Unicode文字列としてインプリメントしています。wstringではなくstringデータ型が
指定された場合は、Hello()メソッドに渡すパラメータはシングルバイトにする必要があ ります。wstringデータ型を指定すると、多言語CORBAオブジェクトの開発ができます。
Greetingの実装クラスは、idl2javaにより生成されたスケルトン・クラス _GreetingImplBaseを拡張します。
CORBAオブジェクトがインプリメントされた後は、次の例に示す手順で、Javaオブジェク
トの実装クラスをデータベースにロードし、CosNaming規則を使用してJava CORBAオブ ジェクトを公開します。
loadjava -user scott/tiger -grant public Greeting.jar publish -user scott -password tiger -service
sess_iiop://local:2222:orcl/Demo/MyGreeting Demo.GreetingImpl Demo.GreetingHelper
この例では、すべてのJavaクラス(実装クラスおよびヘルパー・クラス)が、
Greeting.jarファイルのGreetingオブジェクトをインプリメントする必要があると仮 定しています。これらは、データベースにpublicとしてロードされ、実装クラスはデータ ベースに公開されています。公開済オブジェクトの名前は/Demo/MyGreetingで、クライ アント・コードからこのCORBAオブジェクトを参照する場合に使用されます。
Java CORBA クライアント クライアント クライアント クライアント
データベースのCORBAオブジェクトにアクセスするクライアントには、ORBおよびオブ ジェクトが格納されたデータベースの認証が必要です。次に、Greetingオブジェクトにア クセスするJavaのクライアント・コードの一部を示します。ORBは、OracleのJNDL実装
によりCORBAオブジェクトが最初にアクティブにされたとき、初期化されます。
import java.util.Hashtable;
import javax.naming.*;
import oracle.aurora.jndi.sess_iiop.ServiceCtx;
public class Client {
public static void main(String args[]) throws Exception {
Hashtable environment = new Hashtable();
CORBAおよびEJB
environment.put(javax.naming.Context.URL_PKG_PREFIXES, "oracle.aurora.jndi");
environment.put(Context.SECURITY_PRINCIPAL, "scott");
environment.put(Context.SECURITY_CREDENTIALS, "tiger");
environment.put(Context.SECURITY_AUTHENTICATION, ServiceCtx.NON_SSL_CREDENTIAL);
Context ic = new InitialContext(environment);
Greeting greet = (Greeting)
ic.lookup("sess_iiop://local:2222:ORCL/Demo/MyGreeting");
System.out.println(greet.Hello(arg[0]));
} }
データベースは保護環境なので、JavaクライアントはCORBAオブジェクトにアクセスする 前に認証される必要があります。また、CORBAオブジェクトを実行するJava VMのロケー ルは、オブジェクトを実行するセッションが認証されたとき初期化されます。CORBAオブ ジェクトにアクセスするために、ユーザーは明示的または暗黙的な認証を使用できます。
1. 暗黙的な認証暗黙的な認証 - クライアントは、サービス・コンテキスト・オブジェクトを、前述の暗黙的な認証暗黙的な認証 コードで示したユーザー名およびパスワードで初期化することができます。クライアン
トJava VMのデフォルト・ロケールは、暗黙的にサービス・コンテキスト・オブジェク
トに格納され、最初のIIOP要求でサーバーORBに渡されます。サーバーのJava VM ロケールは、クライアントと同じロケールで初期化されます。
2. 明示的な認証明示的な認証 - クライアントは、Login明示的な認証明示的な認証 オブジェクトのauthenticate()メソッドを コールして、サーバーのLoginServer CORBAオブジェクトにアクセスできます。
LoginServerオブジェクトは、認証なしでアクセスできます。authenticate()メ ソッドは、ユーザー名、パスワード、ロールおよびJavaロケールを引数として受け取 ります。Javaロケール引数が指定されない場合、サーバーのJava VMのデフォルト・
ロケールは、データベース・パラメータNLS_LANGUAGEおよびNLS_TERRITORY で定義されるデータベース言語で初期化されます。