Interstage Application Server アプリケーション作成ガイド (コンポーネントトランザクションサービス編) |
目次
索引
![]() ![]() |
第1章 分散アプリケーションを作成するための基礎知識 |
トランザクションアプリケーションを作成する上で、注意すべき点があります。これら作成上の誤りによりInterstageが動作不良となります。
下記に記す機能を使用して、これらの問題回避または検証を行うことをお勧めします。
クライアントアプリケーションを作成する際に、IDL定義をIDLコンパイラでコンパイルすることによりスタブファイルを生成します。また、CORBA通信を可能とするために、トランザクションアプリケーションが動作するサーバが参照するインタフェースリポジトリにインタフェース情報を登録します。
このとき使用するIDL定義は本来同じものを使用しなければなりません。
しかし、下記のような場合、これらの関係に差異が生じることがあります。
上記条件でクライアントから処理要求を行うと、Interstageが下記の現象により動作不良となります。
これを回避するため、Interstageではインタフェース情報チェック機能を提供します。
インタフェース情報チェック機能については、“OLTPサーバ運用ガイド”の“インタフェース情報チェック機能を使用した運用”を参照してください。
クライアントアプリケーションからサーバアプリケーションへ、またはサーバアプリケーションからクライアントアプリケーションへ処理要求を行った場合に、IDL定義に文字列型で定義をしたデータが途切れることがあります。
これは文字列型と定義されているデータに0x00が含まれているために、Interstageのデータ解析処理が、0x00を終端文字と認識することにより、以降のデータを不要と判断して切り捨てるために発生します。
本現象が発生した場合には、スナップショットでデータを確認するなどし、アプリケーションを修正してください。
本現象となる処理イメージ図とプログラム例を以下に示します。
上記の理由より、データの切り捨てが発生した場合には、IDL定義にて文字列型で定義するのではなく、構造体型として各データ項目を定義するなどし、現象を回避してください。
サーバアプリケーション間連携時には、以下の処理が考えられます。
中継アプリケーションは、クライアントとなるCORBAアプリケーションからはトランザクションアプリケーションとして、中継先のトランザクションアプリケーションからはCORBAアプリケーションとして位置づけられます。
このとき、クライアントからのデータを受信したデータは、コンポーネントトランザクションサービスが管理する領域に格納されます。このデータをサーバアプリケーションへ通知する場合には、CORBAサービスが管理する領域に一度複写する必要があります。
これを行わずコンポーネントトランザクションサービスが管理する領域を、CORBAサービスのリクエストのパラメタに設定すると、以下の現象が発生します。
下図に示すように、連携用サーバアプリケーションは、トランザクションアプリケーションとCORBAアプリケーションから構成されます。これらは同一オブジェクト上で動作しますが、トランザクションアプリケーション論理で獲得した領域(A)を、CORBAアプリケーションで発行するオペレーション(OP2)のパラメタに指定することはできません。必ずCORBAアプリケーション論理で獲得した領域(B)に複写し、オペレーションのパラメタに指定してください。
プロセスバインド機能では、セション開始要求を受け取ったサーバアプリケーションプロセスに、そのセションIDに対する処理がバインドされます。通常、セション開始要求は、ワークユニット内で最後に要求待ちとなったサーバアプリケーションプロセスに振り分けられます。そのため、クライアントからの要求数が少ない場合、すべてのクライアントが特定のプロセスにバインドされ、その結果、1プロセスにセションが集中して性能劣化を引き起こすことがあります。
これを回避するためには、“セション開始要求(初回呼び出し)のプロセスへの振り分け方式”を参照してください。
目次
索引
![]() ![]() |