110 likes | 237 Views
Using CORBA To Bridge C++ and JMS. Niall Stapley, CERN email: niall.stapley@cern.ch http://stapley.web.cern.ch/stapley/CORBAtoJMS/doc /. Overview. Alarms Message Oriented Middleware Architecture MessageStruct Bridge Description The C++ client Current Status. Alarms.
E N D
Using CORBA To Bridge C++ and JMS Niall Stapley, CERN email: niall.stapley@cern.ch http://stapley.web.cern.ch/stapley/CORBAtoJMS/doc/
Overview • Alarms • Message Oriented Middleware • Architecture • MessageStruct • Bridge Description • The C++ client • Current Status
Alarms • Part of CERN SL/CO. • Gather, analyze, distribute fault states. • Sources from any part of CERN: • heterogeneous platforms: • Servers • PCs • VME computers • and languages: • C, C++ • Java
Message Oriented Middleware • What is it? • Queue-based asynchronous message exchange • Provides reliability, flexibility, portability • Allows many-to-many communication • Good for event-driven communication • Java Message Service is the Java standard • Includes publish and subscribe • CMW project defined a MOM API • which simplifies JMS • but only implemented in Java
MessageStruct union BodyFormatUnion switch (BodyFormatEnum) { case BYTES_FORMAT: OctetSeq octetSeqV; case TEXT_FORMAT: string stringV; case MAP_FORMAT: MapSeq mapSeqV; case STREAM_FORMAT: DataTypeUnionSeq dataTypeUnionSeqV; case ANY_FORMAT: any anyV; }; struct MessageStruct { HeaderSeq headers; PropertySeq properties; BodyFormatUnion body; };
Publish Example #include <include_the_world.h> using namespace everything; int main (int argc, char* argv[]) { Publisher &the_publisher = Publisher::init( argc, argv ); TextMessage message(); message.setStringProperty( "the_name", "the_value" ); message << "This is inserted into the body"; the_publisher.publish( "CERN.TEST", message ); return (EXIT_SUCCESS); } // main
Subscribe Example #include <include_the_world.h> using namespace everything; void messageHandler (Message &message); int main (int argc, char* argv[]) { Subscriber &the_subscriber = Subscriber::init( argc, argv ); long long handle = the_subscriber.subscribe( jms_topic, "", messageHandler ); // do other stuff the_subscriber.unsubscribe( handle ) return (EXIT_SUCCESS); } //main
Current Status • Provides Publish / Subscribe MOM API as shown. • Uses JacORB and Orbix/E • Potential attention areas • Increase security • The long descriptor. • Add user / password protection. • Add JMS Message Headers. • Dynamic Object/IDL conversion handler. • extern ‘C’ client library • Start testing it with alarms
And Finally... • Thanks for your attention! • Any questions?