001 /**
002 *
003 * Copyright 2004 Protique Ltd
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 **/
018
019 package org.activemq.io.impl;
020 import java.io.DataOutput;
021 import java.io.IOException;
022 import org.activemq.message.Packet;
023 import org.activemq.message.TransactionType;
024 import org.activemq.message.XATransactionInfo;
025
026 /**
027 * Writes a TransactionInfo object to a Stream
028 */
029
030 public class XATransactionInfoWriter extends AbstractPacketWriter {
031
032 /**
033 * Return the type of Packet
034 *
035 * @return integer representation of the type of Packet
036 */
037
038 public int getPacketType() {
039 return Packet.XA_TRANSACTION_INFO;
040 }
041
042 /**
043 * Write a Packet instance to data output stream
044 *
045 * @param packet the instance to be seralized
046 * @param dataOut the output stream
047 * @throws java.io.IOException thrown if an error occurs
048 */
049
050 public void writePacket(Packet packet, DataOutput dataOut) throws IOException {
051 super.writePacket(packet, dataOut);
052 XATransactionInfo info = (XATransactionInfo) packet;
053 dataOut.writeByte(info.getType());
054 switch (info.getType()) {
055 case TransactionType.START:
056 case TransactionType.PRE_COMMIT:
057 case TransactionType.COMMIT:
058 case TransactionType.RECOVER:
059 case TransactionType.ROLLBACK:
060 case TransactionType.END:
061 case TransactionType.FORGET:
062 case TransactionType.JOIN:
063 case TransactionType.COMMIT_ONE_PHASE:
064 assert info.getXid() != null;
065 info.getXid().write(dataOut);
066 break;
067 case TransactionType.SET_TX_TIMEOUT:
068 dataOut.writeInt(info.getTransactionTimeout());
069 break;
070 case TransactionType.XA_RECOVER:
071 //recover should take a flag.
072 break;
073 case TransactionType.GET_TX_TIMEOUT:
074 case TransactionType.GET_RM_ID:
075 break;
076 default:
077 throw new IllegalArgumentException("Invalid type code: " + info.getType());
078 }
079 }
080
081 }