Global Data Space PreviousNext
Data Distribution Service (DDS) Forum > DDS Technical Forum >
Next message Sonia Vats  posted on Monday, September 07, 2009 - 07:52 am
hi , I want to develop a distributed application for which I want DDS as middleware. I have gone through the DDS architecture and I have some doubts as:
1: I want to develop the some 10 applications which will communicate through DDS middleware. These 10 applications will act as publichers and subscribers for some of its data and their value...THey won't be included in DDS middleware...Under which module of DDS they will interact...Will I need to create their instance??how???
2: Where would DDS resides??? will it share memory with each application??? or It wouuld be seperate library type and would get linked or IT would have its own memory space???

Please help me in this regards...
Next message Hans van 't Hag  posted on Monday, September 07, 2009 - 12:57 pm
Hi Sonia,

I'm having a little difficulty understanding your first question. The basic 'pattern' for utilizing DDS is that once you agree on the data to be 'shared' by publishers/writers, you capture those types in an idl-file and use a idl-to-language-compiler (that comes with the DDS-distribution) to generate some headers (for type-specific readers/writers and 'type-support' which is basically a means to make the middleware aware of the types that the middleware will have to support) that you use in generating your appliations.

Then, at runtime (and thats basically addressing your second question), your applications will need a DDS-infrastructure that 'does the actual work' of distributing the data and/or maintaining it for late-joining applications. Here you see that different vendors have different approaches in how to realize the data-distribution and data-persistence, but in all cases, there's a library that is (dynamically) linked to your application (that basically implements the DDS-API) and then depending on the specific vendor, some additional services that (transparently) help in getting the data distributed and maintained for late-joining applications .

Concerning the use of 'shared-memory', thats typically invisible to the application(s) as it is an optimization to efficiently share information within a single physical box (allows for very fast 'exchange' of information between publishers/subscribers on a single processing-node as well as prevents the need for multiple copies of the same data).

Hope this helps,

Next message Link4Help  posted on Tuesday, September 08, 2009 - 12:51 pm
I want to explain the complete scenario and need help .

Application 1 :
ELement1 {int id1 , int value}
Element 2{int id2 , int value}
Element 3 { int id3 , int value}
(Application 1 has three elements)
Application 2 :
ELement4 {int id4 , int value}
Element 2{int id2 , int value}
Element 3 { int id3 , int value}
(Application 2 has three elements)
In the same way there are 10 applications.
Now Application 2 act as a subscriber at some time and want the updated value from Application 1 whose is Publisher now.
I want DDS to do this it will do that??? Will it be implemented as DLL linked at run time??? how the outsider application make use of DDS?? I m getting very confused how I develop an application using this...... :-(
(Sorry , May be I m asking silly question but I m new to middleware so unable to get it much)

Thanks a Lot for reply.
Next message Link4Help  posted on Tuesday, September 08, 2009 - 01:09 pm
Sorry! , I forgot to mention..
Element1 , Element2 and all are data structs of Application.
Next message Hans van 't Hag  posted on Wednesday, September 09, 2009 - 09:04 am
Hi Link4Help,

DDS indeed allows application to be both publisher and/or subscriber to any number of 'Elements' as described in your usecase.

To make use of (basicaly any) middleware, you utilize an API (so you need some include-files that allow you to compile) at compile-time and need an installed library to dynamically link at runtime (on Windows, a DLL) and at execution the middleware will do the distribution of the information (using threads in the library and/or explicit middleware processes to distribute/maintain published information).

Not sure exactly what you mean with 'outsider application' but if that would be an application that has no ability to 'directly' use a DDS-runtime system, then you'll need an 'intermediate technology' to get (remote) access to your 'global-dataspace' as represented by DDS. Different vendors have different solutions to do so, but at least two (including us) have a 'bridge' between DDS and DBMS allowing an SQL-application (i.e. one that is not DDS-aware, but is data-centric) to share information with DDS-applications. In our implementation, this is a 2-way bridge that transparantly and automatically 'maps' DDS_topics on database-tables and forwards data in real-time between the DDS and DBMS 'domain'.

I'd suggest to 'play' with a DDS-implementation that typically come with some tutorials that will show you the basics of defining a data-model (in IDL), creating an application and deploying it on a DDS runtime-environment).

In case of the OpenSplice DDS open-source DDS-implementation, you can find distributions (that come with tutorials/examples) for various platforms (linux/windows) on

There's also whole set of instruction-video's (about concept, tools, benchmarking) available via youTube:

Hope this helps a little,

Next message Link4Help  posted on Wednesday, September 09, 2009 - 08:49 pm
Hi ,

Thanks a lot for your cooperation...
I have some more queries :
Where does the list of Subscribers and Publishers will be maintained??? AS I explained u the scenarion....there are 10 applications...So if five application publishing the data...they will have to maintain list....where it(list will be maintain) So that subscriber should know that ya , I have to search here for updated values?
Second : Threads are internally maintained by DDS or my application which will publish the element will create its own thread to update the value of element???
Third : there would be need to create a database of our own??? there is no database in DDS??? ya I didn't find after reading DDS but asking to confirm...
Next message Link4Help  posted on Wednesday, September 09, 2009 - 09:02 pm
Hi ,

One more question....What is the significance of Key??? The Subcriber aur publisher has to deal only with Elements and their values....They are not coupled to each other .So when publisher will update any value it will put it in List......telling that this Element1 value is 10 now...Subcriber will search with name of Element1 and get the value....and use i....Where would Key comes in picture??? didn't get any idea...
Please help me.....I know there are so much queries but It will help me a lot......
Next message Hans van 't Hag  posted on Friday, September 11, 2009 - 01:03 pm
Hi Link4Help,

Here are some answers to your questions:

1) where is the list of publishers/subscribers maintained

