スタンドアロン クライアント プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

Java EE アプリケーション クライアント (シン クライアント) の開発

Java EE アプリケーション クライアントはクライアント マシン上で実行され、マークアップ言語で得られるよりも高度なユーザ インタフェースを実現できます。アプリケーション クライアントはビジネス層で実行されているエンタープライズ Bean に直接アクセスし、必要に応じて Web 層で実行されているサーブレットと HTTP を介して通信します。一般に、アプリケーション クライアントはサーバからダウンロードされますが、クライアント マシン上にインストールすることもできます。

以下の節では、Java EE クライアントの開発について説明します。

 


Java EE アプリケーション クライアントの概要

Java EE アプリケーション クライアント (シン クライアント) は Java アプリケーションですが、Java EE コンポーネントであるため、スタンドアロンの Java アプリケーション クライアントとは異なります。したがって、他の Java EE 準拠のサーバへ移植できるという利点があり、Java EE サービスにアクセスできます。

以下の 2 つのアプリケーション クライアント JAR ファイルが用意されています。

これらのアプリケーション クライアント JAR ファイルは、WebLogic Server のインストール ディレクトリの WL_HOME/server/lib サブディレクトリに格納されています。

シン クライアントでは、RMI-IIOP プロトコル スタックを使用し、J2SE 1.4 の機能を活用します。また、JDK ORB のサポートも必要とします。RMI リクエストの作成は基本的に JDK で処理されるため、非常に小さいクライアントを実現できます。クライアントサイドの開発は、WebLogic Server API ではなく標準の Java EE API を使用して実行されます。

シン クライアント アプリケーションの開発プロセスは、他の Java EE アプリケーションにおけるプロセスと同じです。クライアントでは InitialContext、UserTransaction、EJB などの標準 Java EE アーティファクトを活用できます。WebLogic Server シン クライアントでは、URL のプロトコル部分の値として IIOP、IIOPS、HTTP、HTTPS、T3、および T3S がサポートされています。それぞれ、InitialContext で異なる URL を使うことで選択できます。URL に関係なく、IIOP は必ず使用されます。URL に T3 を指定すると IIOP が使用され、T3S を指定すると IIOPS が使用されます。HTTP は IIOP 上を、HTTPS は IIOPS 上をトンネリングされます。

サーバサイド コンポーネントは、通常の方法でデプロイされます。クライアント スタブは、デプロイ時または実行時に生成できます。デプロイ時にスタブを生成するには、-iiop および -basicClientJar オプションを付けて appc を実行し、シン クライアントでの使用に適したクライアント jar を作成します。この手順を実行しない場合、WebLogic Server で必要に応じて実行時にスタブが生成され、クライアントに提供されます。クライアントでスタブをダウンロードするには、適切なセキュリティ マネージャがインストールされている必要があります。シン クライアントでは、デフォルトで軽量セキュリティ マネージャが提供されます。強固なセキュリティが必要な場合は、コマンドライン オプションの -Djava.security.manager -Djava.security.policy==policyfile を使用して、別のセキュリティ マネージャをインストールできます。アプレットでは、スタブのダウンロードを可能にする別のセキュリティ マネージャが使用されます。

シン クライアント JAR では、wlfullclient.jar の一部のクラスが置き換えられています。完全 jar とシン クライアント jar の両方を CLASSPATH に指定する場合は、シン クライアント jar がパス内で先になるようにします。ただし、シン クライアントのサポートに wlfullclient.jar は必須ではありません。必要な場合は、次の構文を使用して明示的に CLASSPATH を指定して実行できます。

java -classpath "<WL_HOME>/lib/wlclient.jar;<CLIENT_CLASSES>" your.app.Main

注意 : wljmsclient.jarwlclient.jar を参照するので、クライアント CLASSPATH にはどちらか一方の jar を指定するだけでかまいません。wljmsclient.jar をサーバサイドの CLASSPATH に指定しないでください。

シン クライアント jar には、javax.ejb などの必要な Java EE インタフェース クラスが格納されるので、その他の jar ファイルはクライアントには必要ありません。

 


シン クライアントの開発方法

