String tid = rs.getString("TRANSACTION"); int id = getNextId(XID); Xid xid = new JdbcXid(factory, id, tid); list.add(xid);
/** * The transaction branch identifier. * * @return the identifier */ @Override public byte[] getBranchQualifier() { debugCodeCall("getBranchQualifier"); return branchQualifier; }
JdbcXid(JdbcDataSourceFactory factory, int id, String tid) { setTrace(factory.getTrace(), TraceObject.XID, id); try { StringTokenizer tokenizer = new StringTokenizer(tid, "_"); String prefix = tokenizer.nextToken(); if (!PREFIX.equals(prefix)) { throw DbException.get(ErrorCode.WRONG_XID_FORMAT_1, tid); } formatId = Integer.parseInt(tokenizer.nextToken()); branchQualifier = StringUtils.convertHexToBytes(tokenizer.nextToken()); globalTransactionId = StringUtils.convertHexToBytes(tokenizer.nextToken()); } catch (RuntimeException e) { throw DbException.get(ErrorCode.WRONG_XID_FORMAT_1, tid); } }
/** * Forget a transaction. * This method does not have an effect for this database. * * @param xid the transaction id */ @Override public void forget(Xid xid) { if (isDebugEnabled()) { debugCode("forget("+JdbcXid.toString(xid)+");"); } prepared = false; }
/** * INTERNAL */ public String toString() { return getTraceObjectName() + ": " + getAsString(); }
/** * Prepare a transaction. * * @param xid the transaction id * @return XA_OK */ @Override public int prepare(Xid xid) throws XAException { if (isDebugEnabled()) { debugCode("prepare("+JdbcXid.toString(xid)+");"); } checkOpen(); if (!currentTransaction.equals(xid)) { throw new XAException(XAException.XAER_INVAL); } try (Statement stat = physicalConn.createStatement()) { stat.execute("PREPARE COMMIT " + JdbcXid.toString(xid)); prepared = true; } catch (SQLException e) { throw convertException(e); } return XA_OK; }
/** * The global transaction identifier. * * @return the transaction id */ @Override public byte[] getGlobalTransactionId() { debugCodeCall("getGlobalTransactionId"); return globalTransactionId; }
/** * End a transaction. * * @param xid the transaction id * @param flags TMSUCCESS, TMFAIL, or TMSUSPEND */ @Override public void end(Xid xid, int flags) throws XAException { if (isDebugEnabled()) { debugCode("end("+JdbcXid.toString(xid)+", "+quoteFlags(flags)+");"); } // TODO transaction end: implement this method if (flags == TMSUSPEND) { return; } if (!currentTransaction.equals(xid)) { throw new XAException(XAException.XAER_OUTSIDE); } prepared = false; }
JdbcXid(JdbcDataSourceFactory factory, int id, String tid) throws SQLException { setTrace(factory.getTrace(), TraceObject.XID, id); try { StringTokenizer tokenizer = new StringTokenizer(tid, "_"); String prefix = tokenizer.nextToken(); if (!PREFIX.equals(prefix)) { throw Message.getSQLException(ErrorCode.WRONG_XID_FORMAT_1, tid); } formatId = Integer.parseInt(tokenizer.nextToken()); branchQualifier = ByteUtils.convertStringToBytes(tokenizer.nextToken()); globalTransactionId = ByteUtils.convertStringToBytes(tokenizer.nextToken()); } catch (Throwable e) { throw Message.getSQLException(ErrorCode.WRONG_XID_FORMAT_1, tid); } }
String tid = rs.getString("TRANSACTION"); int id = getNextId(XID); Xid xid = new JdbcXid(factory, id, tid); list.add(xid);
/** * Get the format id. * * @return the format id */ @Override public int getFormatId() { debugCodeCall("getFormatId"); return formatId; }
/** * Commit a transaction. * * @param xid the transaction id * @param onePhase use a one-phase protocol if true */ @Override public void commit(Xid xid, boolean onePhase) throws XAException { if (isDebugEnabled()) { debugCode("commit("+JdbcXid.toString(xid)+", "+onePhase+");"); } try { if (onePhase) { physicalConn.commit(); } else { try (Statement stat = physicalConn.createStatement()) { stat.execute("COMMIT TRANSACTION " + JdbcXid.toString(xid)); prepared = false; } } physicalConn.setAutoCommit(true); } catch (SQLException e) { throw convertException(e); } currentTransaction = null; }
JdbcXid(JdbcDataSourceFactory factory, int id, String tid) { setTrace(factory.getTrace(), TraceObject.XID, id); try { StringTokenizer tokenizer = new StringTokenizer(tid, "_"); String prefix = tokenizer.nextToken(); if (!PREFIX.equals(prefix)) { throw DbException.get(ErrorCode.WRONG_XID_FORMAT_1, tid); } formatId = Integer.parseInt(tokenizer.nextToken()); branchQualifier = StringUtils.convertHexToBytes(tokenizer.nextToken()); globalTransactionId = StringUtils.convertHexToBytes(tokenizer.nextToken()); } catch (RuntimeException e) { throw DbException.get(ErrorCode.WRONG_XID_FORMAT_1, tid); } }
String tid = rs.getString("TRANSACTION"); int id = getNextId(XID); Xid xid = new JdbcXid(factory, id, tid); list.add(xid);
/** * Get the format id. * * @return the format id */ public int getFormatId() { debugCodeCall("getFormatId"); return formatId; }
/** * Roll back a transaction. * * @param xid the transaction id */ @Override public void rollback(Xid xid) throws XAException { if (isDebugEnabled()) { debugCode("rollback("+JdbcXid.toString(xid)+");"); } try { if (prepared) { try (Statement stat = physicalConn.createStatement()) { stat.execute("ROLLBACK TRANSACTION " + JdbcXid.toString(xid)); } prepared = false; } else { physicalConn.rollback(); } physicalConn.setAutoCommit(true); } catch (SQLException e) { throw convertException(e); } currentTransaction = null; }
JdbcXid(JdbcDataSourceFactory factory, int id, String tid) { setTrace(factory.getTrace(), TraceObject.XID, id); try { StringTokenizer tokenizer = new StringTokenizer(tid, "_"); String prefix = tokenizer.nextToken(); if (!PREFIX.equals(prefix)) { throw DbException.get(ErrorCode.WRONG_XID_FORMAT_1, tid); } formatId = Integer.parseInt(tokenizer.nextToken()); branchQualifier = StringUtils.convertHexToBytes(tokenizer.nextToken()); globalTransactionId = StringUtils.convertHexToBytes(tokenizer.nextToken()); } catch (RuntimeException e) { throw DbException.get(ErrorCode.WRONG_XID_FORMAT_1, tid); } }
String tid = rs.getString("TRANSACTION"); int id = getNextId(XID); Xid xid = new JdbcXid(factory, id, tid); list.add(xid);
/** * The global transaction identifier. * * @return the transaction id */ public byte[] getGlobalTransactionId() { debugCodeCall("getGlobalTransactionId"); return globalTransactionId; }
/** * Start or continue to work on a transaction. * * @param xid the transaction id * @param flags TMNOFLAGS, TMJOIN, or TMRESUME */ @Override public void start(Xid xid, int flags) throws XAException { if (isDebugEnabled()) { debugCode("start("+JdbcXid.toString(xid)+", "+quoteFlags(flags)+");"); } if (flags == TMRESUME) { return; } if (flags == TMJOIN) { if (currentTransaction != null && !currentTransaction.equals(xid)) { throw new XAException(XAException.XAER_RMERR); } } else if (currentTransaction != null) { throw new XAException(XAException.XAER_NOTA); } try { physicalConn.setAutoCommit(false); } catch (SQLException e) { throw convertException(e); } currentTransaction = xid; prepared = false; }