SlideShare a Scribd company logo
1 of 48
Download to read offline
Java 5 PSM for DDS:
                      Revised Submission 2
                      MARS – Santa Clara, CA – December 2010


                 Presenter: Rick Warren, RTI
                 Submitting POCs:
                  Rick Warren, RTI:
                   rick.warren@rti.com
                  Angelo Corsaro, PrismTech:
                   angelo.corsaro@prismtech.com
                            document number: mars/2010-12-22



Tuesday, December 7, 2010                                      1
Agenda




                            Copyright © 2010 RTI - All rights Reserved
                                                                         2
Tuesday, December 7, 2010                                                2
Agenda


        Specification Overview
             Goals and Principles
             Process


        Better Living Through Source Code
             License
             Bootstrapping
             Publishing Data
             Reading Data
             Getting and Setting QoS
             Java Type Representation




                            Copyright © 2010 RTI - All rights Reserved
                                                                         2
Tuesday, December 7, 2010                                                2
Goals & Design Principles




                            Copyright © 2010 RTI - All rights Reserved
                                                                         3
Tuesday, December 7, 2010                                                3
Goals & Design Principles
        Improve user experience
             standardNamingConvention
             Standard containers (e.g. java.util.List)
             Standard enumerations
             Error conditions reported with exceptions
             Serializable, Cloneable value types
             Simplified method overloads




                              Copyright © 2010 RTI - All rights Reserved
                                                                           3
Tuesday, December 7, 2010                                                  3
Goals & Design Principles
        Improve user experience
             standardNamingConvention
             Standard containers (e.g. java.util.List)
             Standard enumerations
             Error conditions reported with exceptions
             Serializable, Cloneable value types
             Simplified method overloads

        Improve type safety
             Generics




                              Copyright © 2010 RTI - All rights Reserved
                                                                           3
Tuesday, December 7, 2010                                                  3
Goals & Design Principles
        Improve user experience
             standardNamingConvention
             Standard containers (e.g. java.util.List)
             Standard enumerations
             Error conditions reported with exceptions
             Serializable, Cloneable value types
             Simplified method overloads

        Improve type safety
             Generics

        Improve performance
             Loanable memory
             No critical-path memory allocation (unlike IDL PSM)




                               Copyright © 2010 RTI - All rights Reserved
                                                                            3
Tuesday, December 7, 2010                                                   3
Goals & Design Principles
        Improve user experience
             standardNamingConvention
             Standard containers (e.g. java.util.List)
             Standard enumerations
             Error conditions reported with exceptions
             Serializable, Cloneable value types
             Simplified method overloads

        Improve type safety
             Generics

        Improve performance
             Loanable memory
             No critical-path memory allocation (unlike IDL PSM)

        Improve portability
             Build apps against standard interfaces; decide at run time which impl to use
             Host multiple implementations (or versions) within same JVM
             Dynamic loading and unloading
                   Play nicely with containers, e.g. Java EE and OSGi
                   Don’t require non-constant static state
                                  Copyright © 2010 RTI - All rights Reserved
                                                                                             3
Tuesday, December 7, 2010                                                                    3
State of the Proposal




                            Copyright © 2010 RTI - All rights Reserved
                                                                         4
Tuesday, December 7, 2010                                                4
State of the Proposal

        Ready for implementation
             All mandatory requirements satisfied
             User vetting process begun
                   Private conversations with Java power users
                   Publicly available code repository at http://
                    code.google.com/p/datadistrib4j/
                   So far, reviewers enthusiastic


        Positive AB review
             Doug Tolbert: content
             Sridhar Iyengar: license


        Will ask for vote to recommend adoption
        this week
                               Copyright © 2010 RTI - All rights Reserved
                                                                            4
Tuesday, December 7, 2010                                                   4
Source Code License & Copyright




                            Copyright © 2010 RTI - All rights Reserved
                                                                         5
Tuesday, December 7, 2010                                                5
Source Code License & Copyright

        Principles
             Every vendor, user will receive code from OMG
                   Need to know their rights
                   Need free access to spec, according to OMG principles
             OMG must not dictate vendors’ business models
                   Open source, shared source, closed source must be allowed
                   ...under variety of licenses




                               Copyright © 2010 RTI - All rights Reserved
                                                                                5
Tuesday, December 7, 2010                                                       5
Source Code License & Copyright

        Principles
             Every vendor, user will receive code from OMG
                   Need to know their rights
                   Need free access to spec, according to OMG principles
             OMG must not dictate vendors’ business models
                   Open source, shared source, closed source must be allowed
                   ...under variety of licenses
        License
             Apache 2.0 (permissive but GPL-compatible)
             Use is royalty-free, unlike BSD (proposed last time)
             Requires acknowledgement of license, copyright holders
              from redistributors




                               Copyright © 2010 RTI - All rights Reserved
                                                                                5
Tuesday, December 7, 2010                                                       5
Source Code License & Copyright

        Principles
             Every vendor, user will receive code from OMG
                   Need to know their rights
                   Need free access to spec, according to OMG principles
             OMG must not dictate vendors’ business models
                   Open source, shared source, closed source must be allowed
                   ...under variety of licenses
        License
             Apache 2.0 (permissive but GPL-compatible)
             Use is royalty-free, unlike BSD (proposed last time)
             Requires acknowledgement of license, copyright holders
              from redistributors
        Copyright
             OMG, RTI, PrismTech hold copyright
                   i.e. OMG + submitters, per OMG conventions
                               Copyright © 2010 RTI - All rights Reserved
                                                                                5
Tuesday, December 7, 2010                                                       5
Bootstrapping a DDS Java Application




                            Copyright © 2010 RTI - All rights Reserved
                                                                         6
Tuesday, December 7, 2010                                                6
Bootstrapping a DDS Java Application

        Design pattern: API is abstract, stateless
             Interfaces when possible; stateless abstract classes when not
             Doesn’t dictate state or other implementation to vendors
        Design pattern: multiple DDS’s coexist in JVM
             i.e. Even “singletons” are not
        Challenge: How do you create the first object?




                             Copyright © 2010 RTI - All rights Reserved
                                                                              6
Tuesday, December 7, 2010                                                     6
Bootstrapping a DDS Java Application

        Design pattern: API is abstract, stateless
             Interfaces when possible; stateless abstract classes when not
             Doesn’t dictate state or other implementation to vendors
        Design pattern: multiple DDS’s coexist in JVM
             i.e. Even “singletons” are not
        Challenge: How do you create the first object?


        Solution: Bootstrap class
             Represents DDS implementation
             Step 1: Bootstrap.createInstance(/*system property*/)
             Singletons: DomainParticipantFactory.getInstance(myBstrap)
             If no PIM factory: Duration.newDuration(myBstrap)
             Get back there from anywhere: myDuration.getBootstrap()
             * Note: API change since previous submission
                             Copyright © 2010 RTI - All rights Reserved
                                                                              6
