POEM vs. EVIL

-- Event model of PocoCapsule/CORBA

Copyright© 2006 by Pocomatic Software. All Rights Reserved.

<prod@pocomatic.com>

Sept. 21, 2006


The OMG Event/Notification standard defines a decoupled publish/subscribe event service for distributed CORBA applications. This service is one of the most important system functions for many mission critical CORBA applications. In telecom domain, CORBA/TMN specifications defined by various industry and international organizations, such as TMF, ITU-T and 3GPP, all heavily rely on OMG Notification Service for events and alarms delivery. Large number of implementations based on above specifications have been deployed.

In OMG Event/Notification specification, four coarse-grained event types are defined, namely typed, untyped, structured and sequenced events. Other vertical standard organizations (e.g. TMF, ITU-T, 3GPP) or users (Cisco, Nokia, etc.) further fine-grained above definition to specify their domain specific or vendor specific event models in more details. We refer to all these event models, which have been defined and widely deployed in real world applications, as Plain Old Event Models (POEM) of CORBA applications.

The CORBA Component Model (CCM) defines an event model that does not comply to POEM. Because this model effectively defines events as OMG IDL valuetypes, it is referred to as EVIL (Events as Valuetypes of IdL). EVIL is a rare and weird practice in existing CORBA applications, due to the fact that not only EVIL requires business logic developers to write more system logic code (double dispatch and valuetype factory), but also, EVIL is truly an evil to most existing Event/Notification Service implementations. Most of these implementations do not support EVIL pass-through. Even if EVIL pass-through were supported, it would incur noticeable network bandwidth and system performance overhead in real world TMN applications. This implies:

  • EVIL applications are practically not supported by most existing implementations of OMG Event/Notification Service without additional system level tweak, such as rebuild or load application specific EVIL factories into the service.

  • EVIL applications do not interoperate with existing plain old event applications.

  • CCM can't be used to deploy existing plain old event emitter (supplier) and listener (consumer) implementations.

On the contrary, PocoCapsule/CORBA does not introduce an alien event model. Instead, it preserves and explicitly supports the proven and widely used POEM. This implies that:

  • PocoCapsule/CORBA event/notification applications are seamlessly supported by all existing implementations of OMG Event/Notification Service.

  • PocoCapsule/CORBA applications can seamlessly interoperate with plain old OMG event applications, meaning, events sent from PocoCapsule/CORBA emitters can be delivered to conventional POEM event consumers, and vice versa.

  • Event emitter (supplier) and listener (consumer) implementations developed for plain old event applications can be deployed explicitly using PocoCapsule/CORBA without any additional engineering effort.

The comparison of PocoCapsule/CORBA POEM vs. CCM EVIL is summarized in the following table:


PocoCapsule/CORBA

CCM (and LwCCM, D&C)

Event Model

POEM

EVIL

Supported Event Types and Formats

Typed, untyped, structured and sequence events, with detail formats defined by applications.

Valuetypes inserted into CORBA Anys of untyped events.

Support event formats defined by TMF, ITU, 3GPP, or other vendor specific TMNs.

Yes

No

No additional system logic code required

True

False (requiring code of double dispatch and valuetype factories)

No performance overhead

True

False (Poorly performed for TMN events.)

No additional network bandwidth consumption

True

False (Noticeable additional bandwidth consumption)

Seamlessly supported by OMG Event/Notification Service implementations

Yes

No (except for VisiNotify)

Seamlessly interoperate with conventional POEM applications

Yes

No

Can deploy conventional POEM suppliers or consumers.

Yes

No

Deployment description can easily be understood, created and maintained

Yes

No (require heavy tooling)

Support QoS

Yes

No (not by the standard)

Support event filter

Yes

No (very tough)

Support channel federation

Yes

No (unless do it programmatically)

Besides these obvious advantages of PocoCapsule/CORBA POEM over CCM EVIL, PocoCapsule/CORBA POEM is also superior than traditional programmatic Event/Notification application deployment. In programmatic deployment, deploying an event supplier or consumer and connecting it to an event channel is a challenge even for experienced system logic developers. With PocoCapsule/CORBA, it is easy even for novices. A developer only needs to write business logic of an event emitter or listener servant bean, and write a deployment descriptor to conceptually describe “what is” the desired connection instead of explicitly describing (or programming) “how to” wire it up. For instance, to subscribe a typed event consumer to a typed event service, a developer only needs to write the POA event consumer servant bean, and then deploy it using the following descriptor:

   
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE beans SYSTEM "http://www.pocomatic.com/poco-spring.dtd">

    <beans>
        <orb>
            <event-consumer-adapter type="typed">
                <service ior="corbaloc:rir:/NotificationService"/>
                <event-consumer>
                    <bean class="MyTypedConsumerImpl"/>
                </event-consumer>
            </event-consumer-adapter>
        </orb>
    </beans>

The above deployment description is highly conceptual and intuitive that can easily be understood, created, and maintained by novices and business logic developers with virtually no tooling. The <event-consumer-adapter> element describes that the consumer object, expressed as the child element <event-consumer>, is to be connected to the service object, expressed as the child element <server>. This conceptual description encapsulates tens of lines system logic code seen in traditional POEM applications.

PocoCapsule/CORBA not only shifts away complexities of connecting applications to Event/Notification channels but also largely conceals unnecessary system logic differences of connecting to services of different event types. In traditional POEM applications, the API and procedure of connecting a typed event application to a typed event channel are significantly different from that of connecting a structured event application to a channel. In PocoCapsule/CORBA, these two connections are described in the same expression. For instance, to change the previous example to use structured events, the developer only needs to replace the typed event consumer servant with a structured event consumer servant, and slightly modify the deployment descriptor into the one as follows:

    
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE beans SYSTEM "http://www.pocomatic.com/poco-spring.dtd">

    <beans>
        <orb>
            <event-consumer-adapter type="structured">
                <service ior="corbaloc:rir:/NotificationService"/>
                <event-consumer>
                    <bean class="MyStructuredConsumerImpl"/>
                </event-consumer>
            </event-consumer-adapter>
        </orb>
    </beans>

Here, the only differences to the previous typed event example are the type attribute of the <event-consumer-adapter> element and the class attribute of the <event-consumer> element.

Further, it is easy to add an event filter to this connection by adding a <prop> element as in the following description:

    
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE beans SYSTEM "http://www.pocomatic.com/poco-spring.dtd">

    <beans>
        <orb>
            <event-consumer-adapter type="structured">
                <service ior="corbaloc:rir:/NotificationService"/>
                <event-consumer>
                    <bean class="MyStructuredConsumerImpl"/>
                </event-consumer>
                <props>
                    <prop key=”filter”>$event_name=='alarm'</prop>
                </props>
            </event-consumer-adapter>
        </orb>
    </beans>

The complete code of this example can be found in the examples/event directory of PocoCapsule installation.

More detailed descriptions of PocoCapsule/CORBA can be found in the PocoCapsule Developer Guide.

The evaluation version of PocoCapsule/CORBA can be downloaded from Pocomatic Software.