4.5. WebOTX CORBA アプリケーション(C++)

WebOTXには、いくつかのAPIが用意されています。 これらを使用することにより、アプリケーションを効率よく、かつ安全に実行することができます。

オープン性の高いアプリケーションを作成する場合は、これらのAPIを使用すべきではありません。 しかし、WebOTXの高機能/高信頼の恩恵を受けるためには、 これらのAPIの利用は不可欠なものとなります。

サーバAPI コールバックオペレーション クライアント管理ライブラリ

4.5.1. サーバAPI

○コンポーネント情報の登録 (add)

形式 #include "wotxexps.h"
static void WebOTX::WOComponent::add(WebOTX::WOServantCallback* woservantcallback);
引数 woservantcallback - 実装情報
機能 コンポーネント初期化関数(運用管理ツールで指定するコンポーネント初期化関数)にて、 コンポーネント内に定義されている実装情報をWebOTXにするために使用します。 引数 woservantcallback は実装情報のインスタンスを指定します。 複数の実装を定義している場合は、その数だけ呼び出してください。
インスタンスの解放責任はWebOTXにあります。
注意事項 本APIはコンポーネント初期化関数でのみ利用するようにしてください。
それ以外の場所から呼び出しても何も起こりません。

○サーバオブジェクトの生成 (CreateServant)

形式 #include "wotxexps.h"
static CORBA::Object_ptr WebOTX::WOServantManager::CreateServant(WebOTX::WOServantCallback* woservantcallback);
引数 woservantcallback - 実装情報
機能 WebOTXに、サーバオブジェクトの生成を通知します。 引数 woservantcallback は生成する実装情報のインスタンスを指定します。 指定された実装情報に対応するオブジェクトがステートレスだった場合は、 事前生成されているオブジェクトが返ります。ステートフルだった場合は、 新しくオブジェクトを生成されて、そのオブジェクトリファレンスが返ります。
インスタンスの解放責任は本関数の呼び出し側にあります。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

○サーバオブジェクトの解放 (ReleaseServant)

形式 #include "wotxexps.h"
static void WebOTX::WOServantManager::ReleaseServant(WebOTX::WOServantCallback* woservantcallback, CORBA::Object_ptr objref);
引数 woservantcallback - 実装情報
objref - オブジェクトリファレンス
機能 WebOTXに、サーバオブジェクトの解放を通知します。 引数 woservantcallback は解放する実装情報のインスタンスを指定します。 複数の実装を定義している場合は、その数だけ呼び出してください。
インスタンスの解放責任は本関数の呼び出し側にあります。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。


○トランザクション終了状態の通知 (TPSSetTxStatus)

形式 #include "wotxexps.h"
void TPSSetTxStatus(long status);
引数
status - トランザクションの終了状態
0 正常
10 異常(運用管理ツールで指定した動作)
11 異常(オペレーションは停止しない)
12 異常(オペレーションを停止する)
20 再実行
機能 以後のオペレーション実行要求を制御することが可能です。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

○データベースオブジェクトの登録 (TPSRegisterDB)

形式 #include "wotxexps.h"
int TPSRegisterDB(WebOTX_DB* regdb);
引数 regdb - WebOTX_DBクラスから派生したオブジェクトポインタ
返却値
正常終了した場合は0が返ります。異常終了した場合は下記の値が返ります。
ERROR_REGDB_NULL
NULLポインタが指定された
ERROR_REGDB_UNKNOWN
その他エラー
機能 サーバオブジェクト内で使用するリモートデータオブジェクトをWebOTXサーバへ登録します。 登録するオブジェクトはWebOTX提供のWebOTX_DBクラスから派生したクラスのオブジェクトです。 例外発生時には、このオブジェクトのrollbackメソッドが呼び出されます。 rollback()メソッドは純仮想関数になっていますので、 派生したクラスでオーバライドしてロールバック処理を記述してください。 WebOTX_DBクラスを派生していないオブジェクトや不正なアドレスを渡した時の動作は保証できません。
注意事項 本APIは、サーバオブジェクトのコンストラクタまたはオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

○スレッド、プロセスの強制終了、スレッドのリスタート (TPSAbort)

形式 #include "wotxexps.h"
void TPSAbort(long aborttype);
引数
aborttype - 動作を指定します
1 スレッドのリスタート
0 スレッドの終了
-1 プロセスの終了
機能 利用者の処理中にスレッドやプロセスを終了したり、スレッドをリスタートしたりすることが可能です。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

○オペレーションのリスタート (TPSRestart)

形式 #include "wotxexps.h"
void TPSRestart(void)
機能 利用者の処理を中断し、オペレーションを最初から実行し直します。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。


○利用者のトレース出力 (TPSUserTrace)

