Universal Lossless Data Protocol Library

The Universal Lossless Data Protocol (ULDP) library provides a means for users to connect to a LogLogic LMI appliance and send logs to it.

Overview

The ULDP protocol is designed to send log data in a reliable and secure manner from their collection point to a LogLogic LMI appliance. TIBCO LogLogic® Universal Collector uses this protocol to communicate with a LogLogic LMI appliance.

Using the ULDP library, you can:

  • Send data in raw mode.
  • Send encrypted and compressed data.
  • Tag files that are sent to LogLogic LMI to allow properly identifying the log source.
  • Send log files in such a way that the time stamps are parsed.

The ULDP library is provided in the ULDPClient directory of the LogLogic LMI supplemental package. For more information, see the README.txt file in the same directory.

How Messages are Transmitted

When messages are sent, they are placed in a queue, waiting for their acknowledgements to arrive. If at some point the size of the queue is more than the maximum value (MaxQueueSize), a mandatory request for acknowledgment is sent and no further messages are sent until the acknowledgement is received, thereby effectively blocking the sendMessage call.

The sequence of calls is:

  1. Create a UldpConnectionSettings object and set its properties. At minimum, the destination host should be set.
  2. Create a UldpSender object, passing the UldpConnectionSettings as a parameter.
  3. Call the connect() method on the UldpSender object.
  4. For each log message element to be sent, perform the following steps:
    1. Create a UldpLogMessage object.
    2. Call the sendMessage() method of the UldpSender object, passing it the UldpLogMessage Object.
    3. Optionally, call the flush() method if nothing is ready to be sent.
  5. Call the close() method of the UldpSender object when desired.

    If the close() method raises the exception PendingAckMessageException, which means some messages have not been acknowledged by the LogLogic LMI appliance, and are possibly not received properly. Upon the next call to connect, those events will be sent again, possibly ending up with duplicates, but avoiding any message loss.

Note: This library is not thread-safe. If multiple threads need to send messages through sendMessage() calls, the calls should be synchronized, for example by using:
synchronized(sender) {
    sender.sendMessage(...)
}