CORBA的Event Service提供了一种分发事件通知的方式。
Event Servcie的Event Channel从一个Supplier那里得到事件,发送到一个或多个Consumer那里。
事件可以用push的方式发送,也可以用pull的方式发送,也可以混合push和pull。
Event Service的实现可以看JacORB安装目录下的\idl\omg目录中的IDL文件。
CosEventComm.idl
CosEventChannelAdmin.idl
用类图来表示:
通过这个类图,可以很清晰的得到使用Event Service的步骤。以push mode为例,
Server侧(Supplier)
1)创建一个类,继承自PushSupplierPOA,这个类就是Server侧的Supplier的实现类。
2)创建一个org.jacorb.events.EventChannelImpl的对象,它实现了EventChannel的接口。
然后向NameService注册这个Channel,注册时提供一个Channel名。
3)调用EventChannelImpl对象的for_suppliers()方法,得到一个SupplierAdmin对象。
4)调用SupplierAdmin对象的obtain_push_consumer()方法,得到一个ProxyPushConsumer对象。
5)创建1)中的Supplier的实现类的一个实例。
在上面4)得到的ProxyPushConsumer对象上调用connect_push_supplier()方法,
把Supplier的实现类的实例传给此方法。
6)现在Server侧已经连接到Event Channel,可以调用ProxyPushConsumer对象的push()方法来发送事件通知给Channel了。