Tuesday, December 7, 2010                                                     6
Example: Publishing Data
     import org.omg.dds.domain.*; import …;

     // Join domain:
     DomainParticipantFactory factory =
         DomainParticipantFactory.getInstance(
             Bootstrap.createInstance());
     DomainParticipant dp =
         factory.createParticipant();

     // Create topic with implicit type registration:
     Topic<Greeting> tp = dp.createTopic(
         "My Topic",
         Greeting.class);

     // Create publishing entities:
     Publisher pub = dp.createPublisher();
     DataWriter<Greeting> dw =
         pub.createDataWriter(tp);

     // Publish data:
     try {
         dw.write(new Greeting("Hello, World"));
     } catch (TimeoutException tx) {
         tx.printStackTrace();
     }

     // Dispose of all entities:
     dp.close();
                                   Copyright © 2010 RTI - All rights Reserved
                                                                                7
Tuesday, December 7, 2010                                                       7
Example: Publishing Data
     import org.omg.dds.domain.*; import …;

     // Join domain:
     DomainParticipantFactory factory =
         DomainParticipantFactory.getInstance(                     // Explicit TypeSupport w/ default name:
             Bootstrap.createInstance());                          Topic<Greeting> tp = dp.createTopic(
     DomainParticipant dp =                                            "My Topic",
         factory.createParticipant();                                  TypeSupport.newTypeSupport(




                                                             }
                                                                           Greeting.class,
     // Create topic with implicit type registration:                      dp.getBootstrap()));
     Topic<Greeting> tp = dp.createTopic(
         "My Topic",                                               // Explicit TypeSupport w/ custom name:
         Greeting.class);                                          Topic<Greeting> tp = dp.createTopic(

     // Create publishing entities:
                                                             or        "My Topic",
                                                                       TypeSupport.newTypeSupport(
     Publisher pub = dp.createPublisher();                                 Greeting.class,
     DataWriter<Greeting> dw =                                             "MyType",
         pub.createDataWriter(tp);                                         dp.getBootstrap()));

     // Publish data:
     try {
         dw.write(new Greeting("Hello, World"));
     } catch (TimeoutException tx) {
         tx.printStackTrace();
     }

     // Dispose of all entities:
     dp.close();
                                   Copyright © 2010 RTI - All rights Reserved
                                                                                                              7
Tuesday, December 7, 2010                                                                                    7
Example: Reading Data
     ...
     // Create subscribing entities:
     Subscriber sub = dp.createSubscriber();
     DataReader<Greeting> dr = sub.createDataReader(
         topic,
         sub.getDefaultDataReaderQos(),
         listener,
         null /* all status changes */);

     ...

     class MyListener extends DataReaderAdapter<Greeting> {
         @Override
         public void onDataAvailable(DataAvailableStatus<Greeting> status) {
             DataReader<Greeting> dr = status.getSource();
             Sample.Iterator<Greeting> it = dr.take(/* loan, or pass List to copy */);
             try { while (it.hasNext()) {
                 Sample<Greeting> smp = it.next();
                 // SampleInfo stuff is built into Sample:
                 InstanceHandle inst = smp.getInstanceHandle();
                 // Data accessible from Sample; null if invalid:
                 Greeting dt = smp.getData();
                 // ...
             } } finally {
                 it.returnLoan();
             }
         }
     }
                                Copyright © 2010 RTI - All rights Reserved
                                                                                         8
Tuesday, December 7, 2010                                                                8
Example: Reading Data
     ...
     // Create subscribing entities:
     Subscriber sub = dp.createSubscriber();
     DataReader<Greeting> dr = sub.createDataReader(
         topic,                                         “Listener” is interface:
         sub.getDefaultDataReaderQos(),
         listener,
                                                             implement all.
         null /* all status changes */);                  “Adapter” is no-op
                                                          class: override what
     ...
                                                               you want.
     class MyListener extends DataReaderAdapter<Greeting> {
         @Override
         public void onDataAvailable(DataAvailableStatus<Greeting> status) {
             DataReader<Greeting> dr = status.getSource();
             Sample.Iterator<Greeting> it = dr.take(/* loan, or pass List to copy */);
             try { while (it.hasNext()) {
                 Sample<Greeting> smp = it.next();
                 // SampleInfo stuff is built into Sample:
                 InstanceHandle inst = smp.getInstanceHandle();
                 // Data accessible from Sample; null if invalid:
                 Greeting dt = smp.getData();
                 // ...
             } } finally {
                 it.returnLoan();
             }
         }
     }
                                Copyright © 2010 RTI - All rights Reserved
                                                                                         8
Tuesday, December 7, 2010                                                                8
Example: Reading Data
     ...
     // Create subscribing entities:
     Subscriber sub = dp.createSubscriber();
     DataReader<Greeting> dr = sub.createDataReader(
         topic,                                        “Listener” is interface:
         sub.getDefaultDataReaderQos(),
         listener,
                                                            implement all.
         null /* all status changes */);                 “Adapter” is no-op
                                                         class: override what
     ...
                                                              you want.
     class MyListener extends DataReaderAdapter<Greeting> {
         @Override                                                            Statuses extend
         public void onDataAvailable(DataAvailableStatus<Greeting> status) {
                                                                           java.util.EventObject
             DataReader<Greeting> dr = status.getSource();
             Sample.Iterator<Greeting> it = dr.take(/* loan, or pass List to copy */);
             try { while (it.hasNext()) {
                 Sample<Greeting> smp = it.next();
                 // SampleInfo stuff is built into Sample:
                 InstanceHandle inst = smp.getInstanceHandle();
                 // Data accessible from Sample; null if invalid:
                 Greeting dt = smp.getData();
                 // ...
             } } finally {
                 it.returnLoan();
             }
         }
     }
                                Copyright © 2010 RTI - All rights Reserved
                                                                                                   8
Tuesday, December 7, 2010                                                                      8
Example: Get QoS


     // QoS is a bean-style property of the entity:
     DataReaderQos qos = myReader.getQos();

     // Get specific policy:
     ReliabilityQosPolicy.Kind rKind =
         qos.getReliability().getKind();

     // EntityQos is a Map from QosPolicy.Id to QosPolicy:
     for (QosPolicy policy : qos.values()) {
         // Iterate over all policies, standard or not.
         // ...
     }




                            Copyright © 2010 RTI - All rights Reserved
                                                                         9
Tuesday, December 7, 2010                                                9
Example: Set QoS


     // Call modify() to get a mutable copy of the QoS:
     ModifiableDataReaderQos qos = myReader.getQos().modify();


     // Modifiable version provides setters:
     qos.getReliability().setKind(
           ReliabilityQosPolicy.Kind.RELIABLE);


     // QoS setter accepts modifiable or unmodifiable objects:
     myReader.setQos(qos);
     myReader.setQos(myOtherReader.getQos());




                            Copyright © 2010 RTI - All rights Reserved
                                                                         10
Tuesday, December 7, 2010                                                10
Why the modifiable/unmodifiable pattern?




                            Copyright © 2010 RTI - All rights Reserved
                                                                          11
Tuesday, December 7, 2010                                                11
Why the modifiable/unmodifiable pattern?


        Easy to use correctly
             qos = entity.getQos();
        Hard to get wrong
             qos = new DataReaderQos(); // ERROR!
              // What state does ‘qos’ have before the next line?
              entity.getQos(qos);
             What does this mean:
              myDataReader.getQos().setReliability(…)




                            Copyright © 2010 RTI - All rights Reserved
                                                                          11
Tuesday, December 7, 2010                                                11
Why the modifiable/unmodifiable pattern?


        Easy to use correctly
             qos = entity.getQos();
        Hard to get wrong
             qos = new DataReaderQos(); // ERROR!
              // What state does ‘qos’ have before the next line?
              entity.getQos(qos);
             What does this mean:
              myDataReader.getQos().setReliability(…)
        Fast to get
             Just return a pointer
             No allocation or deep copy needed
        Good for concurrency
             Share immutable objects freely without locking

                            Copyright © 2010 RTI - All rights Reserved
                                                                          11
Tuesday, December 7, 2010                                                11
Java Type Representation




                            Copyright © 2010 RTI - All rights Reserved
                                                                         12
Tuesday, December 7, 2010                                                12
Java Type Representation


        Goal: Write the following code:

     public class MyPojo /*extends/implements…*/ {
         private int foo;
         private Bar[] baz;
         public void doStuff() { … }
     }
     …
     Topic<MyPojo> t = dp.createTopic(
         "My Topic", MyPojo.class);




                            Copyright © 2010 RTI - All rights Reserved
                                                                         12
Tuesday, December 7, 2010                                                12
Java Type Representation




                            Copyright © 2010 RTI - All rights Reserved
                                                                         13
Tuesday, December 7, 2010                                                13
Java Type Representation


        Leverage the knowledge of Java developers
        Leverage the code they already have




                            Copyright © 2010 RTI - All rights Reserved
                                                                         13
Tuesday, December 7, 2010                                                13
Java Type Representation


        Leverage the knowledge of Java developers
        Leverage the code they already have

        Observations:
             JRE already provides type definition constructs
                   Primitive types, strings, lists (sequences), classes
                    (structures), enumerations, annotations
             Types to be sent over network already indicate that
                   …by implementing java.io.Serializable
             …including which fields should not be sent
                   …with the transient keyword




                                Copyright © 2010 RTI - All rights Reserved
                                                                             13
Tuesday, December 7, 2010                                                    13
Java Type Representation




                            Copyright © 2010 RTI - All rights Reserved
                                                                         14
Tuesday, December 7, 2010                                                14
Java Type Representation


        Approach: Define DDS type on the fly based
        on run-time introspection of Java class




                            Copyright © 2010 RTI - All rights Reserved
                                                                         14
Tuesday, December 7, 2010                                                14
Java Type Representation


        Approach: Define DDS type on the fly based
        on run-time introspection of Java class

        Convenience feature for non-real-time
        Java systems
             Reflection slower than compiled generated code
             If other languages are used, type definitions must
              be “duplicated”

        Does not:
             ...replace, modify other Language Bindings
             ...impact serialization, therefore is interoperable




                            Copyright © 2010 RTI - All rights Reserved
                                                                         14
Tuesday, December 7, 2010                                                14
Java Type Representation: What It Does




                            Copyright © 2010 RTI - All rights Reserved
                                                                         15
Tuesday, December 7, 2010                                                15
Java Type Representation: What It Does


        Defines mappings JRE concepts  DDS concepts
             int  Int32 (IDL long)
             double  Float64 (IDL double)
             java.util.List  Sequence
             Serializable class  Structure


        Allows customization to support non-Java DDS
        concepts
             e.g. unsigned primitives, narrow vs. wide strings, unions
             Mechanism: @SerializeAs and other annotations




                            Copyright © 2010 RTI - All rights Reserved
                                                                          15
Tuesday, December 7, 2010                                                 15
Java Type Representation: Example




     Java                                          IDL




                            Copyright © 2010 RTI - All rights Reserved
                                                                         16
Tuesday, December 7, 2010                                                16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {




                            Copyright © 2010 RTI - All rights Reserved
                                                                                16
Tuesday, December 7, 2010                                                       16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {

     class Foo
     implements Serializable {                     struct Foo {




                            Copyright © 2010 RTI - All rights Reserved
                                                                                16
Tuesday, December 7, 2010                                                       16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {

     class Foo
     implements Serializable {                     struct Foo {
       @Key int theInt;                              @Key long theInt;




                            Copyright © 2010 RTI - All rights Reserved
                                                                                16
Tuesday, December 7, 2010                                                       16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {

     class Foo
     implements Serializable {                     struct Foo {
       @Key int theInt;                              @Key long theInt;
       transient float theFlt;




                            Copyright © 2010 RTI - All rights Reserved
                                                                                16
Tuesday, December 7, 2010                                                       16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {

     class Foo
     implements Serializable {                     struct Foo {
       @Key int theInt;                              @Key long theInt;
       transient float theFlt;
       String theStr;                                  string theStr;




                            Copyright © 2010 RTI - All rights Reserved
                                                                                16
Tuesday, December 7, 2010                                                       16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {

     class Foo
     implements Serializable {                     struct Foo {
       @Key int theInt;                              @Key long theInt;
       transient float theFlt;
       String theStr;                                  string theStr;
       @SerializeAs(UINT_64)
       BigInteger theUInt;                             unsigned long theUInt;




                            Copyright © 2010 RTI - All rights Reserved
                                                                                16
Tuesday, December 7, 2010                                                       16
Java Type Representation: Example




     Java                                          IDL
     package com.acme;                             module com { module acme {

     class Foo
     implements Serializable {                     struct Foo {
       @Key int theInt;                              @Key long theInt;
       transient float theFlt;
       String theStr;                                   string theStr;
       @SerializeAs(UINT_64)
       BigInteger theUInt;                              unsigned long theUInt;
       String[] theArr;                                 sequence<string> theArr;
     }                                             };

                                                   }}
                            Copyright © 2010 RTI - All rights Reserved
                                                                                   16
Tuesday, December 7, 2010                                                          16
Summary


        Proposed specification is complete
             Provides (the first) run-time-portable API for DDS
             Improves performance over IDL-based API
             Improves type safety over IDL-based API
             Simplifies type handling
             Satisfies all mandatory requirements


        We will ask for your vote on Thursday
             Vote to vote
             Vote to recommend adoption




                            Copyright © 2010 RTI - All rights Reserved
                                                                         17
Tuesday, December 7, 2010                                                17
Q&A




                                  18
Tuesday, December 7, 2010         18
Appendix: Changes Since Cambridge

       Changed license from BSD to Apache                           Simplified object creation
       Modified package organization                                   Renamed Context to Bootstrap to avoid confusion with
                                                                        JNDI
          Modifiable value type variants in parallel packages
           to simplify package lists
                                                                       Reduced number of entity and condition factory
                                                                        method overloads
          Moved contents of org.omg.dds.type.annotation to
           org.omg.dds.type
                                                                       Pass Bootstrap as argument to factories; don’t make it
                                                                        the factory for everything (required changing some
          Consolidated statuses in org.omg.dds.core.status             interfaces into abstract classes)
           package to match C++ proposal
          Moved built-in topic data interfaces to
                                                                    Improved DDS-XTypes APIs, aligned with FTF
           org.omg.dds.topic package to match C++                      Simplified Dynamic Language Binding by removing
           proposal                                                     unneeded methods
       All new unchecked exceptions now                                Improved overloads in built-in type writers
       extend common base class                                        Fixed method names in TypeLibraryElement “union”

       Improvements to value types                                  Added JavaDoc
          All setters return enclosing object to facilitate           Added JavaDoc building to packaging script
           method chaining                                             Included some documentation from DDS specification
          Improvements to Time and Duration                            (not done yet)
              Leverage TimeUnit                                    Made some “enumerations” more extensible
              Address Y2038 problem                                by vendors
          Renamed Qos to EntityQos to match C++ proposal              Replaced status kind mask with collection of status
                                                                        classes
                                                                       Made QosPolicy.Id an abstract class, not an
                                                                        enumeration




                                           Copyright © 2010 RTI - All rights Reserved
                                                                                                                                 19
Tuesday, December 7, 2010                                                                                                        19

More Related Content

Similar to Java 5 Language PSM for DDS: Final Submission

DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardAngelo Corsaro
 
Extensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDSExtensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDSRick Warren
 
Cyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The OriginsCyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The OriginsZettaScaleTechnology
 
Diverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosa
Diverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosaDiverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosa
Diverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosaFrans Ward
 
Diverse2010: How Opencast Matterhorn and MediaMosa can co-act
Diverse2010: How Opencast Matterhorn and MediaMosa can co-actDiverse2010: How Opencast Matterhorn and MediaMosa can co-act
Diverse2010: How Opencast Matterhorn and MediaMosa can co-actMediaMosa
 
OpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part IIOpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part IIAngelo Corsaro
 
Proposed Java 5 API for DDS (out of date)
Proposed Java 5 API for DDS (out of date)Proposed Java 5 API for DDS (out of date)
Proposed Java 5 API for DDS (out of date)Rick Warren
 
Mobile Showcase Moblin2
Mobile Showcase Moblin2Mobile Showcase Moblin2
Mobile Showcase Moblin2Tomas Bennich
 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxAngelo Corsaro
 
Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)Rick Warren
 
Open End To End Js Stack
Open End To End Js StackOpen End To End Js Stack
Open End To End Js StackSkills Matter
 
DDS Interoperability Demo
DDS Interoperability DemoDDS Interoperability Demo
DDS Interoperability DemoAngelo Corsaro
 
Three key concepts for java batch
Three key concepts for java batchThree key concepts for java batch
Three key concepts for java batchtimfanelli
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAngelo Corsaro
 
Application Logging for fun and profit. Houston TechFest 2012
Application Logging for fun and profit.  Houston TechFest 2012Application Logging for fun and profit.  Houston TechFest 2012
Application Logging for fun and profit. Houston TechFest 2012Jane Prusakova
 
Using Open Source for Enterprise
Using Open Source for EnterpriseUsing Open Source for Enterprise
Using Open Source for EnterpriseEric Fesler
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEPAngelo Corsaro
 

Similar to Java 5 Language PSM for DDS: Final Submission (20)

DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing Standard
 
Agile framework Support
Agile framework SupportAgile framework Support
Agile framework Support
 
Extensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDSExtensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDS
 
Cyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The OriginsCyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The Origins
 
Portfolio 2007-2009
Portfolio 2007-2009Portfolio 2007-2009
Portfolio 2007-2009
 
Diverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosa
Diverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosaDiverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosa
Diverse 2010 Portland, Maine, US, Ward, Schulte Opencast Matterhorn, MediaMosa
 
Diverse2010: How Opencast Matterhorn and MediaMosa can co-act
Diverse2010: How Opencast Matterhorn and MediaMosa can co-actDiverse2010: How Opencast Matterhorn and MediaMosa can co-act
Diverse2010: How Opencast Matterhorn and MediaMosa can co-act
 
OpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part IIOpenSplice DDS Tutorial -- Part II
OpenSplice DDS Tutorial -- Part II
 
Srs
SrsSrs
Srs
 
Proposed Java 5 API for DDS (out of date)
Proposed Java 5 API for DDS (out of date)Proposed Java 5 API for DDS (out of date)
Proposed Java 5 API for DDS (out of date)
 
Mobile Showcase Moblin2
Mobile Showcase Moblin2Mobile Showcase Moblin2
Mobile Showcase Moblin2
 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxx
 
Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)Extensible and Dynamic Topic Types For DDS (out of date)
Extensible and Dynamic Topic Types For DDS (out of date)
 
Open End To End Js Stack
Open End To End Js StackOpen End To End Js Stack
Open End To End Js Stack
 
DDS Interoperability Demo
DDS Interoperability DemoDDS Interoperability Demo
DDS Interoperability Demo
 
Three key concepts for java batch
Three key concepts for java batchThree key concepts for java batch
Three key concepts for java batch
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
 
Application Logging for fun and profit. Houston TechFest 2012
Application Logging for fun and profit.  Houston TechFest 2012Application Logging for fun and profit.  Houston TechFest 2012
Application Logging for fun and profit. Houston TechFest 2012
 
Using Open Source for Enterprise
Using Open Source for EnterpriseUsing Open Source for Enterprise
Using Open Source for Enterprise
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEP
 

More from Rick Warren

Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaRick Warren
 
Letters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to ProductionLetters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to ProductionRick Warren
 
Patterns of Data Distribution
Patterns of Data DistributionPatterns of Data Distribution
Patterns of Data DistributionRick Warren
 
Data-centric Invocable Services
Data-centric Invocable ServicesData-centric Invocable Services
Data-centric Invocable ServicesRick Warren
 
Engineering Interoperable and Reliable Systems
Engineering Interoperable and Reliable SystemsEngineering Interoperable and Reliable Systems
Engineering Interoperable and Reliable SystemsRick Warren
 
Scaling DDS to Millions of Computers and Devices
Scaling DDS to Millions of Computers and DevicesScaling DDS to Millions of Computers and Devices
Scaling DDS to Millions of Computers and DevicesRick Warren
 
DDS in a Nutshell
DDS in a NutshellDDS in a Nutshell
DDS in a NutshellRick Warren
 
C++ PSM for DDS: Revised Submission
C++ PSM for DDS: Revised SubmissionC++ PSM for DDS: Revised Submission
C++ PSM for DDS: Revised SubmissionRick Warren
 
Web-Enabled DDS: Revised Submission
Web-Enabled DDS: Revised SubmissionWeb-Enabled DDS: Revised Submission
Web-Enabled DDS: Revised SubmissionRick Warren
 
Extensible and Dynamic Topic Types for DDS, Beta 1
Extensible and Dynamic Topic Types for DDS, Beta 1Extensible and Dynamic Topic Types for DDS, Beta 1
Extensible and Dynamic Topic Types for DDS, Beta 1Rick Warren
 
Mapping the RESTful Programming Model to the DDS Data-Centric Model
Mapping the RESTful Programming Model to the DDS Data-Centric ModelMapping the RESTful Programming Model to the DDS Data-Centric Model
Mapping the RESTful Programming Model to the DDS Data-Centric ModelRick Warren
 
Large-Scale System Integration with DDS for SCADA, C2, and Finance
Large-Scale System Integration with DDS for SCADA, C2, and FinanceLarge-Scale System Integration with DDS for SCADA, C2, and Finance
Large-Scale System Integration with DDS for SCADA, C2, and FinanceRick Warren
 
Data-Centric and Message-Centric System Architecture
Data-Centric and Message-Centric System ArchitectureData-Centric and Message-Centric System Architecture
Data-Centric and Message-Centric System ArchitectureRick Warren
 
Extensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDSExtensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDSRick Warren
 
Easing Integration of Large-Scale Real-Time Systems with DDS
Easing Integration of Large-Scale Real-Time Systems with DDSEasing Integration of Large-Scale Real-Time Systems with DDS
Easing Integration of Large-Scale Real-Time Systems with DDSRick Warren
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDSRick Warren
 
Robotic Technology Component (RTC) Specification
Robotic Technology Component (RTC) SpecificationRobotic Technology Component (RTC) Specification
Robotic Technology Component (RTC) SpecificationRick Warren
 
From the Tactical Edge to the Enterprise: Integrating DDS and JMS
From the Tactical Edge to the Enterprise: Integrating DDS and JMSFrom the Tactical Edge to the Enterprise: Integrating DDS and JMS
From the Tactical Edge to the Enterprise: Integrating DDS and JMSRick Warren
 
Introduction to Robotic Technology Components (RTC), MARS PTF
Introduction to Robotic Technology Components (RTC), MARS PTFIntroduction to Robotic Technology Components (RTC), MARS PTF
Introduction to Robotic Technology Components (RTC), MARS PTFRick Warren
 

More from Rick Warren (20)

Real-World Git
Real-World GitReal-World Git
Real-World Git
 
Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJava
 
Letters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to ProductionLetters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to Production
 
Patterns of Data Distribution
Patterns of Data DistributionPatterns of Data Distribution
Patterns of Data Distribution
 
Data-centric Invocable Services
Data-centric Invocable ServicesData-centric Invocable Services
Data-centric Invocable Services
 
Engineering Interoperable and Reliable Systems
Engineering Interoperable and Reliable SystemsEngineering Interoperable and Reliable Systems
Engineering Interoperable and Reliable Systems
 
Scaling DDS to Millions of Computers and Devices
Scaling DDS to Millions of Computers and DevicesScaling DDS to Millions of Computers and Devices
Scaling DDS to Millions of Computers and Devices
 
DDS in a Nutshell
DDS in a NutshellDDS in a Nutshell
DDS in a Nutshell
 
C++ PSM for DDS: Revised Submission
C++ PSM for DDS: Revised SubmissionC++ PSM for DDS: Revised Submission
C++ PSM for DDS: Revised Submission
 
Web-Enabled DDS: Revised Submission
Web-Enabled DDS: Revised SubmissionWeb-Enabled DDS: Revised Submission
Web-Enabled DDS: Revised Submission
 
Extensible and Dynamic Topic Types for DDS, Beta 1
Extensible and Dynamic Topic Types for DDS, Beta 1Extensible and Dynamic Topic Types for DDS, Beta 1
Extensible and Dynamic Topic Types for DDS, Beta 1
 
Mapping the RESTful Programming Model to the DDS Data-Centric Model
Mapping the RESTful Programming Model to the DDS Data-Centric ModelMapping the RESTful Programming Model to the DDS Data-Centric Model
Mapping the RESTful Programming Model to the DDS Data-Centric Model
 
Large-Scale System Integration with DDS for SCADA, C2, and Finance
Large-Scale System Integration with DDS for SCADA, C2, and FinanceLarge-Scale System Integration with DDS for SCADA, C2, and Finance
Large-Scale System Integration with DDS for SCADA, C2, and Finance
 
Data-Centric and Message-Centric System Architecture
Data-Centric and Message-Centric System ArchitectureData-Centric and Message-Centric System Architecture
Data-Centric and Message-Centric System Architecture
 
Extensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDSExtensible and Dynamic Topic Types for DDS
Extensible and Dynamic Topic Types for DDS
 
Easing Integration of Large-Scale Real-Time Systems with DDS
Easing Integration of Large-Scale Real-Time Systems with DDSEasing Integration of Large-Scale Real-Time Systems with DDS
Easing Integration of Large-Scale Real-Time Systems with DDS
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDS
 
Robotic Technology Component (RTC) Specification
Robotic Technology Component (RTC) SpecificationRobotic Technology Component (RTC) Specification
Robotic Technology Component (RTC) Specification
 
From the Tactical Edge to the Enterprise: Integrating DDS and JMS
From the Tactical Edge to the Enterprise: Integrating DDS and JMSFrom the Tactical Edge to the Enterprise: Integrating DDS and JMS
From the Tactical Edge to the Enterprise: Integrating DDS and JMS
 
Introduction to Robotic Technology Components (RTC), MARS PTF
Introduction to Robotic Technology Components (RTC), MARS PTFIntroduction to Robotic Technology Components (RTC), MARS PTF
Introduction to Robotic Technology Components (RTC), MARS PTF
 

Recently uploaded

Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Recently uploaded (20)

Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

Java 5 Language PSM for DDS: Final Submission

  • 1. Java 5 PSM for DDS: Revised Submission 2 MARS – Santa Clara, CA – December 2010 Presenter: Rick Warren, RTI Submitting POCs:  Rick Warren, RTI: rick.warren@rti.com  Angelo Corsaro, PrismTech: angelo.corsaro@prismtech.com document number: mars/2010-12-22 Tuesday, December 7, 2010 1
  • 2. Agenda Copyright © 2010 RTI - All rights Reserved 2 Tuesday, December 7, 2010 2
  • 3. Agenda Specification Overview  Goals and Principles  Process Better Living Through Source Code  License  Bootstrapping  Publishing Data  Reading Data  Getting and Setting QoS  Java Type Representation Copyright © 2010 RTI - All rights Reserved 2 Tuesday, December 7, 2010 2
  • 4. Goals & Design Principles Copyright © 2010 RTI - All rights Reserved 3 Tuesday, December 7, 2010 3
  • 5. Goals & Design Principles Improve user experience  standardNamingConvention  Standard containers (e.g. java.util.List)  Standard enumerations  Error conditions reported with exceptions  Serializable, Cloneable value types  Simplified method overloads Copyright © 2010 RTI - All rights Reserved 3 Tuesday, December 7, 2010 3
  • 6. Goals & Design Principles Improve user experience  standardNamingConvention  Standard containers (e.g. java.util.List)  Standard enumerations  Error conditions reported with exceptions  Serializable, Cloneable value types  Simplified method overloads Improve type safety  Generics Copyright © 2010 RTI - All rights Reserved 3 Tuesday, December 7, 2010 3
  • 7. Goals & Design Principles Improve user experience  standardNamingConvention  Standard containers (e.g. java.util.List)  Standard enumerations  Error conditions reported with exceptions  Serializable, Cloneable value types  Simplified method overloads Improve type safety  Generics Improve performance  Loanable memory  No critical-path memory allocation (unlike IDL PSM) Copyright © 2010 RTI - All rights Reserved 3 Tuesday, December 7, 2010 3
  • 8. Goals & Design Principles Improve user experience  standardNamingConvention  Standard containers (e.g. java.util.List)  Standard enumerations  Error conditions reported with exceptions  Serializable, Cloneable value types  Simplified method overloads Improve type safety  Generics Improve performance  Loanable memory  No critical-path memory allocation (unlike IDL PSM) Improve portability  Build apps against standard interfaces; decide at run time which impl to use  Host multiple implementations (or versions) within same JVM  Dynamic loading and unloading  Play nicely with containers, e.g. Java EE and OSGi  Don’t require non-constant static state Copyright © 2010 RTI - All rights Reserved 3 Tuesday, December 7, 2010 3
  • 9. State of the Proposal Copyright © 2010 RTI - All rights Reserved 4 Tuesday, December 7, 2010 4
  • 10. State of the Proposal Ready for implementation  All mandatory requirements satisfied  User vetting process begun  Private conversations with Java power users  Publicly available code repository at http:// code.google.com/p/datadistrib4j/  So far, reviewers enthusiastic Positive AB review  Doug Tolbert: content  Sridhar Iyengar: license Will ask for vote to recommend adoption this week Copyright © 2010 RTI - All rights Reserved 4 Tuesday, December 7, 2010 4
  • 11. Source Code License & Copyright Copyright © 2010 RTI - All rights Reserved 5 Tuesday, December 7, 2010 5
  • 12. Source Code License & Copyright Principles  Every vendor, user will receive code from OMG  Need to know their rights  Need free access to spec, according to OMG principles  OMG must not dictate vendors’ business models  Open source, shared source, closed source must be allowed  ...under variety of licenses Copyright © 2010 RTI - All rights Reserved 5 Tuesday, December 7, 2010 5
  • 13. Source Code License & Copyright Principles  Every vendor, user will receive code from OMG  Need to know their rights  Need free access to spec, according to OMG principles  OMG must not dictate vendors’ business models  Open source, shared source, closed source must be allowed  ...under variety of licenses License  Apache 2.0 (permissive but GPL-compatible)  Use is royalty-free, unlike BSD (proposed last time)  Requires acknowledgement of license, copyright holders from redistributors Copyright © 2010 RTI - All rights Reserved 5 Tuesday, December 7, 2010 5
  • 14. Source Code License & Copyright Principles  Every vendor, user will receive code from OMG  Need to know their rights  Need free access to spec, according to OMG principles  OMG must not dictate vendors’ business models  Open source, shared source, closed source must be allowed  ...under variety of licenses License  Apache 2.0 (permissive but GPL-compatible)  Use is royalty-free, unlike BSD (proposed last time)  Requires acknowledgement of license, copyright holders from redistributors Copyright  OMG, RTI, PrismTech hold copyright  i.e. OMG + submitters, per OMG conventions Copyright © 2010 RTI - All rights Reserved 5 Tuesday, December 7, 2010 5
  • 15. Bootstrapping a DDS Java Application Copyright © 2010 RTI - All rights Reserved 6 Tuesday, December 7, 2010 6
  • 16. Bootstrapping a DDS Java Application Design pattern: API is abstract, stateless  Interfaces when possible; stateless abstract classes when not  Doesn’t dictate state or other implementation to vendors Design pattern: multiple DDS’s coexist in JVM  i.e. Even “singletons” are not Challenge: How do you create the first object? Copyright © 2010 RTI - All rights Reserved 6 Tuesday, December 7, 2010 6
  • 17. Bootstrapping a DDS Java Application Design pattern: API is abstract, stateless  Interfaces when possible; stateless abstract classes when not  Doesn’t dictate state or other implementation to vendors Design pattern: multiple DDS’s coexist in JVM  i.e. Even “singletons” are not Challenge: How do you create the first object? Solution: Bootstrap class  Represents DDS implementation  Step 1: Bootstrap.createInstance(/*system property*/)  Singletons: DomainParticipantFactory.getInstance(myBstrap)  If no PIM factory: Duration.newDuration(myBstrap)  Get back there from anywhere: myDuration.getBootstrap()  * Note: API change since previous submission Copyright © 2010 RTI - All rights Reserved 6 Tuesday, December 7, 2010 6
  • 18. Example: Publishing Data import org.omg.dds.domain.*; import …; // Join domain: DomainParticipantFactory factory = DomainParticipantFactory.getInstance( Bootstrap.createInstance()); DomainParticipant dp = factory.createParticipant(); // Create topic with implicit type registration: Topic<Greeting> tp = dp.createTopic( "My Topic", Greeting.class); // Create publishing entities: Publisher pub = dp.createPublisher(); DataWriter<Greeting> dw = pub.createDataWriter(tp); // Publish data: try { dw.write(new Greeting("Hello, World")); } catch (TimeoutException tx) { tx.printStackTrace(); } // Dispose of all entities: dp.close(); Copyright © 2010 RTI - All rights Reserved 7 Tuesday, December 7, 2010 7
  • 19. Example: Publishing Data import org.omg.dds.domain.*; import …; // Join domain: DomainParticipantFactory factory = DomainParticipantFactory.getInstance( // Explicit TypeSupport w/ default name: Bootstrap.createInstance()); Topic<Greeting> tp = dp.createTopic( DomainParticipant dp = "My Topic", factory.createParticipant(); TypeSupport.newTypeSupport( } Greeting.class, // Create topic with implicit type registration: dp.getBootstrap())); Topic<Greeting> tp = dp.createTopic( "My Topic", // Explicit TypeSupport w/ custom name: Greeting.class); Topic<Greeting> tp = dp.createTopic( // Create publishing entities: or "My Topic", TypeSupport.newTypeSupport( Publisher pub = dp.createPublisher(); Greeting.class, DataWriter<Greeting> dw = "MyType", pub.createDataWriter(tp); dp.getBootstrap())); // Publish data: try { dw.write(new Greeting("Hello, World")); } catch (TimeoutException tx) { tx.printStackTrace(); } // Dispose of all entities: dp.close(); Copyright © 2010 RTI - All rights Reserved 7 Tuesday, December 7, 2010 7
  • 20. Example: Reading Data ... // Create subscribing entities: Subscriber sub = dp.createSubscriber(); DataReader<Greeting> dr = sub.createDataReader( topic, sub.getDefaultDataReaderQos(), listener, null /* all status changes */); ... class MyListener extends DataReaderAdapter<Greeting> { @Override public void onDataAvailable(DataAvailableStatus<Greeting> status) { DataReader<Greeting> dr = status.getSource(); Sample.Iterator<Greeting> it = dr.take(/* loan, or pass List to copy */); try { while (it.hasNext()) { Sample<Greeting> smp = it.next(); // SampleInfo stuff is built into Sample: InstanceHandle inst = smp.getInstanceHandle(); // Data accessible from Sample; null if invalid: Greeting dt = smp.getData(); // ... } } finally { it.returnLoan(); } } } Copyright © 2010 RTI - All rights Reserved 8 Tuesday, December 7, 2010 8
  • 21. Example: Reading Data ... // Create subscribing entities: Subscriber sub = dp.createSubscriber(); DataReader<Greeting> dr = sub.createDataReader( topic, “Listener” is interface: sub.getDefaultDataReaderQos(), listener, implement all. null /* all status changes */); “Adapter” is no-op class: override what ... you want. class MyListener extends DataReaderAdapter<Greeting> { @Override public void onDataAvailable(DataAvailableStatus<Greeting> status) { DataReader<Greeting> dr = status.getSource(); Sample.Iterator<Greeting> it = dr.take(/* loan, or pass List to copy */); try { while (it.hasNext()) { Sample<Greeting> smp = it.next(); // SampleInfo stuff is built into Sample: InstanceHandle inst = smp.getInstanceHandle(); // Data accessible from Sample; null if invalid: Greeting dt = smp.getData(); // ... } } finally { it.returnLoan(); } } } Copyright © 2010 RTI - All rights Reserved 8 Tuesday, December 7, 2010 8
  • 22. Example: Reading Data ... // Create subscribing entities: Subscriber sub = dp.createSubscriber(); DataReader<Greeting> dr = sub.createDataReader( topic, “Listener” is interface: sub.getDefaultDataReaderQos(), listener, implement all. null /* all status changes */); “Adapter” is no-op class: override what ... you want. class MyListener extends DataReaderAdapter<Greeting> { @Override Statuses extend public void onDataAvailable(DataAvailableStatus<Greeting> status) { java.util.EventObject DataReader<Greeting> dr = status.getSource(); Sample.Iterator<Greeting> it = dr.take(/* loan, or pass List to copy */); try { while (it.hasNext()) { Sample<Greeting> smp = it.next(); // SampleInfo stuff is built into Sample: InstanceHandle inst = smp.getInstanceHandle(); // Data accessible from Sample; null if invalid: Greeting dt = smp.getData(); // ... } } finally { it.returnLoan(); } } } Copyright © 2010 RTI - All rights Reserved 8 Tuesday, December 7, 2010 8
  • 23. Example: Get QoS // QoS is a bean-style property of the entity: DataReaderQos qos = myReader.getQos(); // Get specific policy: ReliabilityQosPolicy.Kind rKind = qos.getReliability().getKind(); // EntityQos is a Map from QosPolicy.Id to QosPolicy: for (QosPolicy policy : qos.values()) { // Iterate over all policies, standard or not. // ... } Copyright © 2010 RTI - All rights Reserved 9 Tuesday, December 7, 2010 9
  • 24. Example: Set QoS // Call modify() to get a mutable copy of the QoS: ModifiableDataReaderQos qos = myReader.getQos().modify(); // Modifiable version provides setters: qos.getReliability().setKind( ReliabilityQosPolicy.Kind.RELIABLE); // QoS setter accepts modifiable or unmodifiable objects: myReader.setQos(qos); myReader.setQos(myOtherReader.getQos()); Copyright © 2010 RTI - All rights Reserved 10 Tuesday, December 7, 2010 10
  • 25. Why the modifiable/unmodifiable pattern? Copyright © 2010 RTI - All rights Reserved 11 Tuesday, December 7, 2010 11
  • 26. Why the modifiable/unmodifiable pattern? Easy to use correctly  qos = entity.getQos(); Hard to get wrong  qos = new DataReaderQos(); // ERROR! // What state does ‘qos’ have before the next line? entity.getQos(qos);  What does this mean: myDataReader.getQos().setReliability(…) Copyright © 2010 RTI - All rights Reserved 11 Tuesday, December 7, 2010 11
  • 27. Why the modifiable/unmodifiable pattern? Easy to use correctly  qos = entity.getQos(); Hard to get wrong  qos = new DataReaderQos(); // ERROR! // What state does ‘qos’ have before the next line? entity.getQos(qos);  What does this mean: myDataReader.getQos().setReliability(…) Fast to get  Just return a pointer  No allocation or deep copy needed Good for concurrency  Share immutable objects freely without locking Copyright © 2010 RTI - All rights Reserved 11 Tuesday, December 7, 2010 11
  • 28. Java Type Representation Copyright © 2010 RTI - All rights Reserved 12 Tuesday, December 7, 2010 12
  • 29. Java Type Representation Goal: Write the following code: public class MyPojo /*extends/implements…*/ { private int foo; private Bar[] baz; public void doStuff() { … } } … Topic<MyPojo> t = dp.createTopic( "My Topic", MyPojo.class); Copyright © 2010 RTI - All rights Reserved 12 Tuesday, December 7, 2010 12
  • 30. Java Type Representation Copyright © 2010 RTI - All rights Reserved 13 Tuesday, December 7, 2010 13
  • 31. Java Type Representation Leverage the knowledge of Java developers Leverage the code they already have Copyright © 2010 RTI - All rights Reserved 13 Tuesday, December 7, 2010 13
  • 32. Java Type Representation Leverage the knowledge of Java developers Leverage the code they already have Observations:  JRE already provides type definition constructs  Primitive types, strings, lists (sequences), classes (structures), enumerations, annotations  Types to be sent over network already indicate that  …by implementing java.io.Serializable  …including which fields should not be sent  …with the transient keyword Copyright © 2010 RTI - All rights Reserved 13 Tuesday, December 7, 2010 13
  • 33. Java Type Representation Copyright © 2010 RTI - All rights Reserved 14 Tuesday, December 7, 2010 14
  • 34. Java Type Representation Approach: Define DDS type on the fly based on run-time introspection of Java class Copyright © 2010 RTI - All rights Reserved 14 Tuesday, December 7, 2010 14
  • 35. Java Type Representation Approach: Define DDS type on the fly based on run-time introspection of Java class Convenience feature for non-real-time Java systems  Reflection slower than compiled generated code  If other languages are used, type definitions must be “duplicated” Does not:  ...replace, modify other Language Bindings  ...impact serialization, therefore is interoperable Copyright © 2010 RTI - All rights Reserved 14 Tuesday, December 7, 2010 14
  • 36. Java Type Representation: What It Does Copyright © 2010 RTI - All rights Reserved 15 Tuesday, December 7, 2010 15
  • 37. Java Type Representation: What It Does Defines mappings JRE concepts  DDS concepts  int  Int32 (IDL long)  double  Float64 (IDL double)  java.util.List  Sequence  Serializable class  Structure Allows customization to support non-Java DDS concepts  e.g. unsigned primitives, narrow vs. wide strings, unions  Mechanism: @SerializeAs and other annotations Copyright © 2010 RTI - All rights Reserved 15 Tuesday, December 7, 2010 15
  • 38. Java Type Representation: Example Java IDL Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 39. Java Type Representation: Example Java IDL package com.acme; module com { module acme { Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 40. Java Type Representation: Example Java IDL package com.acme; module com { module acme { class Foo implements Serializable { struct Foo { Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 41. Java Type Representation: Example Java IDL package com.acme; module com { module acme { class Foo implements Serializable { struct Foo { @Key int theInt; @Key long theInt; Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 42. Java Type Representation: Example Java IDL package com.acme; module com { module acme { class Foo implements Serializable { struct Foo { @Key int theInt; @Key long theInt; transient float theFlt; Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 43. Java Type Representation: Example Java IDL package com.acme; module com { module acme { class Foo implements Serializable { struct Foo { @Key int theInt; @Key long theInt; transient float theFlt; String theStr; string theStr; Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 44. Java Type Representation: Example Java IDL package com.acme; module com { module acme { class Foo implements Serializable { struct Foo { @Key int theInt; @Key long theInt; transient float theFlt; String theStr; string theStr; @SerializeAs(UINT_64) BigInteger theUInt; unsigned long theUInt; Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 45. Java Type Representation: Example Java IDL package com.acme; module com { module acme { class Foo implements Serializable { struct Foo { @Key int theInt; @Key long theInt; transient float theFlt; String theStr; string theStr; @SerializeAs(UINT_64) BigInteger theUInt; unsigned long theUInt; String[] theArr; sequence<string> theArr; } }; }} Copyright © 2010 RTI - All rights Reserved 16 Tuesday, December 7, 2010 16
  • 46. Summary Proposed specification is complete  Provides (the first) run-time-portable API for DDS  Improves performance over IDL-based API  Improves type safety over IDL-based API  Simplifies type handling  Satisfies all mandatory requirements We will ask for your vote on Thursday  Vote to vote  Vote to recommend adoption Copyright © 2010 RTI - All rights Reserved 17 Tuesday, December 7, 2010 17
  • 47. Q&A 18 Tuesday, December 7, 2010 18
  • 48. Appendix: Changes Since Cambridge Changed license from BSD to Apache Simplified object creation Modified package organization  Renamed Context to Bootstrap to avoid confusion with JNDI  Modifiable value type variants in parallel packages to simplify package lists  Reduced number of entity and condition factory method overloads  Moved contents of org.omg.dds.type.annotation to org.omg.dds.type  Pass Bootstrap as argument to factories; don’t make it the factory for everything (required changing some  Consolidated statuses in org.omg.dds.core.status interfaces into abstract classes) package to match C++ proposal  Moved built-in topic data interfaces to Improved DDS-XTypes APIs, aligned with FTF org.omg.dds.topic package to match C++  Simplified Dynamic Language Binding by removing proposal unneeded methods All new unchecked exceptions now  Improved overloads in built-in type writers extend common base class  Fixed method names in TypeLibraryElement “union” Improvements to value types Added JavaDoc  All setters return enclosing object to facilitate  Added JavaDoc building to packaging script method chaining  Included some documentation from DDS specification  Improvements to Time and Duration (not done yet)  Leverage TimeUnit Made some “enumerations” more extensible  Address Y2038 problem by vendors  Renamed Qos to EntityQos to match C++ proposal  Replaced status kind mask with collection of status classes  Made QosPolicy.Id an abstract class, not an enumeration Copyright © 2010 RTI - All rights Reserved 19 Tuesday, December 7, 2010 19