形式 #include "wotxexps.h"
void TPSUserTrace(long level, const char* msg);
引数
level - トレースレベルを指定します。この値が運用管理ツールで指定した値以下の場合にトレースを出力します。
LOG_EMERG 0
パニック状態
LOG_ALERT 1
即時に訂正すべきである状態
LOG_CRIT 2
致命的なエラー
LOG_ERR 3
一般的なエラー
LOG_WARNING 4
警告メッセージ
LOG_NOTICE 5
通知メッセージ
LOG_INFO 6
情報メッセージ
LOG_DEBUG 7
デバッグ時のメッセージ
msg - トレースファイルに出力する文字列
機能 利用者のトレースをWebOTXのトレースレベルにあわせて出力します。出力されるファイルは、運用管理ツールで指定します。
トレースレベル2以下の場合、エラーメッセージがsyslogやイベントログに出力されるため、WebOTXの性能が劣化する可能性があります。 エラー発生時以外はトレースレベル2以下を指定しないでください。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。
トレースレベル2以下でsyslogやイベントログにトレース出力する場合、ダウンローダ管理サービスを起動する必要があります。 起動しない場合、syslogやイベントログへのトレース出力はされません。

○現在のトレースレベルの取得 (TPSGetUserTraceLevel)

形式 #include "wotxexps.h"
long TPSGetUserTraceLevel(void);
返却値 現在のトレースレベル
機能 運用管理ツールで指定しているトレースレベルを取得します。トレースファイルに出力するメッセージを組み立てるかどうかを決めるために使用してください。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。

○イベントジャーナルへの出力 (TPSEventJournal)

形式 #include "wotxexps.h"
long TPSEventJournal(short ejkind, const char* msg);
引数
ejkind - ジャーナル種別。0x01から0x0fまでの任意の値
msg - イベントジャーナルへ出力するメッセージ (最大 12240バイトです)
返却値 0は正常終了。異常時には負の値を返します。
-1 内部エラー
-2 パラメータ不正
機能 引数 ejkind のジャーナル種別で引数msgをイベントジャーナルに出力します。 コンポーネント名はUSERとなります。また、msgは16進数で出力します。
イベントジャーナルに関しては [ ドメイン構築・基本設定ガイド > 7. WebOTXの内部サービス > 7.1. TPシステム > 7.1.11. 通信情報(イベントジャーナル) ] をご覧ください。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。


○論理クライアントIDの取得 (TPSGetLid)

形式 #include "wotxexps.h"
void TPSGetLid(char** lid)
引数 lid - 論理クライアントID領域へのポインタを格納
機能 オペレーションの発行元を示す論理クライアントIDを返却します。 論理クライアントIDの終端はNULL文字('\0')です。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
しかし、ステートフルサーバオブジェクトに限っては、コンストラクタでも利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

○クライアントのIPアドレスの取得 (TPSGetTerminalIP)

形式 #include "wotxexps.h"
int TPSGetTerminalIP(char** ipaddr)
引数 ipaddr - IPアドレスを10進数ドット表記文字列で返却する。格納領域は関数内部で確保します。解放責任は呼び出し側とします。
返却値
正常時はipaddrで確保したサイズが返ります。失敗時は負の値が返ります。
-1 クライアント情報がない(VD経由など)
機能 実行中のメソッドを呼び出しているクライアントのIPアドレスを10進数のドット区切り文字列で格納し、その格納領域を返却します。 文字列の領域はAPI内部で確保します。よって、この領域の解放責任は本関数の呼び出し側にありますので注意してください。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
しかし、ステートフルサーバオブジェクトに限っては、コンストラクタでも利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。
IPv6のIPアドレスは取得できません。この場合「255.255.255.255」が取得されます。

○プログラム引数の数を取得 (TPSGetArgumentCount)

形式 #include "wotxexps.h"
long TPSGetArgumentCount ();
返却値 引数の数
機能 運用管理ツールで指定したプログラム引数の個数を返却します。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。

○プログラム引数の値を取得 (TPSGetArgumentValue)

形式 #include "wotxexps.h"
char** TPSGetArgumentValue ();
返却値 引数配列へのポインタ
機能 運用管理ツールで指定したプログラム引数配列へのポインタを返却します。 配列の大きさはTPSGetArgumentCount()で取得してださい。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。

○WebOTX情報の取得(TPSGetServerInformation)

形式
#include "wotxexps.h"

long TPSGetServerInformation(WebOTX_Information* info);

