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 }