ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(コンポーネントトランザクションサービス編)
FUJITSU Software

1.3 トランザクションアプリケーション作成上の注意点

  トランザクションアプリケーションを作成する上で、注意すべき点があります。これら作成上の誤りによりInterstageまたはアプリケーションが動作不良となることがあります。


  以下の機能を使用して、これらの問題回避または検証を行うことをお勧めします。


1) データ領域の獲得/解放について

  以下のデータ型を使用する場合は、各データ型に応じた専用の関数により領域獲得を行う必要があります。専用の関数で獲得していない場合は、アプリケーション動作時にメモリアクセスエラーを引き起こす要因となります。また、クライアントおよびスタブ内で動的に獲得した領域は、不要になった時点で各データ型に応じた解放関数により、明示的な解放操作が基本的に必要です。解放漏れの場合、アプリケーションプロセスでのメモリリークの要因となります。



2) シグナルについて

トランザクションアプリケーションでは、シグナル処理を使用できません。

シグナルを受信した場合、アプリプロセスの異常終了などの誤動作となる可能性があります。なお、明にシグナル処理を行わない場合でも、使用する連携製品のライブラリなどでシグナル処理を行う可能性があるため、注意してください。


3) コンパイルとリンクついて

4) インタフェース情報が異なる場合に動作不良となる

  クライアントアプリケーションを作成する際に、IDLコンパイラでIDL定義をコンパイルすることによりスタブファイルを生成します。また、CORBA通信を可能とするために、トランザクションアプリケーションが動作するサーバが参照するインタフェースリポジトリにインタフェース情報を登録します。
  このとき使用するIDL定義は、本来同じものを使用しなければなりません。
  しかし、下記のような場合、これらの関係に差異が生じることがあります。


  上記条件でクライアントから処理要求を行うと、Interstageが下記の現象により動作不良となります。


  これを回避するため、Interstageではインタフェース情報チェック機能を提供します。
  インタフェース情報チェック機能については、“OLTPサーバ運用ガイド”の“インタフェース情報チェック機能を使用した運用”を参照してください。



5) アプリケーションで受信した文字列型データが不完全となる

  クライアントアプリケーションからサーバアプリケーションへ、またはサーバアプリケーションからクライアントアプリケーションへ処理要求を行った場合に、IDL定義に文字列型で定義をしたデータが途切れることがあります。
  これは文字列型と定義されているデータに0x00が含まれているために、Interstageのデータ解析処理が、0x00を終端文字と認識することにより、以降のデータを不要と判断して切り捨てるために発生します。
  本現象が発生した場合は、スナップショットでデータを確認するなどして、アプリケーションを修正してください。

  本現象となる処理イメージ図とプログラム例を以下に示します。



  上記の理由より、データの切り捨てが発生した場合は、IDL定義にて文字列型で定義するのではなく、構造体型として各データ項目を定義するなどし、現象を回避してください。


6) アプリケーション間連携時にアプリケーションが動作不良となる

  サーバアプリケーション間連携時には、以下の処理が考えられます。

  中継アプリケーションは、クライアントとなるCORBAアプリケーションからはトランザクションアプリケーションとして、中継先のトランザクションアプリケーションからはCORBAアプリケーションとして位置づけられます。

  このとき、クライアントからのデータを受信したデータは、コンポーネントトランザクションサービスが管理する領域に格納されます。このデータをサーバアプリケーションへ通知する場合は、CORBAサービスが管理する領域に一度複写する必要があります。

  これを行わずコンポーネントトランザクションサービスが管理する領域を、CORBAサービスのリクエストのパラメタに設定すると、以下の現象が発生します。

  下図に示すように、連携用サーバアプリケーションは、トランザクションアプリケーションとCORBAアプリケーションから構成されます。これらは同一オブジェクト上で動作しますが、トランザクションアプリケーション論理で獲得した領域(A)を、CORBAアプリケーションで発行するオペレーション(OP2)のパラメタに指定することはできません。必ずCORBAアプリケーション論理で獲得した領域(B)に複写し、オペレーションのパラメタに指定してください。



7) プロセスバインド機能を使用した場合、レスポンスが悪くなる場合がある

  プロセスバインド機能では、セション開始要求を受け取ったサーバアプリケーションプロセスに、そのセションIDに対する処理がバインドされます。通常、セション開始要求は、ワークユニット内で最後に要求待ちとなったサーバアプリケーションプロセスに振り分けられます。そのため、クライアントからの要求数が少ない場合、すべてのクライアントが特定のプロセスにバインドされ、その結果、1プロセスにセションが集中して性能劣化を引き起こすことがあります。
  これを回避するためには、“セション開始要求(初回呼び出し)のプロセスへの振り分け方式”を参照してください。


8) 標準コード変換(FSUNiconv)の使用について

  コード変換関数は、OSのlibc.soにも存在します。そのため、アプリケーションから富士通の標準コード変換(FSUNiconv)を使用してコード変換する場合、以下の対処を実施してください。