typedef struct WebOTX_Information
{
    // アプリケーショングループ名
    const char *apGroupName;
    // プロセスグループ名
    const char *apServerName;

    // ステートフルかステートレスか
#define WOINFO_STATELESS 0
#define WOINFO_STATEFULL 1
    int   state;

    // スレッドモデル
#define WOINFO_THREAD_NONE       0
#define WOINFO_THREAD_SINGLE     1
#define WOINFO_THREAD_APARTMENT  2
#define WOINFO_THREAD_FREE       3
    int threadModel;
    // IIOPリスナポート番号
    int iiopPort;
    // クライアント管理ライブラリポート
    int asyncPort;
    // 単一常駐オブジェクトクラス名
    const char* precteatedClassName;
    // OTS連携を行うか (0:しない、0以外:する)
    int isOTS;
    // システムID
    int systemID;
    // 接続サーバ名
    const char* serverName;
    // 名前サーバ名
    const char* nameServer;
    // Watchサーバを使用するか(0:しない、0以外:する)
    int isWatchServer;
    // 名前サーバに登録するリファレンスの数(多重度)
    int multiplexDegree;
    // ファクトリを使うかどうか(0:使用しない, 0以外:使用する)
    int isFactory;
  // Oracle連携するかどうか(0:使用しない, 0以外:使用する)
  //
  // 1999/12/02 Oracle連係情報を追加
  //
    int isOracle;
    // Oracle連携する時、SQL/Netを使用するか
    //   (0:使用しない, 0以外:使用する)
    //   Oracle連携しない時は-1
    int isSQLNet;
    // Oracle連携する時のSID名(未使用時はNULL)
    const char* oracleSID;
    // Oracle連携する時のユーザ名とパスワード(未使用時はNULL)
    // SQL/Net使用時  : user@SID/passwd
    // SQL/Net未使用時: user/passwd
    const char* oracleUserPasswd;
    // Information Version
#define VERSION_1999_09 
  int version;
    // RFU
    char rfu[124];
} WebOTX_Information;
引数 info - WebOTX_Informationのポインタ。領域は利用者が確保してください。
返却値 現在は0のみです。
機能 現在のプロセスに設定されているWebOTXの各種設定をinfoに設定します。 WebOTX 6.xではversionおよびrfuの値は不定です。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。


○非同期トランザクションの結果を取得(TPSGetAsyncVDSendResult)

形式 #include "wotxexps.h"
CORBA::Long TPSGetAsyncVDSendResult();
返却値 非同期トランザクション呼び出しを行った時の返却値。
  • 0: 正常終了
  • 80: エラー。ただし、VDサーバのプール数の上限に達した場合もあるので、間隔をおいてリトライすることをお勧めします。
  • 1以上の値: エラー。VD未起動あるいは運用管理ツールの設定ミスが考えられます。
  • -1以下の値: エラー。通常は発生しません(VDサーバへの送信パラメータミス)。もし、これが発生した場合は運用管理ツールの設定を再度行ってみてください。
機能 非同期トランザクション呼び出しを行った時の結果を取得します。 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「非同期トランザクションについて」をご覧ください。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。


○ORBの取得 (TPSGetORB)

形式 #include "wotxexps.h"
long TPSGetORB (CORBA::ORB_ptr& orb);
引数 orb - ORBへのポインタを設定
返却値 0のみです。
機能 WebOTXサーバがアプリケーション起動時に作成した、ORBポインタを取得します。 サーバアプリケーション内でCORBAのサービスを利用したいときに取得してください。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。

○POAの取得 (TPSGetMyPOA)

形式 #include "wotxexps.h"
long TPSGetMyPOA (PortableServer::POA_ptr& poa);
引数 poa - POAへのポインタを設定
返却値 0のみです。
機能 WebOTXサーバが作成したPOAを取得します。 WebOTXはインタフェース毎にPOAを作成します。 そのポリシーはステートによって異なります。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。

○初期リファレンスの取得 (TPSGetInitialReference)

形式 #include "wotxexps.h"
long TPSGetInitialReference (const char* service, CORBA::Object_ptr& initref);
引数
service - 初期リファレンスのサービス名を指定します。指定可能な文字列は"NameService"、"InterfaceRepository"、"TransactionCurrent"(WebOTX Transaction Service連携時のみ)です。
initref - serviceで指定した初期リファレンスのポインタ。解放責任は呼び出し側とします。
返却値 0 正常終了した
-1 初期リファレンスの取得に失敗した
機能 引数serviceで指定した初期リファレンスを引数initrefに設定します。 解放責任は本関数の呼び出し側にあるので、CORBA::release(initref) を忘れないでください。
注意事項 本APIは、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からは利用できません。


○単一常駐オブジェクトの取得 (TPSGetPrecreatedUsersObject)

形式 #include "wotxexps.h"
void TPSGetPrecreatedUsersObject(void** preobj);
引数 preobj - 常駐オブジェクトのポインタを返却します。
機能 WebOTXサーバがアプリケーション起動時に作成した、単一常駐オブジェクトを取得します。指定が無かったり、オブジェクトの生成に失敗している時はnullオブジェクトを返却します。
各常駐オブジェクトは1スレッドに1つ作成します。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

