package org.jacorb.demo.events; /** * @authors Joerg v. Frantzius, Rainer Lischetzki, Gerald Brose 1997 * * A simple demo for using the event channel as a push supplier of events. * */ import org.omg.CosNaming.*; import org.omg.CosEventChannelAdmin.*; import org.omg.CosEventComm.*; import org.omg.CORBA.Any; class PullSupplierDemo extends Thread implements PullSupplierOperations { Any event = null; public PullSupplierDemo() { start(); } public void disconnect_pull_supplier() { System.out.println("Bye."); } static public void main (String argv[]) { org.omg.CosEventChannelAdmin.EventChannel e = null; org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(argv, null); try { NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService")); e = EventChannelHelper.narrow(nc.resolve(nc.to_name("eventchannel.example"))); } catch( Exception ex ) { ex.printStackTrace(); } SupplierAdmin supplierAdmin = e.for_suppliers(); ProxyPullConsumer proxyPullConsumer = supplierAdmin.obtain_pull_consumer(); try { org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA")); PullSupplierPOATie pt = new PullSupplierPOATie( new PullSupplierDemo()); pt._this_object(orb); org.omg.CORBA.Object o = poa.servant_to_reference( pt ); poa.the_POAManager().activate(); proxyPullConsumer.connect_pull_supplier( PullSupplierHelper.narrow(o) ); } catch( Exception ex ) { ex.printStackTrace(); } } public Any pull() throws Disconnected { System.out.println("I m being pulled."); event = org.omg.CORBA.ORB.init().create_any(); event.insert_string("Pull."); return event; } public void run() { // do something while( true ) { try { synchronized( this ) { wait(); } } catch( Exception e ) { disconnect_pull_supplier(); } } } public Any try_pull( org.omg.CORBA.BooleanHolder has_event) throws Disconnected { System.out.println("I m being try_pulled."); event = org.omg.CORBA.ORB.init().create_any(); event.insert_string("TryPull."); has_event.value = true; return event; } }