An increasing number of applications, such as smart cities, mobile-health and smart grids, require to ubiquitously distribute and access real-time information from, and across, a vast variety of devices, ranging from embedded sensors to mobile devices. While the problem of ubiquity is solved at a computing and network connectivity level, it is by no means solved with respect to (1) real-time, and (2) resource efficient (e.g. battery life and network), data distribution.
This webcast will unveil PrismTech’s “DDS Everywhere” product strategy and will introduces a series of Innovations that have extended the OpenSplice ecosystem to seamlessly share data between embedded devices, traditional IT infrastructures, cloud applications and mobile devices.
2. DDS Everywhere Platform
A DDS-based, interoperable
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐
product family addressing OpenSplice OpenSplice
systems needs from Embedded Cloud Community
and Mobile to Enterprise and
Cloud
OpenSplice
OpenSplice DDS
☐ An Open Source core providing
free access to the OpenSplice OpenSplice OpenSplice
Ecosystem, security of supply and Enterprise Embedded
a vibrant, innovative community
3. DDS Everywhere Platform
Consumer
Platforms
☐ Browser / HTML5
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ iOS
OpenSplice OpenSplice
☐ Android
☐ Cloud Cloud Community
☐ No-SQL
☐ Mobile/WiFi IP
Transp.
OpenSplice
OpenSplice DDS
☐ RTOS (VxWorks, QNX,
☐ OS (Linux, Windows, etc) etc.)
☐ Cloud ☐ FPGA
OpenSplice OpenSplice
☐ DBMS ☐ BSP / No-OS
☐ No-SQL Enterprise Embedded ☐ IP + Exotic
☐ InfiniBand + IP Transports
Transports
Industrial
IT
Platforms
Platforms
6. Key Highlights
☐ The best middleware OpenSplice OpenSplice
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
Cloud Community
infrastructure to Simplify
Distributed System
Development
OpenSplice
☐ Reduce complexity of
OpenSplice DDS
building, testing, integrating, OpenSplice
OpenSplice OpenSplice
and deploying high- Tools
Enterprise Embedded
performance, scalable, and
fault-tolerant distributed
systems OpenSplice
DDS
8. OpenSplice DDSI2E
Enhanced version of the Interoperable wire
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
protocol DDSI v2.1
Discovery
☐ Standardized discovery (locators)
☐ Dynamic unicast/multicast selection
☐ Optional static discovery
OpenSplice DDS
Real-Time
☐ independently scheduled priority-lanes
☐ Support for Logical and Physical Partitioning
☐ Traffic-Shaping
Security
☐ Encrypted network-Partitions
9. Record and Replay
☐ Dynamic recording of any topic-
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
data in a DDS system
☐ Selective replay with variable RnR
RnR RnR
speed Service
Service(s) Manager
☐ Distributed control by topic-based Record/Replay command Record/Replay command
Any topic
API (‘command’ & ‘status’ topics)
OpenSplice DDS
& status topics & status topics
OpenSplice DDS
☐ Seamless integration with
OpenSplice Tester (topic-based API)
☐ Dedicated RnR-Manager graphical
GUI for scenario-definition and data
import/analysis
10. OpenSplice DDS
Record and Replay Tool
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
11. New DDS APIs
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ The original DDS API introduces some unnecessary accidental
complexity
OpenSplice DDS
☐ We’ve been working hard to standardize new C++/Java API for
DDS that makes using it as simple as possible
12. Statistics
Simple DataWriter with default QoS
DDS v1.2 C++ API ISO C++ API
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
15
☐ The new API reduces the
number of lines of code 11
from 3x to 5x when
compared to the original
OpenSplice DDS
8
DDS API!
☐ Less code means less bugs 4
0
SLOC
14. ISO C++ DDS API
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ Unified and composable data selection API
std::vector<std::string> p;
p.push_back("100");
p.push_back("200");
OpenSplice DDS
Query q("x < %0 AND y < %1", p);
auto data = reader
! .select()
.instance(handle) // -- Select Instance
! ! .state(status::DataState::new_data()) // -- Filter on State
! ! .content(q) // -- Filter on Content
.read(); // -- Execute the selection and read the data
17. Full C++ Shapes Application
see:
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
github.com/kydos/dds-psm-cxx/tree/master/examples/ishapes-driver
OpenSplice DDS
19. Key Highlights
OpenSplice
Gateway
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ Brings DDS on mobile
devices powered by OpenSplice
OpenSplice OpenSplice
Android/iOS Mobile Cloud Community
☐ Enables DDS-based
OpenSplice
OpenSplice DDS
Cloud Messaging for
higher scalability,
throughout and minimal OpenSplice OpenSplice
cost per message Enterprise Embedded
20. OpenSplice Mobile
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ Pure Java version of
OpenSplice targeting the JVM DCPS Java 5 / Scala API
☐ DDSI Protocol Stack optimized DDSI
for mobility and Android OS (Optimized for Mobility)
OpenSplice DDS
☐ Only DDS on the market
designed and Engineered for
Android and the JVM
21. OpenSplice DDS
OpenSplice Mobile
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
22. OpenSplice DDS
Demo
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
23. Java 5 PSM
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ Idiomatic and ergonomic DDS API for Java
☐ Guaranteed code portability through clean separation of standard
API (in an OMG provided JAR) and vendor implementation
OpenSplice DDS
☐ QoS and Selector DSL simplify programming and make code more
readable
☐ QoS Provider allows to “externalize” the QoS configuration
24. Java Shapes -- Reader
package
org.omg.demo.dds.shapes;
import
...;
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
/**
*
This
class
provides
a
simple
example
of
a
DDS
data
reader
using
the
new
Java
API.
*/
public
class
ShapesReader
{
public
static
void
main(String
args[])
throws
Exception
{
if
(args.length
<
1)
{
System.out.println("USAGE:ntShapesWriter
<topic>");
System.out.println("nttopic
=
[Circle,
Square,
Triangle]");
OpenSplice DDS
System.exit(1);
}
final
String
shape
=
args[1].substring(0,1).toUpperCase()
+
args[1].substring(1,args[1].length()).toLowerCase();
final
ServiceEnvironment
env
=
ServiceEnvironment.createInstance(ShapesWriter.class.getClassLoader());
25. Java Shapes -- Reader
DomainParticipantFactory
factory
=
DomainParticipantFactory.getInstance(env);
DomainParticipant
dp
=
factory.createParticipant();
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
final
PolicyFactory
pf
=
env.getSPI().getPolicyFactory();
TopicQos
tqos
=
dp.getDefaultTopicQos();
tqos.withPolicies(pf.Durability().withTransient(),
pf.Reliability().withReliable());
Topic<ShapeType>
topic
=
dp.createTopic(shape,
ShapeType.class);
Subscriber
sub
=
dp.createSubscriber();
OpenSplice DDS
DataReaderQos
drqos
=
sub.getDefaultDataReaderQos().withPolicies(
pf.Reliability().withBestEffort(),
pf.Durability().withTransient()
);
DataReader<ShapeType>
dr
=
sub.createDataReader(topic,
drqos,
new
ShapeTypeListener(),
Status.allStatuses(env));
Thread.currentThread().join();
}
}
26. Java Shapes -- Writer
public
class
ShapesWriter
{
public
static
void
main(String
args[])
throws
Exception
{
if
(args.length
<
4)
{
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
System.out.println("USAGE:ntShapesWriter
<topic>
<circle>
<samples>
<period
ms>");
System.out.println("nttopic
=
[Circle,
Square,
Triangle]");
System.out.println("tcolor
=
[Red,
Blue,
Green,
Magenta,
Cyan]");
System.exit(1);
}
final
String
shape
=
args[1].substring(0,1).toUpperCase()
+
args[1].substring(1,args[1].length()).toLowerCase();
final
String
color
=
args[1].toUpperCase();
OpenSplice DDS
final
int
samples
=
Integer.parseInt(args[2]);
final
int
period
=
Integer.parseInt(args[3]);
final
int
bound
=
100;
final
ServiceEnvironment
env
=
ServiceEnvironment.createInstance(ShapesWriter.class.getClassLoader());
27. Java Shapes -- Writer
final
PolicyFactory
pf
=
env.getSPI().getPolicyFactory();
DomainParticipantFactory
factory
=
DomainParticipantFactory.getInstance(env);
DomainParticipant
dp
=
factory.createParticipant();
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
Topic<ShapeType>
topic
=
dp.createTopic(shape,
ShapeType.class);
Publisher
pub
=dp.createPublisher();
DataWriterQos
dwqos
=
pub.getDefaultDataWriterQos().withPolicies(
pf.Reliability().withBestEffort(),
pf.Durability().withTransient());
DataWriter<ShapeType>
dw
=
pub.createDataWriter(topic);
OpenSplice DDS
final
ShapeType
sample
=
new
ShapeType(color,
0,
0,
0);
for
(int
i
=
0;
i
<
samples;
++i)
{
sample
.setX(((int)Math.random()%bound))
.setY(((int)Math.random()%bound))
.setShapesize(((int)Math.random()%bound));
dw.write(sample);
Thread.sleep(period);
}
}
}
28. Performance
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ OpenSplice Mobile v1.0
beta features already
very good performance
☐ Latency is low and pretty
OpenSplice DDS
stable ~3usec of
difference from 32 to 1024
bytes
29. OpenSplice Gateway
JMS
Integration technology providing
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐
XM
connectivity from DDS to over 80
ST
PP
RE
OpenSplice
technologies, including WebSockets Gateway
P
and REST
Cu
AMQ
sto
m
☐ Java-based and easily deployable
OpenSplice DDS
DDSI-RTPS
on the cloud
Supported Connectors Include:
☐ Key building block for OpenSplice - JMS - HTTP
- REST - AMQP
Based Cloud Messaging Solutions - CometD - XMPP
- CFX - Hibernate
-WebSockets -HBase
- TCP, UDP Sockets - Custom
30. WebSocket Integration
1 // Define endpoints
2 val inEndpoint =
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
3 "ddsi:"+ inTopic +":"+ inDomain +"/" + shapeType
4 val outEndpoint =
5 "websocket://"+inTopic.toLowerCase + "?sendToAll=true"
6
7 // Define a Route using the Scala DSL
8 val shapesRoute = new RouteBuilder {
9 override def configure() =
OpenSplice DDS
10 from(inEndpoint) unmarshal("cdr") marshal() json() to(outEndpoint) To JSON
11 }
Topic
“Circle”
☐ This example requires Camel 2.10 DDS
Domain 0
31. TCP/UDP Tunneling DDS
Domain 0
☐ Integrate different DDS Domains via TCP (or UDP) Topic
“Circle”
tunnel
☐ Per Topic bridging
☐ Unidirectional or bidirectional GW 1
☐ Possibly adding SSL/TLS TCP
OpenSplice DDS
GW 2
1 // on GW1:
2 from("ddsi:Circle:0/ShapeType")
3 to("netty:tcp://localhost:6789?sync=false");
Topic
“Circle”
1 // on GW2:
2 from("netty:tcp://localhost:6789?sync=false")
3 to("ddsi:Circle:0/ShapeType"); DDS
Domain 0
33. Key Highlights
OpenSplice OpenSplice
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
Cloud Community
☐ The OpenSplice Embedded
Product family brings DDS OpenSplice
connectivity to devices and OpenSplice
OpenSplice DDS
resource constrained real- OpenSplice OpenSplice
Integrator
time embedded systems Enterprise Embedded
OpenSplice
Lite
OpenSplice
RTE
34. FPGA Integrator
GIOP/DDSI DDS
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
Data
Bridge Reader
FPGA
Data
Writer
GIOP
Data
Reader
Data TopicD
ICO GIOP DDSI
Writer
TopicA
Data
TopicB Reader
Data
Writer
TopicC
...
Data Data
Writer Reader
OpenSplice DDS
DDS Global Data Space
☐ ‘Out-of-the-box’ solution for integrating FPGA’s withDDS based systems
☐ Bridges the device-data (via GIOP) to the DDS-based system using a software
‘gateway’ providing full DDS QoS support to maintain & distribute the device-data
☐ Bridge-technology is be based either:
☐ OpenSplice Gateway (if a Java platform is available) or
☐ A small OpenSplice bridge application or pluggable-service
35. OpenSplice Lite
ISO C++ API
☐ Bring software-based DDS
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
implementation to a range of resource
constrained devices Native C API
☐ Allow for variability on functionalities,
transport and support of underlying OS/ DDSI / DDSI-E
BSP
OS Transport
OpenSplice DDS
☐ Provides very low footprint and very high Abstraction Abstraction
performance
☐ Footprint as low as 100/200 KB RTOS DSP
Latency as low as 35-45 usec (on Gigabit uController
☐ GPP
network)
36. OpenSplice RTE
☐ Bring the full power of DDS to real-
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
time embedded systems DCPS API (C/C++/RT-Java)
☐ Provides low footprint, superlative DDSI-E / RT-NET
scalability and and high
performance OS
OpenSplice DDS
Abstraction
☐ Footprint 2MB
RTOS
☐ Latency 75/80 usec (on Gigabit
network) GPP
40. Concluding Remarks
Copyright
2011,
PrismTech
–
All
Rights
Reserved.
☐ With the DDS Everywhere platform we are making DDS available
on any device
☐ That means that:
☐ You can get DDS data from your system to anywhere
OpenSplice DDS
☐ You can exploit the power of DDS across devices and technologies
☐ You have a single technology end-to-end that provides optimal efficiency,
scalability, performance and more importantly data-centricity!