package org.jboss.mq;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
import javax.transaction.xa.Xid;
public class TransactionRequest implements Externalizable
{
static final long serialVersionUID = 5368191944552650149L;
public final static byte ONE_PHASE_COMMIT_REQUEST = 0;
public final static byte TWO_PHASE_COMMIT_PREPARE_REQUEST = 1;
public final static byte TWO_PHASE_COMMIT_COMMIT_REQUEST = 2;
public final static byte TWO_PHASE_COMMIT_ROLLBACK_REQUEST = 3;
public byte requestType = ONE_PHASE_COMMIT_REQUEST;
public Object xid;
public SpyMessage[] messages;
public AcknowledgementRequest[] acks;
public void readExternal(ObjectInput in) throws IOException
{
requestType = in.readByte();
try
{
xid = in.readObject();
}
catch (ClassNotFoundException e)
{
throw new IOException("Class not found for xid.");
}
int size = in.readInt();
messages = new SpyMessage[size];
for (int i = 0; i < size; ++i)
messages[i] = SpyMessage.readMessage(in);
size = in.readInt();
acks = new AcknowledgementRequest[size];
for (int i = 0; i < size; ++i)
{
acks[i] = new AcknowledgementRequest();
acks[i].readExternal(in);
}
}
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeByte(requestType);
if (xid != null && xid instanceof Xid && xid instanceof Serializable == false)
out.writeObject(new JBossMQXid((Xid) xid));
else
out.writeObject(xid);
if (messages == null)
out.writeInt(0);
else
{
out.writeInt(messages.length);
for (int i = 0; i < messages.length; ++i)
SpyMessage.writeMessage(messages[i], out);
}
if (acks == null)
out.writeInt(0);
else
{
out.writeInt(acks.length);
for (int i = 0; i < acks.length; ++i)
acks[i].writeExternal(out);
}
}
}