スタンドアロン クライアント プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
J2EE アプリケーション クライアントはクライアント マシン上で実行され、マークアップ言語で得られるよりも高度なユーザ インタフェースを実現できます。アプリケーション クライアントはビジネス層で実行されているエンタープライズ Bean に直接アクセスし、必要に応じて Web 層で実行されているサーブレットと HTTP を介して通信します。一般に、アプリケーション クライアントはサーバからダウンロードされますが、クライアント マシン上にインストールすることもできます。
以下の節では、J2EE クライアントの開発について説明します。
J2EE アプリケーション クライアント (シン クライアント) は Java アプリケーションですが、J2EE コンポーネントであるため、スタンドアロンの Java アプリケーション クライアントとは異なります。したがって、他の J2EE 準拠のサーバへ移植できるという利点があり、J2EE サービスにアクセスできます。
以下の 2 つのアプリケーション クライアント JAR ファイルが用意されています。
wlclient.jar
)。「シン クライアントの開発方法」を参照してください。wljmsclient.jar
)。これを wlclient.jar
とともにデプロイすることで、J2EE 機能と WebLogic JMS 機能を提供します。「WebLogic JMS シン クライアント」を参照してください。これらのアプリケーション クライアント JAR ファイルは、WebLogic Server のインストール ディレクトリの WL_HOME/server/lib
サブディレクトリに格納されています。
シン クライアントでは、RMI-IIOP プロトコル スタックを使用し、J2SE 1.4 の機能を活用します。また、JDK ORB のサポートも必要とします。RMI リクエストの作成は基本的に JDK で処理されるため、非常に小さいクライアントを実現できます。クライアントサイドの開発は、WebLogic Server API ではなく標準の J2EE API を使用して実行されます。
シン クライアント アプリケーションの開発プロセスは、他の J2EE アプリケーションを開発する場合と同じです。クライアントでは InitialContext、UserTransaction、EJB などの標準 J2EE アーティファクトを活用できます。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 では、weblogic.jar
の一部のクラスが置き換えられています。完全 jar とシン クライアント jar の両方を CLASSPATH に指定する場合は、シン クライアント jar がパス内で先になるようにします。ただし、シン クライアントのサポートに weblogic.jar
は必須ではありません。必要な場合は、次の構文を使用して明示的に CLASSPATH を指定して実行できます。
java -classpath "<WL_HOME>/lib/wlclient.jar;<CLIENT_CLASSES>" your.app.Main
注意 : wljmsclient.jar
は wlclient.jar
を参照するので、クライアント CLASSPATH にはどちらか一方の jar を指定するだけでかまいません。wljmsclient.jar
をサーバサイドの CLASSPATH に指定しないでください。
シン クライアント jar には、javax.ejb
などの必要な J2EE インタフェース クラスが格納されるので、その他の jar ファイルはクライアントには必要ありません。
このリモート インタフェースには、コードをあまり記述する必要がない場合もあります。必要なのは、リモート クラスで実装するメソッドのメソッド シグネチャだけです。次に例を示します。
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;
}
このクラスには、記述済みのリモート インタフェースを実装する必要があります。これにより、インタフェースに含まれるメソッド シグネチャを実装したことになります。すべてのコード生成はこのクラス ファイルに依存します。通常は、実装クラスを 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);
}
注意 : スタブをダウンロードする場合は、rmic
を実行する必要はありません。
$ java weblogic.rmic -iiop nameOfImplementationClass
RMI クライアントでは、初期コンテキストを作成しリモート オブジェクトをルックアップして (次のステップを参照)、オブジェクトにアクセスします。続いて、このオブジェクトが適切な型にキャストされます。
初期コンテキストの取得では、JNDI コンテキスト ファクトリを定義する際に weblogic.jndi.WLInitialContextFactory
を使用する必要があります。新しい InitialContext()
にパラメータとして渡す「Context.INITIAL_CONTEXT_FACTORY
」プロパティの値を設定する際には、このクラスを使用します。
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";
$ java -Djava.security.manager -Djava.security.policy=java.policy examples.iiop.ejb.stateless.rmiclient.Client iiop://localhost:7001
J2EE では、クライアント アプリケーション コード (クライアント モジュール) の標準を 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 つがあります。
J2EE 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 ユーティリティによって作成された client.properties ファイルからバインドされます。
バインディングが見つからない場合や不完全な場合は、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 で使用するクラスパス マニフェスト エントリは移植できません。これは、J2EE 標準で未対応であるためです。
次の表に、WebLogic Server 9.X シン クライアントと WebLogic Server 8.1 シン クライアントの間の相互運用性を示します。
![]() ![]() |
![]() |
![]() |