WebSphere Application Server Network Deployment, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

スレッド化のヒント

ActiveX から Enterprise JavaBeans (EJB) へのブリッジは、 フリー・スレッド・アクセスとアパートメント・スレッド・アクセスの両方をサポートし、 フリー・スレッド・マーシャラーをインプリメントして、 Active Server Pages (ASP) などのハイブリッドな環境で使用できるようにします。 ActiveX プロセスで作成された各スレッドは、 スレッドが ActiveX から EJB へのブリッジを介して通信するときに、 Java 環境でミラーリングされます。

Java オブジェクト (JObjectProxy オブジェクトや JClassProxy オブジェクトはありません) へのすべての参照が ActiveX スレ ッドにロードされると、ActiveX から EJB へのブリッジは、Java 仮想マシ ン (JVM) コードからスレッドを切り離します。 したがって、マルチスレッド Windows アプリケーションからアクセスする Java コードは、 すべてスレッド・セーフであることに注意する必要があります。 Visual Basic コードおよび VBScript アプリケーションは両方とも、基本的に単一スレッドです。 したがって、Visual Basic および VBScript アプリケーションでは、 Java プログラムへのアクセスに関するスレッド化の問題はありません。 Active Server Pages およびマルチスレッド C/C++ プログラムでは、問題が発生する可能性があります。

次のシナリオを考えてみます。
  1. マルチスレッド Windows 自動化コンテナー (ここでの ActiveX プロセス) が始動します。 このコンテナーはスレッド A にあります。
  2. ActiveX プロセスが ActiveX から EJB へのブリッジを初期化し、 それにより JVM コードが始動します。 JVM は同じスレッドに接続され、内部ではスレッド 1 と呼ばれます。
  3. ActiveX プロセスが 2 つのスレッド (B および C) を開始します。
  4. ActiveX 内のスレッド B は、ActiveX から EJB へのブリッジを使用して、 スレッド A に作成されたオブジェクトにアクセスします。 JVM はスレッド B に接続し、このスレッドはスレッド 2 と呼ばれます。
  5. ActiveX プロセスにおけるスレッド C は、JVM コードとは通信しないので、 JVM をそのスレッドに接続する必要はありません。 これは、JVM コードが ActiveX スレッドと Java スレッドの間で 1 対 1 の関係を持たない場合です。
  6. スレッド B は、使用したすべての JObjectProxy オブジェクトと JClassProxy オブジェクトを後で解放します。 Java スレッド 2 は切り離されます。
  7. スレッド B は、再度 ActiveX から EJB へのブリッジを使用して、 スレッド A に作成されたオブジェクトにアクセスします。 JVM コードは再びスレッドに接続し、このスレッドはスレッド 3 と呼ばれます。
ActiveX プロセス ActiveX プロセスによる JVM アクセス
スレッド A - 1 で作成 スレッド 1 - 2 で接続
スレッド B - 4 で作成 スレッド 2 - 4 で接続、6 で切り離し、スレッド 3 - 7 で接続
スレッド C - 4 で作成  

スレッドおよび Active Server Pages

Microsoft のインターネット情報サーバーにおける Active Server Pages (ASP) は、 マルチスレッド環境です。 XJB.JClassFactory オブジェクトを作成したら、 それをアプリケーション・グローバル・オブジェクトとしてアプリケーション・コレクションに保管することができます。 ASP 環境内のすべてのスレッドは、 同じ ActiveX から EJB へのブリッジ・オブジェクトにアクセスできるようになりました。 Active Server Pages は、 デフォルトで CPU 当たりの ASP プロセスごとに 10 のアパートメント・スレッドを作成します。 これは、ActiveX から EJB へのブリッジ・オブジェクトが初期化されると、 このオブジェクトを、オブジェクトを作成したスレッドだけではなく、 10 のスレッドすべてが呼び出せるということを意味します。

単一アパートメント動作をシミュレートする必要がある場合は、 Visual Basic コードで単一アパートメント・スレッドの ActiveX ダイナミック・リンク・ライブラリー (DLL) を作成して、 ActiveX から EJB へのブリッジ・オブジェクトをカプセル化します。 これにより、JVM オブジェクトへのすべてのアクセスが、必ず同じスレッドで行われるようになります。 <OBJECT> タグを使用して、XJB.JClassFactory をアプリケーション・オブジェクトに割り当てる必要があり、 さらに、単一スレッド化動作を Web アプリケーションに導入した場合の結果を認識している必要があります。

Microsoft 知識ベースには、 以下を含め、ASP とそのスレッドについての項目がいくつかあります。
  • Q243543 INFO: Do Not Store STA Objects in Session or Application
  • Q243544 INFO: Component Threading Model Summary Under Active Server Pages
  • Q243548 INFO: Design Guidelines for VB Components Under ASP



関連タスク
ActiveX アプリケーション・クライアント・コードの開発
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 10:13:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rcli_xthread.html