The RemoteAlertSender can be used to send notifications to (remote) entities
identified by principal names. This service is provided by Protocol Adapters,
and is used by the
org.osgi.service.dmt.notification.NotificationService when sending
alerts. Implementations of this interface have to be able to connect and send
alerts to one or more management servers in a protocol specific way.

The properties of the service registration should specify a list of
destinations (principals) where the service is capable of sending alerts.
This can be done by providing a String array of principal names in
the principals registration property. If this property is not
registered, the service will be treated as the default sender. The default
alert sender is only used when a more specific alert sender cannot be found.

Sends an alert to a server identified by its principal name. In case the
alert is sent in response to a previous
execute command, a correlation identifier can be specified to provide
the association between the execute and the alert.

The principal parameter specifies which server the alert should
be sent to. This parameter can be null if the client does not
know the name of the destination. The alert should still be delivered if
possible; for example if the alert sender is only connected to one
destination.

Any exception thrown on this method will be propagated to the original
sender of the event, wrapped in a DmtException with the code
REMOTE_ERROR.

Since sending the alert and receiving acknowledgment for it is
potentially a very time-consuming operation, alerts are sent
asynchronously. This method should attempt to ensure that the alert can
be sent successfully, and should throw an exception if it detects any
problems. If the method returns without error, the alert is accepted for
sending and the implementation must make a best-effort attempt to deliver
it.

Parameters:

principal the name identifying the server where the alert should
be sent, can be null

code the alert code, can be 0 if not needed

correlator the correlation identifier of an associated EXEC
command, or null if there is no associated EXEC

items the data of the alert items carried in this alert, can be
empty or null if no alert items are needed