RTI Connext Java API  Version 5.0.0
Listener Interface Reference

<<interface>> Abstract base class for all Listener interfaces. More...

Inheritance diagram for Listener:
DataWriterListener DataReaderListener TopicListener EntityHowTo.MyEntityListener DataWriterAdapter PublisherListener DataReaderAdapter SubscriberListener DomainParticipantListener TopicAdapter PublisherAdapter DomainParticipantListener PublisherAdapter SubscriberAdapter DomainParticipantListener SubscriberAdapter DomainParticipantAdapter DomainParticipantAdapter DomainParticipantAdapter DomainParticipantAdapter DomainParticipantAdapter

Detailed Description

<<interface>> Abstract base class for all Listener interfaces.

Entity:
com.rti.dds.infrastructure.Entity
QoS:
QoS Policies
Status:
Status Kinds

All the supported kinds of concrete com.rti.dds.infrastructure.Listener interfaces (one per concrete com.rti.dds.infrastructure.Entity type) derive from this root and add methods whose prototype depends on the concrete Listener.

Listeners provide a way for RTI Connext to asynchronously alert the application when there are relevant status changes.

Almost every application will have to implement listener interfaces.

Each dedicated listener presents a list of operations that correspond to the relevant communication status changes to which an application may respond.

The same com.rti.dds.infrastructure.Listener instance may be shared among multiple entities if you so desire. Consequently, the provided parameter contains a reference to the concerned com.rti.dds.infrastructure.Entity.

Access to Plain Communication Status

The general mapping between the plain communication statuses (see Status Kinds) and the listeners' operations is as follows:

  • For each communication status, there is a corresponding operation whose name is on_<communication_status>(), which takes a parameter of type <communication_status> as listed in Status Kinds.
DDSListenerDispatching.png
Hierarchical listener processing. The most specific relevant enabled listener is called.
  • When the application attaches a listener on an entity, it must set a mask. The mask indicates to RTI Connext which operations are enabled within the listener (cf. operation com.rti.dds.infrastructure.Entity set_listener() ).
  • When a plain communication status changes, RTI Connext triggers the most specific relevant listener operation that is enabled. In case the most specific relevant listener operation corresponds to an application-installed 'nil' listener the operation will be considered handled by a NO-OP operation that does not reset the communication status.

This behavior allows the application to set a default behavior (e.g., in the listener associated with the com.rti.dds.domain.DomainParticipant) and to set dedicated behaviors only where needed.

Access to Read Communication Status

The two statuses related to data arrival are treated slightly differently. Since they constitute the core purpose of the Data Distribution Service, there is no need to provide a default mechanism (as is done for the plain communication statuses above).

The rule is as follows. Each time the read communication status changes:

The rationale is that either the application is interested in relations among data arrivals and it must use the first option (and then get the corresponding com.rti.dds.subscription.DataReader objects by calling com.rti.dds.subscription.Subscriber.get_datareaders on the related com.rti.dds.subscription.Subscriber and then get the data by calling com.rti.ndds.example.FooDataReader.read or com.rti.ndds.example.FooDataReader.take on the returned com.rti.dds.subscription.DataReader objects), or it wants to treat each com.rti.dds.subscription.DataReader independently and it may choose the second option (and then get the data by calling com.rti.ndds.example.FooDataReader.read or com.rti.ndds.example.FooDataReader.take on the related com.rti.dds.subscription.DataReader).

Note that if com.rti.dds.subscription.SubscriberListener.on_data_on_readers is called, RTI Connext will not try to call com.rti.dds.subscription.DataReaderListener.on_data_available. However, an application can force a call to the com.rti.dds.subscription.DataReader objects that have data by calling com.rti.dds.subscription.Subscriber.notify_datareaders.

Operations Allowed in Listener Callbacks

The operations that are allowed in com.rti.dds.infrastructure.Listener callbacks depend on the com.rti.dds.infrastructure.ExclusiveAreaQosPolicy QoS policy of the com.rti.dds.infrastructure.Entity to which the com.rti.dds.infrastructure.Listener is attached – or in the case of a com.rti.dds.publication.DataWriter of com.rti.dds.subscription.DataReader listener, on the com.rti.dds.infrastructure.ExclusiveAreaQosPolicy QoS of the parent com.rti.dds.publication.Publisher or com.rti.dds.subscription.Subscriber. For instance, the com.rti.dds.infrastructure.ExclusiveAreaQosPolicy settings of a com.rti.dds.subscription.Subscriber will determine which operations are allowed within the callbacks of the listeners associated with all the DataReaders created through that com.rti.dds.subscription.Subscriber.

Note: these restrictions do not apply to builtin topic listener callbacks.

Regardless of whether com.rti.dds.infrastructure.ExclusiveAreaQosPolicy.use_shared_exclusive_area is set to com.rti.dds.infrastructure.true or com.rti.dds.infrastructure.false, the following operations are not allowed:

An attempt to call a disallowed method from within a callback will result in com.rti.dds.infrastructure.RETCODE_ILLEGAL_OPERATION.

If com.rti.dds.infrastructure.ExclusiveAreaQosPolicy.use_shared_exclusive_area is set to com.rti.dds.infrastructure.false, the setting which allows more concurrency among RTI Connext threads, the following are not allowed:

An attempt to call a disallowed method from within a callback will result in com.rti.dds.infrastructure.RETCODE_ILLEGAL_OPERATION.

The above limitations can be lifted by setting com.rti.dds.infrastructure.ExclusiveAreaQosPolicy.use_shared_exclusive_area to com.rti.dds.infrastructure.true on the com.rti.dds.publication.Publisher or com.rti.dds.subscription.Subscriber (or on the com.rti.dds.publication.Publisher/ com.rti.dds.subscription.Subscriber of the com.rti.dds.publication.DataWriter/com.rti.dds.subscription.DataReader) to which the listener is attached. However, the application will pay the cost of reduced concurrency between the affected publishers and subscribers.

See Also
EXCLUSIVE_AREA
Status Kinds
com.rti.dds.infrastructure.WaitSet, com.rti.dds.infrastructure.Condition

RTI Connext Java API Version 5.0.0 Copyright © Thu Aug 30 2012 Real-Time Innovations, Inc