○複数常駐オブジェクトの取得 (TPSGetPrecreatedUsersObjectForPlural)

形式 #include "wotxexps.h"
long TPSGetPrecreatedUsersObjectForPlural(const char* ID, void** preobj);
引数
ID - 常駐オブジェクト識別子(運用管理ツールで指定。大文字小文字を区別します)。
preobj - 常駐オブジェクトのポインタを返却します。
返却値
0は正常終了。0以外は異常終了です。以下に異常終了時の状態を示します。
ERROR_PREOBJ_NOTUSE
運用管理ツールで複数常駐オブジェクト指定を行っていません。
ERROR_PREOBJ_IDISNULL
IDがNULLポインタです
ERROR_PREOBJ_IDISNULLSTRING
IDがNULL文字列です
ERROR_PREOBJ_NOTFOUND
IDに該当する常駐オブジェクト識別子は登録されていません。
運用管理ツールの指定とコーディング中の文字列のチェックをしてください。
なお、IDに指定する文字列は大文字と小文字をチェックします。
機能 WebOTXサーバがアプリケーション起動時に作成した、複数常駐オブジェクトを取得します。取得するオブジェクトは引数 ID で指定します。
各常駐オブジェクトは1スレッドに1つ作成します。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。


○共有プロパティ : プロパティグループの生成(TPSCreatePropertyGroup)

形式 #include "wotxexps.h"
long TPSCreatePropertyGroup(const char* name, long area, WOPropertyGroup** pgptr);
引数
name - プロパティグループ名を指定します。
area - プロパティグループの範囲を指定します。
WOSP_AREATYPE_HOST
ホスト内でプロパティグループを共有
WOSP_AREATYPE_MONITOR
システム内でプロパティグループを共有
WOSP_AREATYPE_APGROUP
アプリケーショングループ内でプロパティグループを共有
WOSP_AREATYPE_APSERVER
プロセスグループ内でプロパティグループを共有
pgptr - 生成したプロパティグループを格納するポインタのアドレスを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_INVALIDTYPE
areaの指定が不正です
WOSP_RC_INVALIDPOINTER
pgptrの指定が不正です
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 nameで指定したプロパティグループを生成します。 正常に生成できたときは、プロパティグループクラス(WOPropertyGroup)のポインタをpgptrに設定します。 また、既に存在するときは、既存のプロパティグループポインタを設定します。 失敗したときはNULLポインタを設定します。
areaはプロパティグループの有効範囲を指定します。 異なるareaに同一名のプロパティグループがあっても影響は受けません。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティグループの取得(TPSGetPropertyGroup)

形式 #include "wotxexps.h"
long TPSGetPropertyGroup (const char* name, long area, WOPropertyGroup** pgptr);
引数
name - プロパティグループ名を指定します。
area - プロパティグループの範囲を指定します。
WOSP_AREATYPE_HOST
ホスト内でプロパティグループを共有
WOSP_AREATYPE_MONITOR
システム内でプロパティグループを共有
WOSP_AREATYPE_APGROUP
アプリケーショングループ内でプロパティグループを共有
WOSP_AREATYPE_APSERVER
プロセスグループ内でプロパティグループを共有
pgptr - 取得したプロパティグループを格納するポインタのアドレスを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_INVALIDTYPE
areaの指定が不正です
WOSP_RC_INVALIDPOINTER
pgptrの指定が不正です
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 nameとareaで指定したプロパティグループクラスのポインタを返却します。存在しないときはNULLポインタを返却します。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティグループの削除(TPSDeletePropertyGroup)

形式 #include "wotxexps.h"
long TPSDeletePropertyGroup (WOPropertyGroup* pgptr);
引数 pgptr - プロパティグループクラスのポインタを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_INVALIDPOINTER
pgptrの指定が不正です
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 pgptrで指定したプロパティグループを削除します。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティの生成

形式 #include "wotxexps.h"
long WOPropertyGroup::CreateProperty(const char* name, WOProperty** pptr );
引数
name - プロパティ名を指定します。
pptr - プロパティクラスのポインタを格納するアドレスを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_INVALIDPOINTER
pptrの指定が不正です
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 nameで指定したプロパティを生成します。 正常に生成できたときは、プロパティクラス(WOProperty)のポインタを返却します。 また、既に存在するときは、既存のプロパティポインタを返却します。 失敗したときはNULLポインタを返却します。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティの取得

形式 #include "wotxexps.h"
long WOPropertyGroup::GetProperty(const char* name, WOProperty** pptr);
引数
name - プロパティ名を指定します。
pptr - プロパティクラスのポインタを格納するアドレスを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_INVALIDNAME
nameの指定が不正です
WOSP_RC_INVALIDPOINTER
pptrの指定が不正です
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 nameで指定したプロパティクラスのポインタを返却します。そのプロセスで一度も生成していないときはNULLポインタを返却します。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティの削除

