Upload
charleen-watts
View
214
Download
0
Embed Size (px)
DESCRIPTION
3 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
Citation preview
Using CORBA To Bridge C++ and Using CORBA To Bridge C++ and JMSJMS
Niall Stapley, CERN
email: [email protected]://stapley.web.cern.ch/stapley/CORBAtoJMS/doc/
2
OverviewOverview
• Alarms• Message Oriented Middleware• Architecture• MessageStruct• Bridge Description• The C++ client• Current Status
3
AlarmsAlarms• 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
CPU
Alarm System
4
Message Oriented MiddlewareMessage 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
5
ArchitectureArchitecture
Non-Java Node
Java Server Node
1
0..*
CORBA IIOP
JMS CORBA Bridge JMSSubscribeAdapter
C++ ClientSubscribeListener
PublishAdapterJMS Broker
Java Node
Java Client
1
0..*
TCP/IP
6
MessageStructMessageStructunion 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;
};
7
Bridge DescriptionBridge DescriptionServer PublishAdapterServant
CORBAToJMSConverter
CORBA
1
1
1 1
«interface»MOMPublisher
SubscribeAdapterServant
JMSToCORBAConverter
SubscriptionsManager
SubscriptionListenerAdapterSubscriptionListener
SubscriptionListener
1 11*
1*
«interface»MOMSubscriber
8
Publish ExamplePublish 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
9
Subscribe ExampleSubscribe 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
10
Current StatusCurrent 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
11
And Finally...And Finally...
• Thanks for your attention!
• Any questions?