Package org.apache.catalina.tribes.io

## Class ChannelData

- java.lang.Object
- - org.apache.catalina.tribes.io.ChannelData

All Implemented Interfaces:
  `java.io.Serializable`, `java.lang.Cloneable`, `ChannelMessage`

    public class ChannelData
    extends java.lang.Object
    implements ChannelMessage

The `ChannelData` object is used to transfer a message through the channel interceptor stack and eventually out on a transport to be sent to another node. While the message is being processed by the different interceptors, the message data can be manipulated as each interceptor seems appropriate.

Author:
  Peter Rossbach
See Also:
  Serialized Form

### Field Summary

Fields
`static ChannelData[]` `EMPTY_DATA_ARRAY`
`static boolean` `USE_SECURE_RANDOM_FOR_UUID`

### Constructor Summary

Constructors
`ChannelData()` Creates an empty channel data with a new unique Id
`ChannelData​(boolean generateUUID)` Create an empty channel data object
`ChannelData​(byte[] uniqueId, XByteBuffer message, long timestamp)` Creates a new channel data object with data

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`static java.lang.String` `bToS​(byte[] data)`
`ChannelData` `clone()` Create a shallow clone, only the data gets recreated
`java.lang.Object` `deepclone()` Complete clone
`boolean` `equals​(java.lang.Object o)` Compares to ChannelData objects, only compares on getUniqueId().equals(o.getUniqueId())
`void` `generateUUID()` Generates a UUID and invokes setUniqueId
`Member` `getAddress()` Returns the source or reply-to address
`static ChannelData` `getDataFromPackage​(byte[] b)`
`static ChannelData` `getDataFromPackage​(XByteBuffer xbuf)` Deserializes a ChannelData object from a byte array
`byte[]` `getDataPackage()` Serializes the ChannelData object into a byte[] array
`byte[]` `getDataPackage​(byte[] data, int offset)`
`int` `getDataPackageLength()`
`XByteBuffer` `getMessage()` returns the byte buffer that contains the actual message payload
`int` `getOptions()` The message options is a 32 bit flag set that triggers interceptors and message behavior.
`long` `getTimestamp()` Timestamp of when the message was created.
`byte[]` `getUniqueId()` Each message must have a globally unique Id.
`int` `hashCode()`
`static boolean` `sendAckAsync​(int options)` Utility method, returns true if the options flag indicates that an ack is to be sent after the message has been received but not yet processed
`static boolean` `sendAckSync​(int options)` Utility method, returns true if the options flag indicates that an ack is to be sent after the message has been received and processed
`void` `setAddress​(Member address)` Sets the source or reply-to address
`void` `setMessage​(XByteBuffer message)` The byte buffer that contains the actual message payload
`void` `setOptions​(int options)` Sets the message options.
`void` `setTimestamp​(long timestamp)` Sets the timestamp of this message.
`void` `setUniqueId​(byte[] uniqueId)`
`java.lang.String` `toString()`

### Methods inherited from class java.lang.Object

`finalize, getClass, notify, notifyAll, wait, wait, wait`

### Field Detail

#### EMPTY_DATA_ARRAY

    public static final ChannelData[] EMPTY_DATA_ARRAY

#### USE_SECURE_RANDOM_FOR_UUID

    public static volatile boolean USE_SECURE_RANDOM_FOR_UUID

### Constructor Detail

#### ChannelData

    public ChannelData()

Creates an empty channel data with a new unique Id

See Also:
  `ChannelData(boolean)`

#### ChannelData

    public ChannelData​(boolean generateUUID)

Create an empty channel data object

Parameters:
  `generateUUID` - boolean - if true, a unique Id will be generated

#### ChannelData

    public ChannelData​(byte[] uniqueId,
                       XByteBuffer message,
                       long timestamp)

Creates a new channel data object with data

Parameters:
  `uniqueId` - - unique message id
  `message` - - message data
  `timestamp` - - message timestamp

### Method Detail

#### getMessage

    public XByteBuffer getMessage()

Description copied from interface: `ChannelMessage`
returns the byte buffer that contains the actual message payload

Specified by:
  `getMessage` in interface `ChannelMessage`
Returns:
  Returns the message byte buffer

#### setMessage

    public void setMessage​(XByteBuffer message)

Description copied from interface: `ChannelMessage`
The byte buffer that contains the actual message payload

