トランザクショナル分散オブジェクト基盤 TPBroker Object Transaction Monitor プログラマーズガイド

[目次][索引][前へ][次へ]

2.8.2 TSCWatchTimeを利用するサーバアプリケーションの例(C++)

TSCWatchTimeを利用するサーバアプリケーションの処理の流れとコードの例を示します。斜体で示しているコードは,雛形クラスとして自動生成される部分です。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。

サーバアプリケーションの作成時には,ユーザは,自動生成された雛形クラスABC_TSCimplにTSCユーザオブジェクトのコードを記述します。また,雛形クラスABC_TSCfactimplにTSCユーザオブジェクトファクトリのコードを記述します。さらに,TSCThreadの派生クラスとTSCThreadFactoryの派生クラスを記述します。

<この項の構成>
(1) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のヘッダのコード
(2) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のコード
(3) サービス登録処理の流れ・コード

(1) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のヘッダのコード

 
//
// "ABCfile_TSC_t.hh"
//
 
#ifndef _ABCfile_TSC_T_HDR
#define _ABCfile_TSC_T_HDR
 
#include <tscobject.h>
 
#include "ABCfile_TSC_s.hh"
 
class ABC_TSCfactimpl : public TSCObjectFactory
{
public:
  // コンストラクタの引数の数および型を変更することもできます。
  ABC_TSCfactimpl();
 
  virtual ~ABC_TSCfactimpl();
 
  virtual TSCObject_ptr create();
  virtual void destroy(TSCObject_ptr tsc_object);
 
};
 
class ABC_TSCimpl : public ABC_TSCsk
{
private:
 
public:
  // コンストラクタの引数の数および型を変更することもできます。
  ABC_TSCimpl();
 
  virtual ~ABC_TSCimpl();
 
  void call(const OctetSeq& in_data,OctetSeq*& out_data);
 
  // メソッドが呼ばれた回数
  CORBA::Long m_counter;
 
};
 
#endif  // _ABCfile_TSC_T_HDR

(2) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のコード

 
//
//  "ABCfile_TSC_t.cpp"
//
 
 
#include <tscadm.h>
#include <tscexcept.h>
 
#include "ABCfile_TSC_t.hh"
 
ABC_TSCfactimpl::ABC_TSCfactimpl()
{
  // Constructor of factory implementation.
  // Write user own code.
  // TSCユーザオブジェクトファクトリのコンストラクタのコードを記述
  // します。引数の数および型を変更することもできます。
}
 
ABC_TSCfactimpl::~ABC_TSCfactimpl()
{
  // Destructor of factory implementation.
  // Write user own code.
  // TSCユーザオブジェクトファクトリのデストラクタのコードを記述
  // します。
 
}
 
TSCObject_ptr
ABC_TSCfactimpl::create()
{
  // Method to create user object.
  // Write user own code.
  // サーバオブジェクトを生成するコードを記述します。
  // 必要に応じて変更してください。
    return new ABC_TSCimpl();
}
 
void
ABC_TSCfactimpl::destroy(TSCObject_ptr tsc_obj)
{
  // Method to destroy user object.
  // Write user own code.
  // ここに後処理のコードを記述します。
  // 必要に応じて変更してください。
  delete tsc_obj;
}
 
ABC_TSCimpl::ABC_TSCimpl()
{
  // Constructor of implementation.
  // Write user own code.
 
  ////////
  // 時間監視の処理
  ////////
  TSCWatchTime_ptr watch_time = 0;
  try
  {
    // 監視時間60秒の時間監視オブジェクト生成
    watch_time = new TSCWatchTime(60);
 
    // 時間監視の開始
    watch_time->start();
 
    // TSCユーザオブジェクトのコンストラクタのコードを記述します。
    // 引数の数および型を変更することもできます。
 
    // 時間監視の中断
    watch_time->stop();
 
    // 時間監視オブジェクトの解放
    delete watch_time;
  }
  catch(TSCSystemException& se)
  {
    // 例外処理
    fprintf(stderr,"EC=%d,DC=%d,PC=%d,MC1=%d,MC2=%d\n",
              se.getErrorCode(), se.getDetailCode(),
              se.getPlaceCode(), se.getMaintenanceCode1(),
              se.getMaintenanceCode2());
 
    delete watch_time;
 
    throw;
  }
}
 
 
ABC_TSCimpl::~ABC_TSCimpl()
{
  // Destructor of implementation.
  // Write user own code.
  // ユーザオブジェクトのデストラクタのコードを記述します。
}
 
void ABC_TSCimpl::call(const OctetSeq& in_data,
                            OctetSeq*& out_data)
{
  // Operation "::ABC::ABCCall".
  // Write user own code.
  // ユーザメソッドのコードを記述します。
 
  // メソッドが呼ばれた回数を増加させます。
  // (このメソッドの処理は引数の値と無関係です)
  m_counter++;
  out_data = new OctetSeq();
  out_data->length(0);
 
}

(3) サービス登録処理の流れ・コード

同期型呼び出しの場合と同様です。「2.2.2(3) サービス登録処理の流れ」,「2.2.2(4) サービス登録処理のコード」を参照してください。