10.2. ステート管理

10.2.1. オブジェクトステート

JBoss Transaction Serviceは、リカバリや永続化できるようにオブジェクトステートを記憶します。リカバリの場合、ステートは過去のオブジェクトステートを指し、永続性の場合、ステートはアプリケーション終了時の最終的なオブジェクトステートを指します。リカバリや永続化には共通の機能が含まれているため、両方ともInput/OutputObjectState および Input/OutputBufferクラスを使い実装されます。
例10.2「InputBuffer」InputBuffer クラスと例10.1「OutputBuffer の例」OutputBufferクラスにて、pack (unpack) 操作を使い、標準Java タイプのインスタンスを連続的にパック (アンパック) できる内部アレイを維持します。このバッファは必要であれば自動的にサイズの調整がなされます。インスタンスはすべて、バッファ内にネットワークバイトオーダー (network byte order)と呼ばれる標準形式で格納され、マシンに依存しないようにします。

例10.1 OutputBuffer の例

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;
};

例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;
};

例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;
    };

例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 ();
};
例10.4「InputObjectState」 および 例10.3「OutputObjectState」クラスは、継承を使いInputBufferOutputBufferクラスの全機能を提供します。また、これらのクラスにより、インスタンス変数を2つ追加しますが、これらの変数はInputObjectState あるいは OutputObjectState インスタンスが圧縮イメージとなっているオブジェクトのUid およびタイプを表します。オブジェクトステートを格納あるいはリトリーブするときにオブジェクトストアにアクセスする場合はこれらを使います。