Specified by:
  `setMessage` in interface `ChannelMessage`
Parameters:
  `message` - The message to send.

#### getTimestamp

    public long getTimestamp()

Description copied from interface: `ChannelMessage`
Timestamp of when the message was created.

Specified by:
  `getTimestamp` in interface `ChannelMessage`
Returns:
  Returns the timestamp.

#### setTimestamp

    public void setTimestamp​(long timestamp)

Description copied from interface: `ChannelMessage`
Sets the timestamp of this message.

Specified by:
  `setTimestamp` in interface `ChannelMessage`
Parameters:
  `timestamp` - The timestamp to send

#### getUniqueId

    public byte[] getUniqueId()

Description copied from interface: `ChannelMessage`
Each message must have a globally unique Id. interceptors heavily depend on this id for message processing

Specified by:
  `getUniqueId` in interface `ChannelMessage`
Returns:
  Returns the uniqueId.

#### setUniqueId

    public void setUniqueId​(byte[] uniqueId)

Parameters:
  `uniqueId` - The uniqueId to send.

#### getOptions

    public int getOptions()

Description copied from interface: `ChannelMessage`
The message options is a 32 bit flag set that triggers interceptors and message behavior.

Specified by:
  `getOptions` in interface `ChannelMessage`
Returns:
  returns the message options see org.apache.catalina.tribes.Channel#sendMessage(org.apache.catalina.tribes.Member[], java.io.Serializable, int)
See Also:
  `Channel.send(Member[], Serializable, int)`, `ChannelInterceptor.getOptionFlag()`

#### setOptions

    public void setOptions​(int options)

Sets the message options.

Specified by:
  `setOptions` in interface `ChannelMessage`
Parameters:
  `options` - the message options
See Also:
  `ChannelMessage.getOptions()`

#### getAddress

    public Member getAddress()

Returns the source or reply-to address

Specified by:
  `getAddress` in interface `ChannelMessage`
Returns:
  Member

#### setAddress

    public void setAddress​(Member address)

Sets the source or reply-to address

Specified by:
  `setAddress` in interface `ChannelMessage`
Parameters:
  `address` - Member

#### generateUUID

    public void generateUUID()

Generates a UUID and invokes setUniqueId

#### getDataPackageLength

    public int getDataPackageLength()

#### getDataPackage

    public byte[] getDataPackage()

Serializes the ChannelData object into a byte[] array

Returns:
  byte[]

#### getDataPackage

    public byte[] getDataPackage​(byte[] data,
                                 int offset)

#### getDataFromPackage

    public static ChannelData getDataFromPackage​(XByteBuffer xbuf)

Deserializes a ChannelData object from a byte array

Parameters:
  `xbuf` - byte[]
Returns:
  ChannelData

#### getDataFromPackage

    public static ChannelData getDataFromPackage​(byte[] b)

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `java.lang.Object`

#### equals

    public boolean equals​(java.lang.Object o)

Compares to ChannelData objects, only compares on getUniqueId().equals(o.getUniqueId())

Overrides:
  `equals` in class `java.lang.Object`
Parameters:
  `o` - Object
Returns:
  boolean

#### clone

    public ChannelData clone()

Create a shallow clone, only the data gets recreated

Specified by:
  `clone` in interface `ChannelMessage`
Overrides:
  `clone` in class `java.lang.Object`
Returns:
  ClusterData

#### deepclone

    public java.lang.Object deepclone()

Complete clone

Specified by:
  `deepclone` in interface `ChannelMessage`
Returns:
  ClusterData

#### sendAckSync

    public static boolean sendAckSync​(int options)

Utility method, returns true if the options flag indicates that an ack is to be sent after the message has been received and processed

Parameters:
  `options` - int - the options for the message
Returns:
  boolean
See Also:
  `Channel.SEND_OPTIONS_USE_ACK`, `Channel.SEND_OPTIONS_SYNCHRONIZED_ACK`

#### sendAckAsync

    public static boolean sendAckAsync​(int options)

Utility method, returns true if the options flag indicates that an ack is to be sent after the message has been received but not yet processed

Parameters:
  `options` - int - the options for the message
Returns:
  boolean
See Also:
  `Channel.SEND_OPTIONS_USE_ACK`, `Channel.SEND_OPTIONS_SYNCHRONIZED_ACK`

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### bToS

    public static java.lang.String bToS​(byte[] data)