シン クライアントを開発するには、以下の手順に従います。

  1. リモート オブジェクトのパブリック メソッドを、java.rmi.Remote を拡張するインタフェースに定義します。
  2. このリモート インタフェースには、コードをあまり記述する必要がない場合もあります。必要なのは、リモート クラスで実装するメソッドのメソッド シグネチャだけです。次に例を示します。

    public interface Pinger extends java.rmi.Remote {
    public void ping() throws java.rmi.RemoteException;
    public void pingRemote() throws java.rmi.RemoteException;
    public void pingCallback(Pinger toPing) throws java.rmi.RemoteException;
    }
  3. interfaceNameImpl というクラスにインタフェースを実装し、それを JNDI ツリー内にバインドしてクライアントから利用できるようにします。
  4. このクラスには、記述済みのリモート インタフェースを実装する必要があります。これにより、インタフェースに含まれるメソッド シグネチャを実装したことになります。すべてのコード生成はこのクラス ファイルに依存します。通常は、実装クラスを WebLogic 起動クラスとしてコンフィグレーションし、そのオブジェクトを JNDI ツリー内にバインドする main メソッドをインクルードします。以下に、上記の Ping のサンプルを基に開発した実装クラスからの抜粋を示します。

    public static void main(String args[]) throws Exception {
      if (args.length > 0)
      remoteDomain = args[0];
      Pinger obj = new PingImpl();
      Context initialNamingContext = new InitialContext();
      initialNamingContext.rebind(NAME,obj);
      System.out.println("PingImpl created and bound to "+ NAME);
    }
  5. リモート インタフェースと実装クラスを Java コンパイラでコンパイルします。RMI-IIOP アプリケーションでのこれらのクラスの開発は、通常の RMI での開発と同じです。RMI オブジェクトの開発の詳細については、「WebLogic RMI について」を参照してください。
  6. 実装クラスに対して WebLogic RMI または EJB コンパイラを実行して、必要な IIOP スタブを生成します。
  7. 注意 : スタブをダウンロードする場合は、rmic を実行する必要はありません。
    $ java weblogic.rmic -iiop nameOfImplementationClass

    デプロイ時にスタブを生成するには、-iiop および -clientJar オプションを付けて appc を実行し、シン クライアントでの使用に適したクライアント JAR を作成します。この手順を実行しない場合、WebLogic Server で必要に応じて実行時にスタブが生成され、クライアントに提供されます。

    スタブはリモート オブジェクト用のクライアントサイド プロキシで、個々の WebLogic RMI 呼び出しを対応するサーバサイド スケルトンに転送します。続いてサーバサイド スケルトンが、その呼び出しを実際のリモート オブジェクト実装に転送します。

  8. ここまでで作成したファイル、すなわち、リモート インタフェース、それを実装するクラス、およびスタブが WebLogic Server の CLASSPATH に含まれていることを確かめます。
  9. 初期コンテキストを取得します。
  10. RMI クライアントでは、初期コンテキストを作成しリモート オブジェクトをルックアップして (次のステップを参照)、そのオブジェクトにアクセスします。続いて、このオブジェクトが適切な型にキャストされます。

    初期コンテキストの取得では、JNDI コンテキスト ファクトリを定義する際に weblogic.jndi.WLInitialContextFactory を使用する必要があります。新しい InitialContext() にパラメータとして渡す「Context.INITIAL_CONTEXT_FACTORY」プロパティの値を設定する際には、このクラスを使用します。

  11. javax.rmi.PortableRemoteObject.narrow() メソッドと組み合わせてルックアップを実行するように、クライアントのコードを修正します。
  12. RMI over IIOP RMI クライアントが通常の RMI クライアントと異なるのは、初期コンテキストを取得する際にプロトコルとして IIOP が定義されるという点です。このため、ルックアップとキャストは、javax.rmi.PortableRemoteObject.narrow() メソッドと組み合わせて行われます。たとえば RMI クライアントは、初期コンテキストを作成し、EJBean ホームをルックアップして EJBean への参照を取得し、EJBean 上でメソッドを呼び出します。

    通常ならオブジェクトを特定のクラス型へキャストするような状況ではすべて、javax.rmi.PortableRemoteObject.narrow() メソッドを使用する必要があります。CORBA クライアントからは、リモート インタフェースを実装しないオブジェクトが返されることがあります。そのため、リモート インタフェースを実装するようオブジェクトを変換するために ORB から narrow メソッドが提供されます。たとえば、EJBean ホームをルックアップして、その結果を Home オブジェクトにキャストするクライアント コードは、以下に示すように、javax.rmi.PortableRemoteObject.narrow() を使用するように修正する必要があります。

    ルックアップの実行 :
    .
    .
    .
    /**
     * RMI/IIOP クライアントではこの narrow 関数を使用する必要がある
     */
    private Object narrow(Object ref, Class c) {
      return PortableRemoteObject.narrow(ref, c);
    }
    /**
     * JNDI ツリーで EJB ホームをルックアップ
     */
    private TraderHome lookupHome()
      throws NamingException
    {
      // JNDI を使用して Bean ホームをルックアップ
      Context ctx = getInitialContext();
      try {
    Object home = ctx.lookup(JNDI_NAME);
    return (TraderHome) narrow(home, TraderHome.class);
    } catch (NamingException ne) {
    log("The client was unable to lookup the EJBHome. Please
    make sure ");
    log("that you have deployed the ejb with the JNDI name
    "+JNDI_NAME+" on the WebLogic server at "+url);
    throw ne;
      }
    }
    /**
     * JDK1.3 以降のクライアントでは、次のように Properties オブジェクトを使用すると
     * 機能する
     */
    private Context getInitialContext() throws NamingException {
      try {
    // InitialContext を取得
    Properties h = new Properties();
    h.put(Context.INITIAL_CONTEXT_FACTORY,
    "weblogic.jndi.WLInitialContextFactory");
    h.put(Context.PROVIDER_URL, url);
    return new InitialContext(h);
      } catch (NamingException ne) {
    log("We were unable to get a connection to the WebLogic
    server at "+url);
    log("Please make sure that the server is running.");
    throw ne;
      }
    }
    .
    .
    .

    url では、プロトコル、ホスト名、WebLogic Server インスタンス用のリスン ポートを定義し、それらがコマンドライン引数として渡されます。

    public static void main(String[] args) throws Exception {
      log("\nBeginning statelessSession.Client...\n");
      String url = "iiop://localhost:7001";
  13. 次のようなコマンドでクライアントを実行することで、IIOP を通じてクライアントをサーバに接続します。
  14. $ java -Djava.security.manager -Djava.security.policy=java.policy    examples.iiop.ejb.stateless.rmiclient.Client iiop://localhost:7001

 


Java EE クライアント アプリケーション モジュールの使用

Java EE では、クライアント アプリケーション コード (クライアント モジュール) の標準を EAR ファイルで指定します。これにより、アプリケーションのクライアントサイドを他のモジュールとともにパッケージ化したアプリケーションを作成できます。

クライアント モジュールは、EAR の META-INF/application.xml ファイルで <java> タグを使用して宣言します。詳細については、『WebLogic Server アプリケーションの開発』の「エンタープライズ アプリケーションのデプロイメント記述子の要素」を参照してください。

注意 : <java> タグを、サーバサイド モジュールで使用できる Java コードの宣言と混同しないよう注意してください。この <java> タグは、サーバサイド コンテナの外で実行するクライアントサイド コードを宣言するために使用します。

クライアント モジュールは、基本的には META-INF/application-client.xml という特別なデプロイメント記述子を含む JAR ファイルです。このクライアント JAR ファイルの META-INF/MANIFEST.MF ファイルには、プログラムのエントリ ポイントを指定する Main-Class エントリも含まれます。application-client.xml ファイルの詳細については、「クライアント アプリケーションのデプロイメント記述子の要素」を参照してください。

クライアント アプリケーションの展開

WebLogic Server は、クライアント モジュールの使用を容易にするためのユーティリティを備えています。このようなユーティリティには以下の 2 つがあります。

Java EE EAR ファイルからクライアントサイド JAR ファイルを展開して、デプロイ可能な JAR ファイルを作成するには、weblogic.ClientDeployer ユーティリティを使用します。weblogic.ClientDeployer クラスは、Java コマンドラインで次の構文を使用して実行します。

java weblogic.ClientDeployer ear-file client1 [client2 client3 ...]

ear-file 引数は、拡張子 .ear を持つ Java アーカイブ ファイルか、1 つまたは複数のクライアント アプリケーション JAR ファイルが格納されている展開されたディレクトリです。

client 引数には、展開するクライアントを指定します。weblogic.ClientDeployer ユーティリティは、ここに指定したクライアントごとに、指定した名前の JAR ファイル (拡張子 .jar を含む) を EAR ファイル内から検索します。

次に、コマンドの例を示します。

java weblogic.ClientDeployer app.ear myclient

このコマンドでは、app.ear から myclient.jar が展開されます。weblogic.ClientDeployer ユーティリティでは、展開時に他の 2 つの操作も実行されます。

注意 : モジュールの META-INF/application-client.xml デプロイメント記述子のエントリのバインディングを定義するには、クライアント プログラムの <client>.runtime.xml 記述子を作成します。

クライアント アプリケーションの実行

EAR ファイルからクライアントサイドの JAR ファイルを展開したら、weblogic.j2eeclient.Main ユーティリティを使用してクライアントサイド アプリケーションをブートストラップし、次のコマンドを使用して WebLogic Server インスタンスを指すようにします。

java weblogic.j2eeclient.Main clientjar URL [application args]

次に例を示します。

java weblogic.j2eeclient.Main myclient.jar t3://localhost:7001

weblogic.j2eeclient.Main ユーティリティによって、クライアント コード内の java:comp/env からアクセス可能なコンポーネント環境が作成されます。

application-client.xml 記述子に記述されているリソースが以下のいずれかに該当する場合、あらかじめ myclient.runtime.xml ファイルに指定された情報に基づいて、サーバのグローバル JNDI ツリーから java:comp/env へのバインドが試行されます。

ユーザ トランザクションは、java:comp/UserTransaction にバインドされます。

application.xml デプロイメント記述子の <res-auth> タグは、現時点では無視され、application と入力されます。現時点では、フォームベースの認証はサポートされていません。

残りのクライアント環境は、weblogic.ClientDeployer ユーティリティによって作成された weblogic-application-client.xml ファイルからバインドされます。

バインディングが見つからない場合や不完全な場合は、weblogic.j2eeclient.Main クラスからエラー メッセージが出力されます。

環境が初期化されると、weblogic.j2eeclient.Main ユーティリティが Main-Class エントリの JAR クライアントの JAR マニフェストを検索します。このクラスの main メソッドを呼び出すと、クライアント プログラムが起動します。URL 引数の後ろで weblogic.j2eeclient.Main ユーティリティに渡したすべての引数は、クライアント アプリケーションに渡されます。

アプリケーション用に作成した Java クラス、およびそのアプリケーションが依存するすべての Java クラス (WebLogic Server クラスを含む) は、クライアント JVM から使用できるようにしておく必要があります。クライアント アプリケーションをステージするには、クライアントで必要とするすべてのファイルを特定のディレクトリにコピーし、そのディレクトリを JAR ファイルにバンドルします。クライアント アプリケーション ディレクトリの最上位には、アプリケーションを起動するためのバッチ ファイルやスクリプトを格納できます。Java クラスと JAR ファイルを保持するクラスまたはサブディレクトリを作成し、起動スクリプトのクライアント クラスパスに追加します。

Java クライアント アプリケーションに JRE (Java Runtime Environment) をパッケージ化することもできます。

注意 : クライアント モジュール JAR で使用するクラスパス マニフェスト エントリは移植できません。これは、Java EE 標準で未対応であるためです。

 


プロトコルの互換性

次の表に、WebLogic Server シン クライアント間の相互運用性を示します。

表 4-1 シン クライアントの相互運用性
WebLogic Server のバージョン
シン クライアントのバージョン
WebLogic Server 8.1 (JDK 1.4)
WebLogic Server 9.x (JDK 1.5)
WebLogic Server 10.0 (JDK 1.5)
WebLogic Server 8.1 wlclient.jar (JDK 1.4)

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

WebLogic Server 8.1 wljmsclient.jar (JDK 1.4)

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

WebLogic Server 9.x wlclient.jar (JDK 1.5)

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

WebLogic Server 9.x wljmsclient.jar (JDK 1.5)

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

WebLogic Server 10.0 wlclient.jar (JDK 1.5)

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

WebLogic Server 10.0 wljmsclient.jar (JDK 1.5)

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS

IIOP、

IIOPS、

HTTP、

HTTPS


ページの先頭       前  次