形式 #include "wotxexps.h"
long WOPropertyGroup::DeleteProperty(WOProperty* pptr);
引数 pptr - プロパティクラスのポインタを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_INVALIDPOINTER
pptrの指定が不正です
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 pptrで指定したプロパティを削除します。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティグループのロック

形式 #include "wotxexps.h"
long WOPropertyGroup::Lock(WO_PG_WAITFLAG inWaitflag, unsigned long waitmilsec);
引数
inWaitflag - 待ち合わせタイプを指定します
WO_PG_WAIT
ロックを待ち合わせ時間だけ待ち合わせます。待ち合わせ時間が過ぎたらWOSP_RC_ALREADYを返します。
WO_PG_NOWAIT
ロックできないときは即座にWOSP_RC_ALREADYを返します。
waitmilsec - 待ち合わせ時間をミリ秒単位で指定します
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_ALREADY
既にロックがかかっています。もしくはロックの待ち合わせ時間が経過しました。
WOSP_RC_INVALIDTYPE
ロックタイプ、待ち合わせタイプの指定が不正です
WOSP_RC_DEADLOCK
デッドロックを検出しました(既に自スレッドでロックを取得している場合)
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 プロパティグループをロックします。これは、プロパティグループを生成するときに指定したareaの範囲内で有効です。
ロックを解放せずにオペレーションを終了(つまりreturn)した場合は、WebOTX側で自動的にロックを解放します。
同一プロパティグループに対してアンロックせずにロックを2回続けて実行した場合はWOSP_RC_DEADLOCKエラーとなります。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : プロパティグループのアンロック

形式 #include "wotxexps.h"
long WOPropertyGroup::Unlock();
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_NOLOCKED
ロックしていません
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 プロパティグループをアンロックします。ロックをかけていないときはWOSP_RC_NOLOCKEDを返却します。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : 値の設定

形式 #include "wotxexps.h"
long WOProperty::Set(int value);
long WOProperty::Set(short value);
long WOProperty::Set(long value);
long WOProperty::Set(unsigned short value);
long WOProperty::Set(unsigned long value);
long WOProperty::Set(float value);
long WOProperty::Set(double value);
long WOProperty::Set(unsigned char value);
long WOProperty::Set(char value);
long WOProperty::Set(bool value); (Windowsのみ)
long WOProperty::Set(const char* ptr, int size);
引数
value - 値を指定します。
ptr - ポインタを指定します。
size - ポインタが示す領域の大きさを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_NOLOCKED
ロックを取得していない
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 valueやptr,sizeで指定した値を設定します。
本APIはロックを取得してから呼び出してください。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。

○共有プロパティ : 値の取得

形式 #include "wotxexps.h"
long WOProperty::Get(int& value);
long WOProperty::Get(short& value);
long WOProperty::Get(long& value);
long WOProperty::Get(unsigned short& value);
long WOProperty::Get(unsigned long& value);
long WOProperty::Get(float& value);
long WOProperty::Get(double& value);
long WOProperty::Get(char& value);
long WOProperty::Get(unsigned char& value);
long WOProperty::Get(bool& value); (Windowsのみ)
long WOProperty::Get(char*& ptr, int size);
引数 valueは値が設定されます。 ptrは データを格納する領域のポインタを指定します。これは利用者がメモリの確保を行ってください。 sizeはptrが示す領域の大きさを指定します。
返却値
WOSP_RC_DONE
正常終了
WOSP_RC_NOLOCKED
ロックを取得していない
WOSP_RC_EXCEPTION
内部例外が発生しました
機能 valueやsize,ptrに値を設定します。
本APIはロックを取得してから呼び出してください。
注意事項 本APIは、アプリケーションが独自に生成したスレッドの処理中では利用できません。
また、WindowsのDllMain、UNIXの共有ライブラリのイニシャライザ・ターミネータ(init, finiなど) からも利用できません。


○VDサーバにデータを送信 (TPSVDSend)

