# Class ChannelData

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

All Implemented Interfaces:
  `Serializable, Cloneable, ChannelMessage`

public class ChannelData extends 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.

See Also:
  - Serialized Form

## Field Summary

Fields
Modifier and Type
Field
Description
`static final ChannelData[]`
`EMPTY_DATA_ARRAY`
`static boolean`
`USE_SECURE_RANDOM_FOR_UUID`

## Constructor Summary

Constructors
Constructor
Description
`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

Modifier and Type
Method
Description
`static String`
`bToS(byte[] data)`
`ChannelData`
`clone()`
Create a shallow clone, only the data gets recreated
`Object`
`deepclone()`
Deep clone, all fields MUST get cloned
`boolean`
`equals(Object o)`
Compares to ChannelData objects, only compares on getUniqueId().equals(o.getUniqueId())
`void`
`generateUUID()`
Generates a UUID and invokes setUniqueId
`Member`
`getAddress()`
Get the address that this message originated from.
`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. interceptors heavily depend on this id for message processing
`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 of this message
`void`
`setMessage(XByteBuffer message)`
The byte buffer that contains the actual message payload
`void`
`setOptions(int options)`
sets the option bits for this message
`void`
`setTimestamp(long timestamp)`
Sets the timestamp of this message.
`void`
`setUniqueId(byte[] uniqueId)`
`String`
`toString()`

### Methods inherited from class Object

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

## Field Details

### 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 Details

### 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 Details

### 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:
  XByteBuffer

### 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` - XByteBuffer

### getTimestamp

public long getTimestamp()
Description copied from interface: `ChannelMessage`
Timestamp of when the message was created.

Specified by:
  `getTimestamp` in interface `ChannelMessage`
Returns:
  long timestamp in milliseconds

### 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

### 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:
  byte

### setUniqueId

public void setUniqueId(byte[] uniqueId)

### 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:
  int - the option bits set for this message
See Also:
  - `Channel.send(Member[], Serializable, int)`
  - `ChannelInterceptor.getOptionFlag()`

### setOptions

public void setOptions(int options)
Description copied from interface: `ChannelMessage`
sets the option bits for this message

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

### getAddress

public Member getAddress()
Description copied from interface: `ChannelMessage`
Get the address that this message originated from. Almost always `Channel.getLocalMember(boolean)`. This would be set to a different address if the message was being relayed from a host other than the one that originally sent it.

Specified by:
  `getAddress` in interface `ChannelMessage`
Returns:
  the source or reply-to address of this message

### setAddress

public void setAddress(Member address)
Description copied from interface: `ChannelMessage`
Sets the source or reply-to address of this message

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 `Object`

### equals

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

Overrides:
  `equals` in class `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 `Object`
Returns:
  ClusterData

### deepclone

public Object deepclone()
Description copied from interface: `ChannelMessage`
Deep clone, all fields MUST get cloned

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

### 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 String toString()

Overrides:
  `toString` in class `Object`

### bToS

public static String bToS(byte[] data)