トランザクションアプリケーションをCORBAアプリケーションへ移行する場合の手順を説明します。

(1) APIの移行
トランザクションアプリケーションで使用しているAPIを、CORBAアプリケーション用のAPIに変更します。
トランザクションアプリケーションとCORBAアプリケーションの各言語のAPI対比表を以下に示します。
トランザクションアプリケーションAPI名  | CORBAアプリケーションAPI名  | 備考  | 
|---|---|---|
TD_xxx_alloc()  | CORBA_xxx_alloc()  | 
  | 
TD_free()  | CORBA_free()  | 
  | 
TD_get_smo_name()  | -  | CORBAアプリケーションでは未サポート  | 
TD_get_client_id()  | -  | CORBAアプリケーションでは未サポート  | 
TD_get_user_information()  | -  | CORBAアプリケーションでは未サポート  | 
TD_getsessionid()  | -  | CORBAアプリケーションでは未サポート  | 
TD_setcontcvt()  | -  | CORBAアプリケーションでは未サポート  | 
TD_refsessionid()  | -  | CORBAアプリケーションでは未サポート  | 
トランザクションアプリケーションAPI名  | CORBAアプリケーションAPI名  | 備考  | 
|---|---|---|
TD::xxx_alloc()  | CORBA::xxx_alloc()  | 
  | 
TD::string_free()  | CORBA::string_free()  | 
  | 
TD::wstring_free()  | CORBA::wstring_free()  | 
  | 
TD::get_smo_name()  | -  | CORBAアプリケーションでは未サポート  | 
TD::get_client_id()  | -  | CORBAアプリケーションでは未サポート  | 
TD::get_user_information()  | -  | CORBAアプリケーションでは未サポート  | 
TD::getsessionid()  | -  | CORBAアプリケーションでは未サポート  | 
TD::setcontcvt()  | -  | CORBAアプリケーションでは未サポート  | 
TD::refsessionid()  | -  | CORBAアプリケーションでは未サポート  | 
トランザクションアプリケーションAPI名  | CORBAアプリケーションAPI名  | 備考  | 
|---|---|---|
TDXXXALLOC  | CORBA-XXX-ALLOC  | 
  | 
TDSTRINGSET  | CORBA-STRING-SET  | 
  | 
TDSTRINGGET  | CORBA-STRING-GET  | 
  | 
TDWSTRINGSET  | CORBA-WSTRING-SET  | 
  | 
TDWSTRINGGET  | CORBA-WSTRING-GET  | 
  | 
TDFREE  | CORBA-FREE  | 
  | 
TDGETSMONAME  | -  | CORBAアプリケーションでは未サポート  | 
TDGETCLIENTID  | -  | CORBAアプリケーションでは未サポート  | 
TDGETUSERINFORMATION  | -  | CORBAアプリケーションでは未サポート  | 
TDGETSESSIONID  | -  | CORBAアプリケーションでは未サポート  | 
TDSETCONTCVT  | -  | CORBAアプリケーションでは未サポート  | 
TDREFSESSIONID  | -  | CORBAアプリケーションでは未サポート  | 
TDFREESEQUENCEBUF  | CORBA-FREE  | 
  | 
TDSEQUENCEELEMENTGET  | CORBA-SEQUENCE-ELEMENT-GET  | 
  | 
TDSEQUENCEELEMENTSET  | CORBA-SEQUENCE-ELEMENT-SET  | 
  | 
また、any型、sequence型のデータを利用している場合、必要に応じて領域の開放設定を行ってください。各言語の対応方法を以下に示します。
any型を利用している場合、CORBA_any_set_releaseを利用して領域の開放設定を行ってください。
sequence型を利用している場合、CORBA_sequence_set_releaseを利用して領域の開放設定を行ってください。
詳細は、“3.7.4 any型”、“3.7.5 シーケンス型”、“3.8 any型、sequence型のリリースフラグ”を参照してください。
any型を利用している場合、CORBA_Anyクラスのインスタンス生成時または、replaceメソッドを利用して領域の開放設定を行ってください。
sequence型を利用している場合、シーケンスクラスのインスタンス生成時に領域の開放設定を行ってください。
詳細は、“4.5.4 any型”、“4.5.5 シーケンス型”、“4.5.12 any型、sequence型のリリースフラグ”を参照してください。
any型を利用している場合、CORBA-ANY-SET-RELEASEを利用して領域の開放設定を行ってください。
sequence型を利用している場合、CORBA-SEQUENCE-SET-RELEASEを利用して領域の開放設定を行ってください。
詳細は、“6.8.3 any型”、“6.8.4 シーケンス型”、“6.9 any型、sequence型のリリースフラグ”を参照してください。
(2) インクルードファイルの修正
トランザクションアプリケーションでは、トランザクションアプリケーション用スケルトンのインクルードファイル(モジュール名_インタフェース名.h)をインクルードしていましたが、CORBAアプリケーションでは、CORBAアプリケーション用スケルトンのヘッダファイル(IDLファイル名.h)をインクルードするように修正します。
(3) mainロジックの追加
CORBAアプリケーションでは、main関数を持つ実行モジュールを作成する必要があります。
そのため、main関数を作成し、CORBAアプリケーションの初期化処理を行う必要があります。

【移行例】
トランザクションアプリケーションからCORBAアプリケーションに移行するためのアプリケーションソースの修正例を、IDL定義例とともに以下に示します。
module MOD {
  interface INTF {
    long OPE(in string para1);
  };
};#include "orb.h"
#include "MOD_INTF.h"
CORBA_long MOD_INTF_OPE(CORBA_string para1)
{
  CORBA_long ret = 0;
  if (strcmp(para1,”test”) == 0) {
    ret = 0;
  } else {
    ret = 1;
  }
  TD_free(para1);
  return ret;
}上記トランザクションアプリケーションをCORBAアプリケーションに移行する場合は、下線部分を変更します。
#include "orb.h" #include "test.h"
CORBA_long MOD_INTF_OPE(CORBA_string para1) { CORBA_long ret = 0; if (strcmp(para1,"test") == 0) { ret = 0; } else { ret = 1; } CORBA_free(para1); return ret; } void main(int argc,char **argv)
{
int current_argc = argc;
orb = CORBA_ORB_init(....);
boa = CORBA_ORB_BOA_init(....);
impl_ret = CORBA_ORB_resolve_initial_references(....);
impl = FJ_Implementation_lookup_id(....);
intf = CORBA_Repository_lookup_id(....);
CORBA_BOA_impl_is_ready(....);
exit();
}