10.2. State management
10.2.1. Object States
JBoss Transaction Service remembers the state of an object for the purposes of recovery and persistence. In the case of recovery, the state represents some past state of the object. When persistence is involved, the state represents the final state of an object at application termination. Since recovery and persistence include common functionality, they are both implemented using the
Input/OutputObjectState
and Input/OutputBuffer
classes.
The
InputBuffer
class in Example 10.2, “InputBuffer” and the OutputBuffer
classe in Example 10.1, “OutputBuffer Example” maintain an internal array into which instances of the standard Java types can be contiguously packed (unpacked) using the pack (unpack) operations. This buffer is automatically resized as required. The instances are all stored in the buffer in a standard form called network byte order, making them machine-independent.
Example 10.1. OutputBuffer Example
public class OutputBuffer { public OutputBuffer (); public final synchronized boolean valid (); public synchronized byte[] buffer(); public synchronized int length (); /* pack operations for standard Java types */ public synchronized void packByte (byte b) throws IOException; public synchronized void packBytes (byte[] b) throws IOException; public synchronized void packBoolean (boolean b) throws IOException; public synchronized void packChar (char c) throws IOException; public synchronized void packShort (short s) throws IOException; public synchronized void packInt (int i) throws IOException; public synchronized void packLong (long l) throws IOException; public synchronized void packFloat (float f) throws IOException; public synchronized void packDouble (double d) throws IOException; public synchronized void packString (String s) throws IOException; };
Example 10.2. InputBuffer
public class InputBuffer { public InputBuffer (); public final synchronized boolean valid (); public synchronized byte[] buffer(); public synchronized int length (); /* unpack operations for standard Java types */ public synchronized byte unpackByte () throws IOException; public synchronized byte[] unpackBytes () throws IOException; public synchronized boolean unpackBoolean () throws IOException; public synchronized char unpackChar () throws IOException; public synchronized short unpackShort () throws IOException; public synchronized int unpackInt () throws IOException; public synchronized long unpackLong () throws IOException; public synchronized float unpackFloat () throws IOException; public synchronized double unpackDouble () throws IOException; public synchronized String unpackString () throws IOException; };
Example 10.3. OutputObjectState
class OutputObjectState extends OutputBuffer { public OutputObjectState (Uid newUid, String typeName); public boolean notempty (); public int size (); public Uidpublic class InputBuffer { public InputBuffer (); public final synchronized boolean valid (); public synchronized byte[] buffer(); public synchronized int length (); /* unpack operations for standard Java types */ public synchronized byte unpackByte () throws IOException; public synchronized byte[] unpackBytes () throws IOException; public synchronized boolean unpackBoolean () throws IOException; public synchronized char unpackChar () throws IOException; public synchronized short unpackShort () throws IOException; public synchronized int unpackInt () throws IOException; public synchronized long unpackLong () throws IOException; public synchronized float unpackFloat () throws IOException; public synchronized double unpackDouble () throws IOException; public synchronized String unpackString () throws IOException; };
Example 10.4. InputObjectState
class InputObjectState extends InputBuffer { public InputObjectState (Uid newUid, String typeName, byte[] b); public boolean notempty (); public int size (); public Uid stateUid (); public String type (); };
The Example 10.4, “InputObjectState” and Example 10.3, “OutputObjectState” classes provides all the functionality of the
InputBuffer
and OutputBuffer
classes, through inheritance. They also add two additional instance variables that signify the Uid and type of the object for which the InputObjectState
or OutputObjectState
instance is a compressed image. These are used when accessing the object store during storage and retrieval of the object state.