next_inactive up previous


CASL: CORBA API: Руководство Программиста
DocumentId:GradSof-CASL-CORBA-r-PG-12.02.2002-1.0.0

Введение

Одним из сервисов CASL является сервис CORBA API. Что это такое - это просто CASL оболочка вокруг ORB, поставляемой вместе с CASL, которая предоставляет унифицированный интерфейс к функциональности ORB и набор утилитных функций.

C++ Интерфейс

Определения CORBA сервисов находяться в файле :

 <CASL-ROOT>/include/GradSoft/CASL/CORBAService.h

Публичные методы CASL сервиса приведены ниже:

namespace CASL {


class CORBAService: public CASL::Service
{ 
public:

  /**
   * return string "CORBAService"
   **/
  virtual const char* name() const;

  /**
   * init
   **/
  virtual void init(ServerContext* );

  /**
   * return 
   *    false, if we work in client-only mode.
   *    true, otherwice
   **/
  virtual bool requireThread();

  /**
   * run CORBA Service.
   **/
  virtual void run();

  /**
   * close
   **/
  virtual void close();

  //
  // CORBA specific stuff.
  //

  /**
   * return ORB
   **/
  virtual CORBA::ORB_ptr  getORB();

  /**
   * throw CASL::Exception with code 1001 and message about 
   * CORBA::SystemException
   **/
  virtual void  throwCORBAInvokedException(const CORBA::SystemException& ex);

  /**
   * print information about CORBA::SystemException to stream out.
   **/
  virtual void  printCORBASystemException(const CORBA::SystemException& ex, 
                                  ostream& out);

  /**
   * pring information about CORBA::SystemException to string
   **/
  virtual std::string  stringCORBASystemException(
                                      const CORBA::SystemException& ex);

private:

 ..........

};

}

Описание методов

Стандартные методы сервиса: name, init, run и requireThread.

Отдельного пояснения здесь требуют только метод run() и requireThread : CORBA Сервис может работать в двух режимах: клиента и сервером. Это регулируется булевым параметром сервиса ClientOnly.

Когда ClientOnly установлен в true, CORBAService::init выполняет инициализацию ORB, run не делает ничего - т. е. в этом случае CASL CORBA Сервис работает как API сервис. В случае, когда ClientOnly установлен в false 1, run содержит вызов orb::run(), и вызывается в отдельном потоке, соответственно requireThread возвращает true. Тогда CASL приложение становится сервером и принимает CORBA запросы по сети. Заметим, что для правильной работы CORBA приложений внутри CASL необходимо установить многопоточную thread policy.

Да, кстати все параметры сервиса:

Специфические методы CORBA сервиса

Доступ к CORBA Servicу из других компонент CASL

CORBA Сервис CASL доступен из других CASL-компонент по имени CORBAService.

Типичный фрамент кода для получения этого сервиса:

void MyService::initCORBA() throw(CASL::Exception)
{
   CASL::Service* srv = getServerContext().getService("CORBAService");
   corbaService_p_ = dynamic_cast<CASL::CORBAService*>(srv);
   if (corbaService_p_==NULL) {
     throw CASL::Exception("Can't load CORBA Service: bad service type");
   }
}

Настройка библиотек и конфигурации запуска

CORBA сервис находится в разделяемой библиотеке, которая имеет вид типа: libCASL_CORBA_<ORB-name>.so, в зависимости от ORB, вместе с которой поставляется CASL: например - libCASL_CORBA_TAO.so.

Соответсвенно, если вы используете CORBA сервис CASL, то перед загрузкой Вашего сервиса необходимо загрузить CORBA сервис - конфигурационный файл будет выглядеть приблизительно следующим образом:

<Service Name="CORBAService" Library="libCASL_CORBA_TAO">
 <parameter>
  <name> ClientOnly </name>
  <value> false </value>
 </parameter> 
 <parameter>
  <name> ORBArgs  </name>
  <value> 
    -ORBInitRef NameService=corbaloc::my.host.com:2809/NameService 
  </value>
</Service>
<Service Name="MyService" Library="libCASL_My">
  my parameters.
</Service>

Список сообщение об ошибках

1001
- Произошло системное исключение CORBA.

Перечень изменений

  1. 22.04.2002 - первая внутренняя редакция.
  2. 12.02.2002 - создан.



Footnotes

... false1
так по умолчанию


GradSoft