形式 #include "wotxexps.h"
long TPSVDSend(const char* vdname, const char* trans_id, const char* format_id, void* data, long datasize)
引数
vdname - VDサーバ名
trans_id - トランザクションID
format_id - フォーマットID
data - 送信データ
datasize - 送信データ長
返却値
0が正常終了。0以外が異常終了です。負の値はパラメータミス。正の値はVDサーバ異常をあらわします。もし、普段は正常動作しているのに時々正の値が返ってくる場合は、VDサーバのメッセージブロックを増やしてみてください。
ERROR_VDSEND_BUFFERISNULL
引数dataがNULLポインタ指している
ERROR_VDSEND_INVALIDSIZE
datasizeに(9999999-28)以上の値を指定した
ERROR_VDSEND_VDNAMEISNULL
引数vdnameがNULLポインタを指している
ERROR_VDSEND_TRNSIDISNULL
引数trans_idがNULLポインタを指している
ERROR_VDSEND_FORMATIDISNULL
引数format_idがNULLポインタを指している
機能 VDサーバにdataの内容を送信します。trnsiidは8文字、format_idは10文字までが有効です。本APIを利用する場合、OLF/TP-UTのクライアントアプリケーションが必要になります。 それ以外では使用しません。
注意事項 本APIは、サーバオブジェクトのオペレーション処理中でのみ利用できます。
それ以外の場所では利用できません。
アプリケーションが独自に生成したスレッドの処理中などでも利用できないので注意してください。

4.5.2. コールバックオペレーション

○コンポーネント初期化関数

形式 extern "C" WO_USER_EXPORT void <任意の関数名>()
機能 R5.1からの新機能です。 R4.2まではコンポーネント内の実装クラスはIDLのインタフェース(正確にはリポジトリID)にあわせて固定化していました。 R5.1からは任意の実装クラスを作成できるようになりました。 また、1つのインタフェースから複数の実装も可能になりました。
本インタフェースは、コンポーネント情報をWebOTXに通知するためのコールバックインタフェースです。
運用管理ツールにて本関数名を指定することにより、サーバプロセス起動時にWebOTXから呼び出されます。
本関数でWOComponent.add()を呼び出してコンポーネントファイル内に定義されている実装情報を登録してください。

○実装情報の定義

形式
#include "wotxexps.h"

