• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Hibernating DDS
 

Hibernating DDS

on

  • 2,269 views

This presentation explain how the Object-Relational Mapping layer provided by the OMG DDS standard can be used in order to integrate data distribution into your favorite Object Oriented Programming ...

This presentation explain how the Object-Relational Mapping layer provided by the OMG DDS standard can be used in order to integrate data distribution into your favorite Object Oriented Programming Language, such as Java, C++, C#.

Statistics

Views

Total Views
2,269
Views on SlideShare
2,229
Embed Views
40

Actions

Likes
0
Downloads
85
Comments
0

4 Embeds 40

http://www.prismtech.com 22
http://dds4u.blogspot.com 11
http://www.slideshare.net 4
http://opensplice.blogspot.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Hibernating DDS Hibernating DDS Presentation Transcript

    • OpenSplice DDS Delivering Performance, Openness, and Freedom Angelo Corsaro, Ph.D. Hibernating DDS Product Strategy & Marketing Manager OMG RTESS and DDS SIG Co-Chair angelo.corsaro@prismtech.com with Java and C++
    • Agenda ‣ The Object/Relational Impedance Mismatch ‣ Why Hibernating DDS? Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ DLRL: The Mysterious Acronym ‣ Hibernating DDS with DLRL ‣ Concluding Remarks © 2009, PrismTech. All Rights Reserved
    • Object/Relational Impedance Mismatch [1/2] ‣ When designing and building application with Object Oriented methodologies and programming languages, one often have to deal with the Object/Relational Impedance Mismatch ‣ The Object/Relational Impedance Mismatch arises all the time when data represented Proprietary Information - Distribution without Expressed Written Permission is Prohibited. in a relational form, e.g., stored in a DBMS, has to be manipulated by applications written in Object Oriented Programming Languages ‣ In these cases, the solution is often to manually reconstruct applications’ objects, and their relationships out of the data base tables ‣ This approach however, has several drawbacks, as for instance it is tedious, error- prone, requires application programmers to be familiar with SQL, etc. © 2009, PrismTech. All Rights Reserved
    • Object/Relational Impedance Mismatch [2/2] ‣ Several approaches have been Object-Oriented Representation Relational Representation suggested to gap the object/ relational impedance mismatch ? Alpha Beta a ‣ For the specific case of Data x 0..1 * b y Proprietary Information - Distribution without Expressed Written Permission is Prohibited. opOne() opX() opTwo() Bases, two approaches have opY() received most attention: Theta ‣ Use of OODBMS j k ‣ Use of ORM technologies, such as opA() opB() JDO, Hibernate, etc. ‣ However, due to the ubiquitous presence of RDBMS, ORM techniques are currently predominant © 2009, PrismTech. All Rights Reserved
    • Agenda ‣ The Object/Relational Impedance Mismatch ‣ Why Hibernating DDS? Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ DLRL: The Mysterious Acronym ‣ Hibernating DDS with DLRL ‣ Concluding Remarks © 2009, PrismTech. All Rights Reserved
    • Why Hibernating DDS? ‣ DDS allows application to do publish/ Subscriber subscribe over a Distributed Relational Publisher Data Model B m ‣ DDS Topics, the unit of information that Subscriber A F Publisher Proprietary Information - Distribution without Expressed Written Permission is Prohibited. applications can publish/subscribe, can be J D C seen and treated locally, as if it was a DBMS Subscriber K E Table Publisher Subscriber ‣ Thus, each DDS application can use a subset of SQL92 to access and navigate the set of topics it’s currently subscribing As a result, when using DDS with Object-Oriented Programming Languages the Object/Relational Mismatch needs to be addressed! © 2009, PrismTech. All Rights Reserved
    • A Simple Example[1/3] ‣ Topic Keys can be used to identify ‣ Suppose we have to build an application instances as well as relationships for controlling the temperature in big ‣ Relationships can be navigated by buildings relying on a subset of SQL 92 ‣ The first step is to identify the DDS ‣ Keys can be represented by an Proprietary Information - Distribution without Expressed Written Permission is Prohibited. arbitrary number of Topic fields (actually DCPS) data model capturing the key entities of this application TConditioner ‣ Once this is done, we will write the cID: int TTempSensor temp: float tID: int humidity: float temp: float application by leveraging on DDS fan_level: int TRoom humidity: float status: int rID: int rID: int Readers/Writers and building the rID: int width: float height: float business logic on-top of these length: float TFloor fID: int fID: int abstractions level: int open: int Relational Data Model © 2009, PrismTech. All Rights Reserved
    • A Simple Example [2/3] class Conditioner { public: class Room { explicit Conditioner(int id); public: Conditioner(const TConditioner& tcond) explicit Room(int id); ~Conditioner(); Room(int it, float width, float height, float length); public: ~Room(); void set_temp(float temp); public: void set_humidity(float hum); void set_fan_level(int level); void set_climate(const Climate_t c); void start(); void set_temperature(float temp); void stop(); Proprietary Information - Distribution without Expressed Written Permission is Prohibited. float get_temperature(); void pause(); void set_humidity(float hum); public: float get_humidity(); // Performs required DDS pub/sub activities public: void update(); // Performs required DDS pub/sub activities void flush(); void update(); private: void flush(); TConditioner cond_topic_; TConditionerWriter* cond_writer_; protected: }; void init(int id); private: void TRoom room_topic_; Room::init(int id) { TRoomReader* room_reader_; TTempSensorReader* temp_reader_ = ...; //Resolve the reader TRoomWriter* room_writer_; TConditionerReader* cond_reader_ = ...; //Resolve the reader std::vector<Conditioner> cond_vec_; // Query the reader for the TTempSensor and TConditioner std::vector<TempSensor> temp_vec_; // that have quot;rID == idquot; then add those to the container }; } © 2009, PrismTech. All Rights Reserved
    • A Simple Example [3/3] ‣ As the simple example reveals, if DDS (actually DCPS) is used from an Object Oriented programming language such as Java, or C++, the programmer is either left to deal with the Object/Relational Mismatch Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ Depending on how the programmer tackles this mismatch, its resulting application will be more or less polluted by “DDS” details ‣ Implementing by hand the Object/Relational Mapping is quite a bit of work, which becomes quickly non-creative and repetitive Is there a better way to take tackle the Object/Relational Impedance Mismatch in DDS? © 2009, PrismTech. All Rights Reserved
    • Agenda ‣ The Object/Relational Impedance Mismatch ‣ Why Hibernating DDS? Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ DLRL: The Mysterious Acronym ‣ Hibernating DDS with DLRL ‣ Concluding Remarks © 2009, PrismTech. All Rights Reserved
    • DLRL: The Mysterious Acronym... ‣ The OMG DDS Standard included since its Application inception the Data Local Reconstruction Layer (DLRL). This optional layer provides an Object/Relational Mapping extended Object/Relational Mapping facility for Data Local Reconstruction Layer (DLRL) Proprietary Information - Distribution without Expressed Written Permission is Prohibited. DDS Content Ownership Durability Subscription ‣ The DLRL is quite similar to Hibernate (or Minimum Profile Java Data Objects), although introduces some Data Centric Publish/Subscribe (DCPS) extensions needed to deal with Distributed Systems Real-Time Publish/Subscribe Protocol DDS Interoperability Wire Protocol ‣ DLRL implementation currently exist for C++ UDP/IP and Java © 2009, PrismTech. All Rights Reserved
    • DCPS Application Application ‣ The application works directly at TConditioner TTempSensor the DCPS level cID: int tID: int temp: float temp: float Proprietary Information - Distribution without Expressed Written Permission is Prohibited. humidity: float TRoom humidity: float ‣ When using OO Programming fan_level: int rID: int rID: int status: int width: float rID: int height: float length: float TFloor Languages the Object/Relational fID: int fID: int level: int Impedance Mismatch has to be open: int manually dealt Content DDS v1.2 Ownership Durability Subscription Minimum Profile Data Centric Publish/Subscribe (DCPS) © 2009, PrismTech. All Rights Reserved
    • DLRL Application Application TempSensor temp: float humidity: float getTemp() ‣ The DLRL Layer is used to Room Floor getHumidity() * width: float level: int 1 height: float open: int 1 climate: int length: float Conditioner * climate: int set_status() temp: float provide a Language Integrated 1 set_climate(); set_climate() humidity: float set_temp() get_level() fan_level: int * set_humidity() status: int setTemp() access to DDS data setHumidity() setFanLevel() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. start() stop() pause(): ‣ The Designer has great freedom DDS v1.2 Object/Relational Mapping in deciding how Objects have to Data Local Reconstruction Layer (DLRL) map to Topics TConditioner TTempSensor cID: int tID: int temp: float temp: float ‣ Different Object Reconstruction humidity: float TRoom humidity: float fan_level: int rID: int rID: int status: int width: float rID: int height: float can be created for different length: float TFloor fID: int fID: int level: int open: int applications Content DDS v1.2 Ownership Durability Subscription Minimum Profile Data Centric Publish/Subscribe (DCPS) © 2009, PrismTech. All Rights Reserved
    • Generic DDS Application Application TempSensor temp: float humidity: float getTemp() Room Floor getHumidity() * width: float level: int 1 height: float open: int 1 climate: int length: float Conditioner * climate: int set_status() temp: float 1 set_climate(); set_climate() humidity: float set_temp() get_level() fan_level: int * set_humidity() ‣ In the most general case, different portion of status: int setTemp() setHumidity() setFanLevel() start() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. the application might rely on DLRL or DCPS stop() pause(): depending on their specific needs Object/Relational Mapping Application Data Local Reconstruction Layer (DLRL) ‣ DCPS access might be required for accessing TConditioner TTempSensor cID: int tID: int temp: float temp: float and tuning some specific QoS humidity: float TRoom humidity: float fan_level: int rID: int rID: int status: int width: float rID: int height: float length: float TFloor fID: int fID: int level: int open: int Content DDS v1.2 Ownership Durability Subscription Minimum Profile Data Centric Publish/Subscribe (DCPS) © 2009, PrismTech. All Rights Reserved
    • Agenda ‣ The Object/Relational Impedance Mismatch ‣ Why Hibernating DDS? Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ DLRL: The Mysterious Acronym ‣ Hibernating DDS with DLRL ‣ Concluding Remarks © 2009, PrismTech. All Rights Reserved
    • DLRL Key Features ‣ The main goal of DLRL is that of providing a seamless integration of DDS for Object Oriented Programming Languages ‣ DLRL provides a seamless integration for both: ‣ Applications that want to completely ignore the relational nature of DCPS Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ Application that need to leverage an existing DCPS Data Model ‣ DLRL provides support for: ‣ Local/Shared Attributes (only shared attributes are subject to data distribution) ‣ Mono-/Multi-valued attributes ‣ Association, with support for both one-to-one, one-to-many ‣ Aggregation, with support for both one-to-one, one-to-many ‣ Single Inheritance © 2009, PrismTech. All Rights Reserved
    • Structural Mapping Two approaches are possible for structural mapping of DLRL Objects to DCPS DLRL mapping to DCPS Topics can be automatically inferred by the 1 middleware using default mapping rules Proprietary Information - Distribution without Expressed Written Permission is Prohibited. DLRL mapping to DCPS Topics can be specified by the designer, thus making it 2 possible for reconstructing Object Oriented views of existing data models © 2009, PrismTech. All Rights Reserved
    • Structural Mapping DLRL mapping to DCPS Topics can be automatically inferred by the 1 middleware using default mapping rules Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Track Radar x: real 0..1 * y: real a_radar tracks comments[*]: string Track3D z: real © 2009, PrismTech. All Rights Reserved
    • Structural Mapping DLRL mapping to DCPS Topics can be automatically inferred by the 1 middleware using default mapping rules RADAR_TOPIC oid: int Proprietary Information - Distribution without Expressed Written Permission is Prohibited. TRACK_TOPIC class: string Track oid: int Radar x: real x: real 0..1 * y: real y: real a_radar tracks comments[*]: string radar: int comments: StringSeq Track3D z: real T3D_TOPIC oid: long z: real RADAR_TRACKS_TOPIC r_oid: int index: int T_class: string T_oid: int © 2009, PrismTech. All Rights Reserved
    • Structural Mapping DLRL mapping to DCPS Topics can be specified by the designer, thus making it 2 possible for reconstructing Object Oriented views of existing data models Proprietary Information - Distribution without Expressed Written Permission is Prohibited. TConditioner TTempSensor cID: int tID: int temp: float temp: float humidity: float TRoom humidity: float fan_level: int rID: int rID: int status: int width: float rID: int height: float length: float TFloor fID: int fID: int level: int open: int © 2009, PrismTech. All Rights Reserved
    • Structural Mapping DLRL mapping to DCPS Topics can be specified by the designer, thus making it 2 possible for reconstructing Object Oriented views of existing data models TempSensor temp: float humidity: float getTemp() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Room Floor getHumidity() * width: float level: int 1 height: float open: int 1 climate: int length: float Conditioner * climate: int set_status() temp: float 1 set_climate(); set_climate() humidity: float set_temp() get_level() fan_level: int * set_humidity() status: int setTemp() setHumidity() setFanLevel() start() stop() pause(): TConditioner TTempSensor cID: int tID: int temp: float temp: float humidity: float TRoom humidity: float fan_level: int rID: int rID: int status: int width: float rID: int height: float length: float TFloor fID: int fID: int level: int open: int © 2009, PrismTech. All Rights Reserved
    • Specifying the Structural Mapping ‣ The structural mapping between DLRL and DCPS entities is specified by relying, depending on the case, Proprietary Information - Distribution without Expressed Written Permission is Prohibited. on: ‣ The IDL description of the DLRL Objects ‣ The Model Tags defining the mapping (which could be default) ‣ An Optional IDL file specifying DCPS Topics © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects Object Home(s) Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Concepts Object Cache The mechanism at the foundation is a managed Object Cache: ‣ An Object Cache can be populated by different types (classes) of Objects. ‣ Each object class has its own manager called an ObjectHome. ‣ They can inform the application about object creation/modification/ deletion. ‣ Classes may contain navigable relationships to other classes. ‣ Each Object class may inherit from 1 other Object class. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects DR DR DR Proprietary Information - Distribution without Expressed Written Permission is Prohibited. OpenSplice DDS Information backbone Processing Updates ‣ DCPS updates arrive as separate samples at separate times. ‣ DLRL Updates are processed in ‘update rounds’: ‣ ObjectHomes read all available samples from the DDS information backbone and update their corresponding objects in the Cache accordingly. ‣ Objects are allocated once and their state is ‘overwritten’ on subsequent updates. ‣ Therefore an Object always contains the latest available state. ‣ Push mode: update rounds start when new data arrives. The application gets notified by Listeners. ‣ Pull mode: the application can determine the start of each update round manually. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects DR DR DR Proprietary Information - Distribution without Expressed Written Permission is Prohibited. OpenSplice DDS Information backbone Processing Updates ‣ DCPS updates arrive as separate samples at separate times. ‣ DLRL Updates are processed in ‘update rounds’: ‣ ObjectHomes read all available samples from the DDS information backbone and update their corresponding objects in the Cache accordingly. ‣ Objects are allocated once and their state is ‘overwritten’ on subsequent updates. ‣ Therefore an Object always contains the latest available state. ‣ Push mode: update rounds start when new data arrives. The application gets notified by Listeners. ‣ Pull mode: the application can determine the start of each update round manually. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects attach_listener Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects attach_listener Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects on_begin_ updates() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects on_object_created() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects on_object_modified() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects on_end_ updates() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Application DR DR DR get_modified_objects() OpenSplice DDS Information backbone Notifying the application The Object Caches offer two ways to notify an application of incoming information: ‣ Listeners can be triggered for each modification of an object’s state. ‣ Listeners registered to the Cache indicate the start and end of each update round. ‣ Listeners registered to the ObjectHome pass each modification back as a callback argument. ‣ With a simple mechanism that can be translated into callbacks for Listeners on individual objects. ‣ It is possible to get a separate list of all objects that have been created/modified/deleted in the current update round. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects DR DR DR DW DW DW Proprietary Information - Distribution without Expressed Written Permission is Prohibited. DCPS Using snapshots Some applications want to be able to modify or create certain objects: ‣ An initial set of Objects may be cloned into a writeable CacheAccess. ‣ Available objects may then be modified locally. ‣ New objects can be created in the CacheAccess as well. ‣ The ‘write’ operation instructs the ObjectHomes to write any modifications into the system. © 2009, PrismTech. All Rights Reserved
    • Working with DLRL Objects S on_object_in() Application Proprietary Information - Distribution without Expressed Written Permission is Prohibited. DR DR DR DCPS Creating and managing Selections A Selection mechanism can keep track of subsets of information: ‣ Selections are created and managed by the ObjectHomes. ‣ A Criterion plugged into a Selection determines the boundaries of a subset: ‣ A QueryCriterion determines boundaries based on an SQL statement. ‣ A FilterCriterion determines boundaries based on user-defined callback filters. ‣ Selections can notify the application when objects enter and leave it. © 2009, PrismTech. All Rights Reserved
    • Putting it all Together Track.idl #include quot;dlrl.idlquot; valuetype stringStrMap; // StrMap<string> valuetype TrackList; // List<Track> valuetype Radar; Track valuetype Track : DLRL::ObjectRoot { Radar x: real 0..1 public double x; Proprietary Information - Distribution without Expressed Written Permission is Prohibited. * y: real a_radar tracks public double y; comments[*]: string public stringStrMap comments; public long w; public Radar a_radar; }; Track3D z: real valuetype Track3D : Track { public double z; }; valuetype Radar : DLRL::ObjectRoot { public TrackList tracks; }; © 2009, PrismTech. All Rights Reserved
    • Putting it all Together mapping.xml RADAR_TOPIC <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?> oid: int <!DOCTYPE Dlrl SYSTEM quot;dlrl.dtdquot;> <Dlrl name=quot;Examplequot;> <templateDef name=quot;stringStrMapquot; pattern=quot;StrMapquot; itemType=quot;stringquot;/> TRACK_TOPIC Proprietary Information - Distribution without Expressed Written Permission is Prohibited. <templateDef name=quot;TrackListquot; pattern=quot;Listquot; itemType=quot;Trackquot;/> class: string Track oid: int Radar x: real <classMapping name=quot;Trackquot;> x: real 0..1 * y: real y: real <local name=quot;wquot;/> a_radar tracks comments[*]: string radar: int </classMapping> comments: StringSeq <associationDef> <relation class=quot;Trackquot; attribute=quot;a_radarquot;/> <relation class=quot;Radarquot; attribute=quot;tracksquot;/> Track3D z: real </associationDef> T3D_TOPIC oid: long </Dlrl> z: real RADAR_TRACKS_TOPIC r_oid: int index: int T_class: string T_oid: int © 2009, PrismTech. All Rights Reserved
    • Putting it all Together main.cpp DDS::DomainParticipant_var dp; DLRL::CacheFactory_var cf; main.cpp (cont) /* * Init phase /* */ * Creation, modifications and publication DLRL::Cache_var c = cf->create_cache (WRITE_ONLY, dp); Proprietary Information - Distribution without Expressed Written Permission is Prohibited. */ RadarHome_var rh; Radar_var r1 = rh->create_object(c); TrackHome_var th; Track_var t1 = th->create-object (c); Track3DHome_var t3dh; Track3D_var t2 = t3dh->create-object (c); c->register_home (rh); t1->w(12); // setting of a pure local attribute c->register_home (th); t1->x(1000.0); // some DLRL attributes settings c->register_home (t3dh); t1->y(2000.0); c->register_all_for_pubsub(); t1->a_radar->put(r1);// modifies r1->tracks accordingly // some QoS settings if needed t2->x(1000.0); c->enable_all_for_pubsub(); t2->y(2000.0); t2->z(3000.0); t2->a_radar->put(r1);// modifies r1->tracks accordingly c->write(); // all modifications are published © 2009, PrismTech. All Rights Reserved
    • Agenda ‣ The Object/Relational Impedance Mismatch ‣ Why Hibernating DDS? Proprietary Information - Distribution without Expressed Written Permission is Prohibited. ‣ DLRL: The Mysterious Acronym ‣ Hibernating DDS with DLRL ‣ Concluding Remarks © 2009, PrismTech. All Rights Reserved
    • Concluding Remarks ‣ DDS provides a very powerful facility for automating Application Object/Relational Mapping, namely the Data Local TempSensor temp: float humidity: float Reconstruction Layer (DLRL) getTemp() Room Floor getHumidity() * width: float level: int 1 height: float open: int 1 climate: int length: float Conditioner * climate: int set_status() temp: float ‣ The DLRL is an optional layer of the DDS v1.2 standard, 1 set_climate(); set_climate() humidity: float set_temp() get_level() fan_level: int * set_humidity() status: int setTemp() setHumidity() and implementation exists, e.g., OpenSplice DDS, that setFanLevel() Proprietary Information - Distribution without Expressed Written Permission is Prohibited. start() stop() pause(): support it for both C++ and Java Object/Relational Mapping Application ‣ The use of DLRL make it much more productive to write Data Local Reconstruction Layer (DLRL) TConditioner TTempSensor cID: int tID: int DDS application with Object Oriented Languages temp: float temp: float humidity: float TRoom humidity: float fan_level: int rID: int rID: int status: int width: float ‣ It is easy to get started with DLRL since it is quite similar rID: int height: float length: float TFloor fID: int fID: int level: int to other popular Object/Relational Mapping open: int Content Technologies such as Hibernate, JDO, etc. DDS v1.2 Ownership Durability Subscription Minimum Profile Data Centric Publish/Subscribe (DCPS) © 2009, PrismTech. All Rights Reserved
    • Upcoming Webcasts OpenSplice | DDS Webcast Series April 22nd, 2009 OpenSplice DDS: The Open Source Messaging Proprietary Information - Distribution without Expressed Written Permission is Prohibited. Accelerating Wall Street Why Should I Attend? • Understand why Open Source is the best strategic, technical, and financial decision for your next messaging technology. • Discover how OpenSplice DDS can help you cope with increasing market data rates while dramatically reducing your trading latency • Understand how OpenSplice DDS can help you tear down the messaging silos and unify data distribution across your trading platform © 2009, PrismTech. All Rights Reserved
    • Online Resources http://www.opensplice.com/ emailto:opensplicedds@prismtech.com Proprietary Information - Distribution without Expressed Written Permission is Prohibited. http://www.opensplice.com http://opensplice.blogspot.com http://www.dds-forum.org http://portals.omg.org/dds http://www.youtube.com/OpenSpliceTube © 2009, PrismTech. All Rights Reserved