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 020 package org.activemq.io.impl; 021 import java.io.DataInput; 022 import java.io.IOException; 023 import org.activemq.message.ActiveMQXid; 024 import org.activemq.message.Packet; 025 import org.activemq.message.TransactionType; 026 import org.activemq.message.XATransactionInfo; 027 028 /** 029 * Reads a TransactionInfo object from a Stream 030 */ 031 032 public class XATransactionInfoReader extends AbstractPacketReader { 033 034 /** 035 * Return the type of Packet 036 * 037 * @return integer representation of the type of Packet 038 */ 039 040 public int getPacketType() { 041 return Packet.XA_TRANSACTION_INFO; 042 } 043 044 /** 045 * @return a new Packet instance 046 */ 047 048 public Packet createPacket() { 049 return new XATransactionInfo(); 050 } 051 052 053 /** 054 * build a Packet instance from the data input stream 055 * 056 * @param packet A Packet object 057 * @param dataIn the data input stream to build the packet from 058 * @throws java.io.IOException 059 */ 060 061 public void buildPacket(Packet packet, DataInput dataIn) throws IOException { 062 super.buildPacket(packet, dataIn); 063 XATransactionInfo info = (XATransactionInfo) packet; 064 info.setType(dataIn.readByte()); 065 switch (info.getType()) { 066 case TransactionType.START: 067 case TransactionType.PRE_COMMIT: 068 case TransactionType.COMMIT: 069 case TransactionType.RECOVER: 070 case TransactionType.ROLLBACK: 071 case TransactionType.END: 072 case TransactionType.FORGET: 073 case TransactionType.JOIN: 074 case TransactionType.COMMIT_ONE_PHASE: 075 info.setXid(ActiveMQXid.read(dataIn)); 076 break; 077 case TransactionType.SET_TX_TIMEOUT: 078 info.setTransactionTimeout(dataIn.readInt()); 079 break; 080 case TransactionType.XA_RECOVER: 081 //recover should take a flag. 082 break; 083 case TransactionType.GET_TX_TIMEOUT: 084 case TransactionType.GET_RM_ID: 085 break; 086 default: 087 throw new IllegalArgumentException("Invalid type code: " + info.getType()); 088 } 089 } 090 091 }