体验CORBA组件模型CCM:2、实例

本文详细介绍了基于CIAO的CCM组件开发过程,通过一个简单的Monitor和Controller组件实例,展示了从编写IDL、CIDL,到实现组件、运用CoSMIC描述组件、编写客户程序和部署运行的全过程。尽管CCM开发流程相对繁琐,但作为EJB的多语言扩展,它在分布式嵌入式应用中有一定优势。
摘要由CSDN通过智能技术生成

体验CORBA组件模型CCM2、实例

摘要:

通过一个简单的实例,详细介绍基于CIAOCCM组件开发过程。

正文:

前面讲过,CCM是以EJB为蓝本来定义的,因此,二者在组件分类(与EJB被分为SessionEntityMessage Driven三种类型一样,CCM组件被分为ServiceSessionProcessEntity四种类型)、组件的基本组成、开发/部署基本流程等方面十分相似,但由于目前CCM组件应用服务器/应用框架等远不如EJB成熟,在开发环境的支持方面也远不如EJB完善,因此,其开发过程还比较繁琐。

 

下面将围绕如下的应用需求详细讨论CIAO平台下CCM开发的详细过程:

一个Monitor程序负责监视多台设备的状态,且每个设备上均运行一个设备控制程序ControllerController的客户端通过该组件提供的接口来操控Controller;按照常规的方法,可以采用轮询的方式,Monitor定期向Controller查询设备目前的状态信息,也可以通过Event ServiceControllerMonitor间建立事件通道。在这里,我们采用CCM来解决上述问题。

整个系统包括两个组件ControllerMonitor;当设备启动时,Controller通过Monitor提供的DeviceIDAllocator接口获得由Monitor分配的唯一标识信息(如IP地址等信息,本例中为简化问题,该唯一标识仅由一个表示名称的字符串组成,且Monitor不会记忆已分配给每个设备的标识);当Controller状态发生变化时,向Monitor发布DeviceStatus状态变化通知事件。

一、编写IDL

IDL文件被用于描述组件ControllerMonitor之间的通信接口、组件的基本组成(包括组件所支持的Facet/ReceptacleeventtypeEvent Source/Event SinkComponent Home、组件的Attribute等)以及组件对外提供的接口。

步骤:

1、建立一个目录DeviceAdmin,在该目录下创建三个子目录:ControllerDeviceBaseMonitor,分别作为Controller组件工程文件、组件公共工程文件、Monitor组件工程文件的存放目录。

2、在DeviceBase下建立如下idl文件,其中定义了一些组件间通信需要用到的基本接口及结构。

 

//DeviceBase.idl

#include <Components.idl>

 

module Device {

      const long MAX_RUN_LEVEL = 5;

      const long MIN_RUN_LEVEL = 0;

     

      // a demo device unique id

      struct DeviceID {

            string device_name;

      };

      // a demo device status

      struct DeviceStatus {

            long run_level;

      };

 

      struct StatusPair {

            DeviceID device_id;

            DeviceStatus device_status;

      };

 

      /**

      * @event DeviceStatus

      *

      * @brief component event between Monitor and Controller

      * Controller publishes this event when status change.

      */

      eventtype StatusEvent {

            public StatusPair status_pair;

      };

 

      /**

      * @interface DeviceIDAllocator

      *

      * @brief Controller use this facet to get a unique id from Monitor

      */

      interface D

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值