This 'declaration-of-intend' information is basically maintained throughout the system (basically 'captured' by the 'build-in-topics' that represent this type of 'meta-data' about who's interested in what and that are transparently and automatically published upon creation of a DDS-entity (such as creation of a publisher/subscriber, reader/writer, topic). Anyhow this is all done completely transparent to your applications, so you don't have to worry.

2) about threads

Also here, basically 'you don't have to worry' since the only thing a publisher needs to do is to 'write()' samples of a topic. Somehow the middleware will distribute that information to wherever its needed and will use middleware-threads to send/receive (and even 're-send' in case of RELIABLE communication) the data over a network to its destinations. Also for the subscriber, the only thing an application needs to do is to 'read()' the data when it has arrived (and DDS offers various ways of being triggered on arrival of data)

3) need to create an own database ?

There's no need to create a database of your own since DDS basically IS a distributed in-memory database already.
The 4th point below that relates to your final question on keys addresses that aspect in more detail. Also note that QoS policies w.r.t. durability of information specify the lifetime of published information which can be 'VOLATILE' (published data will not be maintained/remembered for late-joining appliations), 'TRANSIENT' (data will be maintained/remembered for late-joining applications, but will NOT survive system-downtime) and 'PERSISTENT' (this published data will outlive the system up-time i.e. will be kept on disk to be automatically re-injected into DDS upon system-restart).

2) What is the significance of keys

'Keys' is what separate DDS from messaging, as well as what make DDS similar to databases. Like in a DBMS-system, DDS follows a relational data-model where topics can have 'key-attributes' that uniquely identify an instance of that topic, like a social-security-number attribute in an 'employee-topic' that has non-key-fields like name/contact-details/etc.
So when publishing samples of a topic, their key-attributes determine where and how the data will be stored for a reader. A reader-cache is much like a (in-memory) database that has a 'storage-spectrum' defined by the key-attributes. Something that makes DDS different is that there is also the notion of 'history', that allows to retain a set of historical-samples for each topic-instance (i.e. key-value).
Next message sonia  posted on Tuesday, September 15, 2009 - 08:13 am
Thanks a lot.....
I wish U'll help to solve my more queries too....
Back to top
Add Your Message Here
Username: Posting Information:
This is a private posting area. Only registered users and moderators may post messages here.
Options: Post as "Anonymous"
Enable HTML code in message
Automatically activate URLs in message