3.5.2 CORBAサーバー・オブジェクトの作成

Serverオブジェクトでは、次のタスクが実行されます:

  • CORBAサーバー・アプリケーションを初期化します。初期化の過程では、ファクトリの登録、CORBAサーバー・アプリケーションで必要なリソースの割当て、およびXAリソース・マネージャの起動(必要な場合)が行われます。
  • CORBAサーバー・アプリケーションの停止とクリーンアップを実行します。
  • CORBAクライアントのリクエストを満たすために必要なCORBAオブジェクトをインスタンス化します。

CORBAサーバー・アプリケーションでは、Serverオブジェクトはすでにインスタンス化されており、Serverオブジェクトのヘッダー・ファイルを利用することができます。サーバー・アプリケーションを初期化および解放するメソッド、およびサーバーント・オブジェクトを作成するメソッド(必要な場合)は、独自に実装してください。

次のコード・スニペットには、Simpappサンプル・アプリケーションのServerオブジェクトのC++コードが含まれています。
static CORBA::Object_var static_var_factory_reference;
// Method to start up the server
CORBA::Boolean
Server::initialize (int argc, char *argv[])
{
  // Create the Factory Object Reference
  static_var_factory_reference = TP::create_object_reference (
      _tc_SimpleFactory->id (), "simple_factory", CORBA::NVList::_nil ());
  // Register the factory reference with the FactoryFinder
  TP::register_factory (static_var_factory_reference.in (),
                        _tc_SimpleFactory->id ());
  return CORBA_TRUE;
}
// Method to shutdown the server
void
Server::release ()
{
  // Unregister the factory.
  try
    {
      TP::unregister_factory (static_var_factory_reference.in (),
                              _tc_SimpleFactory->id ());
    }
  catch (...)
    {
      TP::userlog ("Couldn't unregister the SimpleFactory");
    }
}
// Method to create servants
Tobj_Servant
Server::create_servant (const char *interface_repository_id)
{
  if (!strcmp (interface_repository_id, _tc_SimpleFactory->id ()))
    {
      return new SimpleFactory_i ();
    }
  if (!strcmp (interface_repository_id, _tc_Simple->id ()))
    {
      return new Simple_i ();
    }
  return 0;
}