namespace WebOTX {
class WOServantCallback {
    virtual const char* _name() = 0;
    virtual const char* _id() = 0;
    virtual PortableServer::Servant _newInstance() = 0;
    virtual void _deleteInstance(PortableServer::Servant servant) = 0;
}
メソッド const char* _name()
実装識別名を返却してください。この値はコンポーネントファイル内でユニークなものにてください。 使える文字列は「英字」と「数字」です。空白や記号、漢字などの2byte文字は使用できません。
解放責任はWOServantCallbackの実装クラスにあります。

const char* _id()
リポジトリIDを返却してください。
例えばinterface LoopBackSampleの実装なら"IDL:LoopBackSample:1.0"を返却してください。
解放責任はWOServantCallbackの実装クラスにあります。

PortableServer::Servant _newInstance()
サーバントをnewした結果を返却してください。WebOTXが必要に応じて呼び出します。
解放責任はWOServantCallbackの実装クラスにありますが、
基本的にWebOTXが必要に応じて下記の_deleteInstance()を呼び出します。
void _deleteInstance(PortableServer::Servant servant)
引数 servantをdeleteしてください。
機能 R5.1からの新機能です。 R4.2まではコンポーネント内の実装クラスはIDLのインタフェース(正確にはリポジトリID)にあわせて固定化していました。 R5.1からは任意の実装クラスを作成できるようになりました。 また、1つのインタフェースから複数の実装も可能になりました。 本インタフェースその実装クラス情報をWebOTXに通知するためのものです。 実装毎にこのインタフェースを実装したクラスを作成し、WOComponent.add()にて登録してください。


IDL定義にてインタフェースを定義するときにWO_Baseからの派生と指定して、サーバアプリケーション内で以下のオペレーションを定義しておけば、特定の事象が発生したときに、WebOTXサーバが定義済みのオペレーションをコールします。

○クライアントへのセッションが切断

形式 #include "wotxexps.h"
public void OnTPSDisconnect(CORBA::Environment& _env = Ob_default_environment())
機能 クライアントアプリケーションがステートフルサーバオブジェクトを生成してから解放するまでの間にクライアントへのセッションが切断されると、WebOTXはこのオペレーションを呼びます。

○オペレーションの異常終了

形式 #include "wotxexps.h"
public void OnTPSAbort(CORBA::Long status, CORBA::Environment& _env = Ob_default_environment())
引数
status - 例外の原因を示す値
03 不正アドレス参照例外等の一般的な例外
05 オペレーション実行時間の制限を越えた
08 利用者がTPSTxStatus()を呼び出したなど、オペレーションが正常に終了できなかった
31 オペレーション実行の再試行の回数が運用管理ツールで設定した値を超えた
80 利用者がTPSAbort(0)を呼び出したなど、スレッドが終了した
81 利用者がTPSAbort(1)を呼び出したなど、スレッドがリスタートした
82 利用者がTPSAbort(-1)を呼び出したなど、プロセスが終了した
機能 例外が発生した場合などオペレーション処理中に何らかの異常が発生して正常に終了できなかった場合や、 WebOTXサーバが無限ループを強制的に停止したタイミングでコールされます。
なお、WebOTXは、このオペレーション実行後にロールバック処理を行いますが、 ロールバック後の後処理を実行したい場合には、 このオペレーション内でロールバックを行って後処理を記述してください。


○運用管理コマンドからのメッセージ受信

形式 #include "wotxexps.h"
public void OnTPSMessageNotified(const char* mes CORBA::Environment& _env = Ob_default_environment())
引数 mes - 運用管理コマンドからのメッセージ
機能 運用管理コマンドからのメッセージを受け取ります。 WebOTX クラスタ環境において、フェイルオーバがあったときに呼び出されます。 WebOTX クラスタを使用していない場合は、本関数はretrun 文のみ記述してください。


以下は特定の条件で呼び出されるコールバック関数およびコールバック関数の登録用APIです。

○サーバコンポーネント(DLLやSLやSOなど)の読み込み後のコールバック関数

形式 extern "C" WO_USER_EXPORT int WebOTX_Init()
返却値 0 正常終了
1 異常終了
機能 WebOTXはサーバコンポーネント(WindowsNTではDLL、HP-UXではSL、SolarisではSO)を読み込んだ後に本関数を呼び出します。この呼び出しは1度しか行われません。よって、大域変数の初期化などを行う時はここに記述してください。
備考 WebOTXのIDLコンパイラを実行した時、<IDLファイル名>_Entry.C(WindowsNTではcpp)ファイルに自動的に生成します。

○サーバコンポーネント(DLLやSLやSOなど)の解放直前のコールバック関数

形式 extern "C" WO_USER_EXPORT void WebOTX_Term()
機能 WebOTXはサーバコンポーネント(WindowsNTではDLL、HP-UXではSL、SolarisではSO)を解放する直前に本関数を呼び出します。この呼び出しは1度しか行われません。WebOTX_Initで初期化した変数などの解放処理をここに記述してください。
備考 WebOTXのIDLコンパイラを実行した時、<IDLファイル名>_Entry.C(WindowsNTではcpp)ファイルに自動的に生成します。


以下は単一常駐オブジェクトのコールバック関数定義です。

○単一常駐オブジェクトポインタ生成用関数

形式 extern "C" DLLEXPORT void* OnTPSPrecreatedUsersObject ()
返却値 単一常駐オブジェクトポインタ
機能 単一常駐オブジェクトを生成し、そのポインタを返却します。スレッドの初期化時に呼び出されます。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○単一常駐オブジェクトポインタ解放用関数

形式 extern "C" DLLEXPORT void OnTPSReleasePrecreatedUsersObject (void* preobj)
引数 preobj - 常駐オブジェクトポインタ
機能 引数 preobj にOnTPSReleasePrecreatedUsersObject()で生成した常駐オブジェクトポインタが渡されるので解放してください。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションの開始時の単一常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationStart (
void * preobj,
const char* intf,
const char* op
)
引数
preobj - 常駐オブジェクトポインタ
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
機能 オペレーションの開始時に、上記関数を呼び出します。オペレーションの情報は、引数 intfと引数 op に設定されます。なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションの正常終了時の単一常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationNormal (
void * preobj,
const char* intf,
const char* op
)
引数
preobj - 常駐オブジェクトポインタ
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
機能 オペレーションの正常終了時に、上記関数を呼び出します。オペレーションの情報は、引数 intfと引数 op に設定されます。
なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションの異常終了時の単一常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationAbnormal (
void * preobj,
const char* intf,
const char* op,
int status
)
引数
preobj - 常駐オブジェクトポインタ
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
status - Txステータス
機能 オペレーションの異常終了時に、上記関数を呼び出します。異常終了とは、TPSSetTxStatus()で0以外の値を設定した時です。オペレーションの情報は、引数 intfと引数 op に設定されます。引数 status にはTPSSetTxStatus() で設定した値を渡します。
なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションのアボート終了時の単一常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationAbort (
void * preobj,
const char* intf,
const char* op,
int status
)
引数
preobj - 常駐オブジェクトポインタ
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
status - 例外コード
機能 オペレーションのアボート終了時に、上記関数を呼び出します。アボートとは、不正アドレス参照やsignal発生時です。オペレーションの情報は、引数 intfと引数 op に設定されます。引数 status にはアボート内容を示すコードが入っています。例外コード関しては OnTPSAbort() を参照してください。
なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。


以下は複数常駐オブジェクトのコールバック関数定義です。

○複数常駐オブジェクトポインタ生成用関数

形式 extern "C" DLLEXPORT void* OnTPSPrecreatedUsersObjectForPlural (
const char* ident
)
引数 ident - 常駐オブジェクト識別子
返却値 複数常駐オブジェクトポインタ
機能 複数常駐オブジェクトを生成し、そのポインタを返却します。スレッドの初期化時に呼び出されます。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○複数常駐オブジェクトポインタ解放用関数

形式 extern "C" DLLEXPORT void OnTPSReleasePrecreatedUsersObjectForPlural(
void* preobj,
const char* ident
)
引数
preobj - 常駐オブジェクトポインタ
ident - 常駐オブジェクト識別子
機能 引数 preobj にOnTPSPrecreatedUsersObjectForPlural()で生成した常駐オブジェクトポインタが渡されるので解放してください。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションの開始時の複数常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationStartForPlural (
void * preobj,
const char* ident,
const char* intf,
const char* op
)
引数
preobj - 常駐オブジェクトポインタ
ident - 常駐オブジェクト識別子
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
機能 オペレーションの開始時に、上記関数を呼び出します。オペレーションの情報は、引数 intfと引数 op に設定されます。なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションの正常終了時の複数常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationNormalForPlural(
void * preobj,
const char* ident,
const char* intf,
const char* op
)
引数
preobj - 常駐オブジェクトポインタ
ident - 常駐オブジェクト識別子
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
機能 オペレーションの正常終了時に、上記関数を呼び出します。オペレーションの情報は、引数 intfと引数 op に設定されます。
なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションの異常終了時の複数常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationAbnormalForPlural(
void * preobj,
const char* ident,
const char* intf,
const char* op,
int status
)
引数
preobj - 常駐オブジェクトポインタ
ident - 常駐オブジェクト識別子
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
status - Txステータス
機能 オペレーションの異常終了時に、上記関数を呼び出します。異常終了とは、TPSSetTxStatus()で0以外の値を設定した時です。オペレーションの情報は、引数 intfと引数 op に設定されます。引数 status にはTPSSetTxStatus() で設定した値を渡します。
なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

○オペレーションのアボート終了時の複数常駐オブジェクト呼び出し(オプション)

形式 extern "C"DLLEXPORT void OnTPSOperationAbortForPlural(
void * preobj,
const char* ident,
const char* intf,
const char* op,
int status
)
引数
preobj - 常駐オブジェクトポインタ
ident - 常駐オブジェクト識別子
intf - インタフェースリポジトリID ( 例: "IDL:foo:1.0" )
op - オペレーション名
status - 例外コード
機能 オペレーションのアボート終了時に、上記関数を呼び出します。アボートとは、不正アドレス参照やsignal発生時です。オペレーションの情報は、引数 intfと引数 op に設定されます。引数 status にはアボート内容を示すコードが入っています。例外コード関しては OnTPSAbort() を参照してください。
なお、この関数はオプションになっていますので、無ければ呼び出しません(エラーにもなりません)。
備考 詳しくは「C++言語を用いたサーバアプリケーションの作成」-「常駐オブジェクトの使い方」を参照してください。

4.5.3. クライアント管理ライブラリAPI


○クライアント管理ライブラリにファクトリオブジェクトの設定

形式 #include "WOTrmMan.h"
int WO_TerminalManager::SetFactoryObject (CORBA::Object_ptr fobj)
引数 fobj - ファクトリオブジェクトリファレンス
戻り値
正常終了時は0以上の値が返ります。異常終了したときは負の値が返ります。
WOTM_SIMURATION_MODE 2
サーバシミュレータを使用中
WOTM_ALREADY_RUNNING 1
既に登録済み
WOTM_BASEFACTORY_IS_NIL -1
Requestオブジェクトの生成が出来なかった。返却値の型を設定できない
WOTM_EXCEPTION_GETID -2
GetID()で例外発生
WOTM_NOT_DEFINE_ASYNCSERVICE -3
サーバ側で非同期メッセージ用のポートが設定されていない
WOTM_NOT_CREATE_ASYNCWAIT_THREAD -4
非同期メッセージ送受信用スレッドの作成に失敗
機能 クライアント管理ライブラリにファクトリオブジェクトを設定します。このメソッドを呼び出すことにより、クライアント管理が開始されます。

○ウィンドウメッセージの設定

形式 #include "WOTrmMan.h"
void WO_TerminalManager::SetAsyncWindowHandle( HANDLE hAsyncHandle, UINT nMessageID);
機能 非同期メッセージを受信したときに、hAsyncHandleに示されたウィンドウハンドルに対して、nMessageIDのメッセージを送信します。電文の内容はGetLastMessage()で取得してください。

○最後の非同期メッセージを取得する

形式 #include "WOTrmMan.h"
int WO_TerminalManager:: GetLastMessage(char* buf, int len);
戻り値 取得した非同期メッセージのサイズを返却
機能 最後の非同期メッセージをbufに格納します。lenはbufのサイズを指定してください。