## 4 Event Domain Service

### 4.1 Overview of the CosEventDomain Service

The Event Domain service allows programmers to manage a cluster of information channels.

#### 4.1.1 Event Domain Service Components

There are two components in the OMG CosEventDomainAdmin service architecture:

- EventDomainFactory: a factory for creating EventDomains.
- EventDomain: supplies a tool, which makes it easy to create topologies of interconnected channels (i.e. a directed graph).

#### 4.1.2 A Tutorial on How to Create a Simple Service

To be able to use the cosEventDomain application, the cosNotification and, possibly, the cosTime application must be installed.

#### 4.1.3 How to Run Everything

Below is a short transcript on how to run cosEventDomain.

    %% Start Mnesia and Orber
    mnesia:delete_schema([node()]),
    mnesia:create_schema([node()]),
    orber:install([node()]),
    mnesia:start(),
    orber:start(),

    %% Install and start cosNotification.
    cosNotificationApp:install(),
    cosNotificationApp:start(),

    %% Install and start cosEventDomain.
    cosEventDomainApp:install(),
    cosEventDomainApp:start(),

    %% Start a CosEventDomainAdmin factory.
    AdminFac = cosEventDomainApp:start_factory(),

    %% Define the desired QoS settings:
    QoS =
       [#'CosNotification_Property'
        {name='CosEventDomainAdmin':'DiamondDetection'(),
         value=any:create(orber_tc:short(),
         'CosEventDomainAdmin':'AuthorizeDiamonds'())},
        #'CosNotification_Property'
        {name='CosEventDomainAdmin':'CycleDetection'(),
         value=any:create(orber_tc:short(),
         'CosEventDomainAdmin':'ForbidCycles'())}],

    %% Create a new EventDomain:
    {ED, EDId} = 'CosEventDomainAdmin_EventDomainFactory':
                            create_event_domain(Fac, QoS, []),

    %% Now we can add Notification Channels to the Domain. How this
    %% is done, see the cosNotification documentation. Let us assume
    %% that we have gained access to two Channel Objects; add them to the
    %% domain:
    ID1 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch1),
    ID2 = 'CosEventDomainAdmin_EventDomain':add_channel(ED, Ch2),

    %% To connect them, we must first define a connection struct:
    C1 = #'CosEventDomainAdmin_Connection'{supplier_id=ID1,
                                           consumer_id=ID2,
                                           ctype='STRUCTURED_EVENT',
                                           notification_style='Pull'},

    %% Connect them:
    'CosEventDomainAdmin_EventDomain':add_connection(ED, C1),

cosEventDomain 1.1.1
Copyright © 1991-2007 Ericsson AB