use of com.swiftmq.jms.XidImpl in project swiftmq-client by iitsoftware.
the class XAResourceImpl method rollback.
public synchronized void rollback(Xid xid) throws XAException {
if (logWriter != null)
log(toString() + "/rollback, xid=" + xid);
XidImpl sxid = toSwiftMQXid(xid);
xidMapping.remove(xid);
XAResRollbackReply reply = null;
try {
int connectionId = session.getSessionImpl().getMyConnection().getConnectionId();
session.getSessionImpl().startRecoverConsumers();
session.getAndClearCurrentTransaction();
List recoveryList = null;
if (endRequestInDoubt())
recoveryList = XARecoverRegistry.getInstance().getRequestList(sxid);
Request request = new XAResRollbackRequest(this, session.getDispatchId(), sxid, false, recoveryList, session.getSessionImpl().getRecoveryEpoche());
request.setConnectionId(connectionId);
reply = (XAResRollbackReply) session.request(request);
} catch (Exception e) {
if (completionListener != null)
completionListener.transactionAborted(sxid);
XAException ex = new XAException(e.toString());
ex.errorCode = XAException.XAER_RMFAIL;
throw ex;
}
if (reply.isOk()) {
session.getSessionImpl().endRecoverConsumersXA();
try {
session.getSessionImpl().closeDelayedProducers();
} catch (JMSException e) {
e.printStackTrace();
}
if (completionListener != null)
completionListener.transactionAborted(sxid);
XARecoverRegistry.getInstance().clear(sxid);
} else {
if (completionListener != null)
completionListener.transactionAborted(sxid);
XAException ex = new XAException(reply.getException().getMessage());
if (reply.getErrorCode() != 0)
ex.errorCode = reply.getErrorCode();
else
ex.errorCode = XAException.XAER_RMFAIL;
throw ex;
}
}
use of com.swiftmq.jms.XidImpl in project swiftmq-ce by iitsoftware.
the class HeuristicHandler method messageToEntity.
private void messageToEntity(MessageImpl message, Entity entity) throws Exception {
entity.setName(message.getStringProperty(PROP_SID));
BytesMessageImpl msg = (BytesMessageImpl) message;
byte[] b = new byte[(int) msg.getBodyLength()];
msg.readBytes(b);
DataByteArrayInputStream dis = new DataByteArrayInputStream(b);
XidImpl xid = new XidImpl();
xid.readContent(dis);
entity.setUserObject(xid);
entity.getProperty("xid").setValue(xid.toString());
entity.getProperty("operation").setValue(msg.getStringProperty(PROP_OPER));
}
use of com.swiftmq.jms.XidImpl in project swiftmq-ce by iitsoftware.
the class HeuristicHandler method entityToMessage.
private MessageImpl entityToMessage(Entity entity) throws Exception {
XidImpl xid = (XidImpl) entity.getUserObject();
DataByteArrayOutputStream dos = new DataByteArrayOutputStream();
xid.writeContent(dos);
BytesMessageImpl message = new BytesMessageImpl();
message.setJMSDestination(new QueueImpl(HEURISTIC_QUEUE));
message.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
message.setJMSPriority(Message.DEFAULT_PRIORITY);
message.setJMSExpiration(Message.DEFAULT_TIME_TO_LIVE);
message.setJMSMessageID(MSGID + IdGenerator.getInstance().nextId('/'));
message.setStringProperty(PROP_OPER, (String) entity.getProperty(PROP_OPER).getValue());
message.setStringProperty(PROP_SID, entity.getName());
message.setIntProperty(PROP_IID, Integer.parseInt(entity.getName()));
message.writeBytes(dos.getBuffer(), 0, dos.getCount());
return message;
}
use of com.swiftmq.jms.XidImpl in project swiftmq-ce by iitsoftware.
the class HeuristicHandler method findHeuristic.
private Entity findHeuristic(XidImpl xid) {
Map map = ctx.heuristicUsageList.getEntities();
if (map != null && map.size() > 0) {
for (Iterator iter = map.entrySet().iterator(); iter.hasNext(); ) {
Entity entity = (Entity) ((Map.Entry) iter.next()).getValue();
XidImpl thatXid = (XidImpl) entity.getUserObject();
if (thatXid.equals(xid))
return entity;
}
}
return null;
}
use of com.swiftmq.jms.XidImpl in project swiftmq-client by iitsoftware.
the class XAResCommitRequest method readContent.
public void readContent(DataInput in) throws IOException {
super.readContent(in);
xid = new XidImpl();
xid.readContent(in);
onePhase = in.readBoolean();
byte set = in.readByte();
if (set == 0) {
messages = null;
} else {
int len = in.readInt();
messages = new Object[len];
for (int i = 0; i < len; i++) {
int msglen = in.readInt();
byte[] arr = new byte[msglen];
in.readFully(arr);
messages[i] = arr;
}
}
}
Aggregations