use of com.sun.messaging.jmq.jmsserver.data.TransactionAcknowledgement in project openmq by eclipse-ee4j.
the class TransactionLogReplayer method replayRemoteAcks.
public void replayRemoteAcks(TransactionAcknowledgement[] txnAcks, DestinationUID[] destIds, TransactionUID tid, HashSet dstLoadedSet) throws IOException, BrokerException {
if (Store.getDEBUG()) {
String msg = getPrefix() + " replayRemoteAcks ";
logger.log(Logger.INFO, msg);
}
for (int i = 0; i < txnAcks.length; i++) {
TransactionAcknowledgement txnAck = txnAcks[i];
DestinationUID destId = destIds[i];
SysMessageID mid = txnAck.getSysMessageID();
ConsumerUID iid = txnAck.getStoredConsumerUID();
// Destination dest = DestinationList.getDestination(msgStore.parent, destId);
// make sure it is loaded
int type = (destId.isQueue() ? DestType.DEST_TYPE_QUEUE : DestType.DEST_TYPE_TOPIC);
Destination[] ds = DestinationList.getDestination(msgStore.parent, destId.getName(), type, true, true);
Destination dest = ds[0];
dest.load();
PacketReference pr = dest.getMessage(mid);
if (pr == null) {
// could have been acknowledged already?
// TO DO check this further
String msg = " could not find packet for replayed message ack " + txnAck + " dest " + destId + " in transaction " + tid;
logger.log(Logger.WARNING, msg);
} else {
if (msgStore.containsMessage(destId, mid)) {
logger.log(logger.FORCE, BrokerResources.I_UPDATE_INT_STATE_TXNLOG, iid, mid);
// use try using the correct value; see bug 6516160
if (dest.isQueue() && iid.longValue() != 0) {
msgStore.updateInterestState(destId, mid, PacketReference.getQueueUID(), PartitionedStore.INTEREST_STATE_ACKNOWLEDGED, false);
} else {
msgStore.updateInterestState(destId, mid, iid, PartitionedStore.INTEREST_STATE_ACKNOWLEDGED, false);
}
acknowledgeOnReplay(dest, mid, iid);
} else {
logger.log(logger.FORCE, BrokerResources.I_DISREGARD_INT_STATE_TXNLOG, iid, mid);
}
}
}
}
use of com.sun.messaging.jmq.jmsserver.data.TransactionAcknowledgement in project openmq by eclipse-ee4j.
the class RemoteTransaction2PPrepareEvent method readFromBytes.
@Override
public void readFromBytes(byte[] data) throws IOException, BrokerException {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
remoteTransaction = new RemoteTransaction();
dis.skip(2);
remoteTransaction.getTransactionDetails().readContent(dis);
int objectBodySize = dis.readInt();
byte[] objectBody = new byte[objectBodySize];
dis.read(objectBody);
ByteArrayInputStream bais2 = new ByteArrayInputStream(objectBody);
ObjectInputStream ois = new FilteringObjectInputStream(bais2);
try {
remoteTransaction.setTransactionState((TransactionState) ois.readObject());
remoteTransaction.setTxnHomeBroker((BrokerAddress) ois.readObject());
remoteTransaction.setTxnAcks((TransactionAcknowledgement[]) ois.readObject());
remoteTransaction.setDestIds((DestinationUID[]) ois.readObject());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ois.close();
bais2.close();
dis.close();
bais.close();
}
Aggregations