/** * Compare two XIDs for equality. * @param obj the XID to compare to. * @return true if both XIDs have the same format ID and contain exactly the same GTRID and BQUAL. */ public boolean equals(Object obj) { if (!(obj instanceof BitronixXid)) return false; BitronixXid otherXid = (BitronixXid) obj; return FORMAT_ID == otherXid.getFormatId() && globalTransactionId.equals(otherXid.getGlobalTransactionIdUid()) && branchQualifier.equals(otherXid.getBranchQualifierUid()); }
/** * Compare two XIDs for equality. * @param obj the XID to compare to. * @return true if both XIDs have the same format ID and contain exactly the same GTRID and BQUAL. */ public boolean equals(Object obj) { if (!(obj instanceof BitronixXid)) return false; BitronixXid otherXid = (BitronixXid) obj; return FORMAT_ID == otherXid.getFormatId() && globalTransactionId.equals(otherXid.getGlobalTransactionIdUid()) && branchQualifier.equals(otherXid.getBranchQualifierUid()); }
/** * Compare two XIDs for equality. * @param obj the XID to compare to. * @return true if both XIDs have the same format ID and contain exactly the same GTRID and BQUAL. */ @Override public boolean equals(Object obj) { if (!(obj instanceof BitronixXid)) return false; BitronixXid otherXid = (BitronixXid) obj; return FORMAT_ID == otherXid.getFormatId() && globalTransactionId.equals(otherXid.getGlobalTransactionIdUid()) && branchQualifier.equals(otherXid.getBranchQualifierUid()); }
/** * Compare two XIDs for equality. * @param obj the XID to compare to. * @return true if both XIDs have the same format ID and contain exactly the same GTRID and BQUAL. */ @Override public boolean equals(Object obj) { if (!(obj instanceof BitronixXid)) return false; BitronixXid otherXid = (BitronixXid) obj; return FORMAT_ID == otherXid.getFormatId() && globalTransactionId.equals(otherXid.getGlobalTransactionIdUid()) && branchQualifier.equals(otherXid.getBranchQualifierUid()); }
@Override public boolean equals(Object obj) { if (obj instanceof BitronixTransaction) { BitronixTransaction tx = (BitronixTransaction) obj; return resourceManager.getGtrid().equals(tx.resourceManager.getGtrid()); } return false; }
@Override public boolean equals(Object obj) { if (obj instanceof BitronixTransaction) { BitronixTransaction tx = (BitronixTransaction) obj; return resourceManager.getGtrid().equals(tx.resourceManager.getGtrid()); } return false; }
/** * Return {@link DanglingTransaction}s with {@link Xid}s corresponding to the GTRID parameter found in resources * specified by their <code>uniqueName</code>s. * <code>recoverAllResources</code> must have been called before or else the returned list will always be empty. * Step 2. * @param uniqueNames a set of <code>uniqueName</code>s. * @param gtrid the GTRID to look for. * @return a set of {@link DanglingTransaction}s. */ private Set<DanglingTransaction> getDanglingTransactionsInRecoveredXids(Set<String> uniqueNames, Uid gtrid) { Set<DanglingTransaction> danglingTransactions = new HashSet<DanglingTransaction>(); for (String uniqueName : uniqueNames) { if (log.isDebugEnabled()) log.debug("finding dangling transaction(s) in recovered XID(s) of resource " + uniqueName); Set<BitronixXid> recoveredXids = recoveredXidSets.get(uniqueName); if (recoveredXids == null) { if (log.isDebugEnabled()) log.debug("resource " + uniqueName + " did not recover, skipping commit"); continue; } for (BitronixXid recoveredXid : recoveredXids) { if (gtrid.equals(recoveredXid.getGlobalTransactionIdUid())) { if (log.isDebugEnabled()) log.debug("found a recovered XID matching dangling log's GTRID " + gtrid + " in resource " + uniqueName); danglingTransactions.add(new DanglingTransaction(uniqueName, recoveredXid)); } } } return danglingTransactions; }
public boolean equals(Object obj) { if (obj instanceof BitronixTransaction) { BitronixTransaction tx = (BitronixTransaction) obj; return resourceManager.getGtrid().equals(tx.resourceManager.getGtrid()); } return false; }
public boolean equals(Object obj) { if (obj instanceof BitronixTransaction) { BitronixTransaction tx = (BitronixTransaction) obj; return resourceManager.getGtrid().equals(tx.resourceManager.getGtrid()); } return false; }
/** * Return {@link DanglingTransaction}s with {@link Xid}s corresponding to the GTRID parameter found in resources * specified by their <code>uniqueName</code>s. * <code>recoverAllResources</code> must have been called before or else the returned list will always be empty. * Step 2. * @param uniqueNames a set of <code>uniqueName</code>s. * @param gtrid the GTRID to look for. * @return a set of {@link DanglingTransaction}s. */ private Set<DanglingTransaction> getDanglingTransactionsInRecoveredXids(Set<String> uniqueNames, Uid gtrid) { Set<DanglingTransaction> danglingTransactions = new HashSet<DanglingTransaction>(); for (String uniqueName : uniqueNames) { if (log.isDebugEnabled()) { log.debug("finding dangling transaction(s) in recovered XID(s) of resource " + uniqueName); } Set<BitronixXid> recoveredXids = recoveredXidSets.get(uniqueName); if (recoveredXids == null) { if (log.isDebugEnabled()) { log.debug("resource " + uniqueName + " did not recover, skipping commit"); } continue; } for (BitronixXid recoveredXid : recoveredXids) { if (gtrid.equals(recoveredXid.getGlobalTransactionIdUid())) { if (log.isDebugEnabled()) { log.debug("found a recovered XID matching dangling log's GTRID " + gtrid + " in resource " + uniqueName); } danglingTransactions.add(new DanglingTransaction(uniqueName, recoveredXid)); } } } return danglingTransactions; }
/** * Return {@link DanglingTransaction}s with {@link Xid}s corresponding to the GTRID parameter found in resources * specified by their <code>uniqueName</code>s. * <code>recoverAllResources</code> must have been called before or else the returned list will always be empty. * Step 2. * @param uniqueNames a set of <code>uniqueName</code>s. * @param gtrid the GTRID to look for. * @return a set of {@link DanglingTransaction}s. */ private Set<DanglingTransaction> getDanglingTransactionsInRecoveredXids(Set<String> uniqueNames, Uid gtrid) { Set<DanglingTransaction> danglingTransactions = new HashSet<DanglingTransaction>(); for (String uniqueName : uniqueNames) { if (log.isDebugEnabled()) { log.debug("finding dangling transaction(s) in recovered XID(s) of resource " + uniqueName); } Set<BitronixXid> recoveredXids = recoveredXidSets.get(uniqueName); if (recoveredXids == null) { if (log.isDebugEnabled()) { log.debug("resource " + uniqueName + " did not recover, skipping commit"); } continue; } for (BitronixXid recoveredXid : recoveredXids) { if (gtrid.equals(recoveredXid.getGlobalTransactionIdUid())) { if (log.isDebugEnabled()) { log.debug("found a recovered XID matching dangling log's GTRID " + gtrid + " in resource " + uniqueName); } danglingTransactions.add(new DanglingTransaction(uniqueName, recoveredXid)); } } } return danglingTransactions; }
/** * Return {@link DanglingTransaction}s with {@link Xid}s corresponding to the GTRID parameter found in resources * specified by their <code>uniqueName</code>s. * <code>recoverAllResources</code> must have been called before or else the returned list will always be empty. * Step 2. * @param uniqueNames a set of <code>uniqueName</code>s. * @param gtrid the GTRID to look for. * @return a set of {@link DanglingTransaction}s. */ private Set<DanglingTransaction> getDanglingTransactionsInRecoveredXids(Set<String> uniqueNames, Uid gtrid) { Set<DanglingTransaction> danglingTransactions = new HashSet<DanglingTransaction>(); for (String uniqueName : uniqueNames) { if (log.isDebugEnabled()) log.debug("finding dangling transaction(s) in recovered XID(s) of resource " + uniqueName); Set<BitronixXid> recoveredXids = recoveredXidSets.get(uniqueName); if (recoveredXids == null) { if (log.isDebugEnabled()) log.debug("resource " + uniqueName + " did not recover, skipping commit"); continue; } for (BitronixXid recoveredXid : recoveredXids) { if (gtrid.equals(recoveredXid.getGlobalTransactionIdUid())) { if (log.isDebugEnabled()) log.debug("found a recovered XID matching dangling log's GTRID " + gtrid + " in resource " + uniqueName); danglingTransactions.add(new DanglingTransaction(uniqueName, recoveredXid)); } } } return danglingTransactions; }
private static boolean containsXAResourceHolderMatchingGtrid(XAStatefulHolder xaStatefulHolder, Uid currentTxGtrid) { List<XAResourceHolder> xaResourceHolders = xaStatefulHolder.getXAResourceHolders(); if (log.isDebugEnabled()) log.debug(xaResourceHolders.size() + " xa resource(s) created by connection in NOT_ACCESSIBLE state: " + xaStatefulHolder); for (XAResourceHolder xaResourceHolder : xaResourceHolders) { Map<Uid, XAResourceHolderState> statesForGtrid = xaResourceHolder.getXAResourceHolderStatesForGtrid(currentTxGtrid); if (statesForGtrid == null) return false; for (XAResourceHolderState xaResourceHolderState : statesForGtrid.values()) { // compare GTRIDs BitronixXid bitronixXid = xaResourceHolderState.getXid(); Uid resourceGtrid = bitronixXid.getGlobalTransactionIdUid(); if (log.isDebugEnabled()) log.debug("NOT_ACCESSIBLE xa resource GTRID: " + resourceGtrid); if (currentTxGtrid.equals(resourceGtrid)) { if (log.isDebugEnabled()) log.debug("NOT_ACCESSIBLE xa resource's GTRID matched this transaction's GTRID, recycling it"); return true; } } } return false; }
private static boolean containsXAResourceHolderMatchingGtrid(XAStatefulHolder xaStatefulHolder, Uid currentTxGtrid) { List<XAResourceHolder> xaResourceHolders = xaStatefulHolder.getXAResourceHolders(); if (log.isDebugEnabled()) log.debug(xaResourceHolders.size() + " xa resource(s) created by connection in NOT_ACCESSIBLE state: " + xaStatefulHolder); for (XAResourceHolder xaResourceHolder : xaResourceHolders) { Map<Uid, XAResourceHolderState> statesForGtrid = xaResourceHolder.getXAResourceHolderStatesForGtrid(currentTxGtrid); if (statesForGtrid == null) return false; for (XAResourceHolderState xaResourceHolderState : statesForGtrid.values()) { // compare GTRIDs BitronixXid bitronixXid = xaResourceHolderState.getXid(); Uid resourceGtrid = bitronixXid.getGlobalTransactionIdUid(); if (log.isDebugEnabled()) log.debug("NOT_ACCESSIBLE xa resource GTRID: " + resourceGtrid); if (currentTxGtrid.equals(resourceGtrid)) { if (log.isDebugEnabled()) log.debug("NOT_ACCESSIBLE xa resource's GTRID matched this transaction's GTRID, recycling it"); return true; } } } return false; }
@Override public int compare(BitronixTransaction t1, BitronixTransaction t2) { Long timestamp1 = t1.getResourceManager().getGtrid().extractTimestamp(); Long timestamp2 = t2.getResourceManager().getGtrid().extractTimestamp(); int compareTo = timestamp1.compareTo(timestamp2); if (compareTo == 0 && !t1.getResourceManager().getGtrid().equals(t2.getResourceManager().getGtrid())) { // if timestamps are equal, use the Uid as the tie-breaker. the !equals() check above avoids an expensive string compare() here. return t1.getGtrid().compareTo(t2.getGtrid()); } return compareTo; } };
@Override public int compare(BitronixTransaction t1, BitronixTransaction t2) { Long timestamp1 = t1.getResourceManager().getGtrid().extractTimestamp(); Long timestamp2 = t2.getResourceManager().getGtrid().extractTimestamp(); int compareTo = timestamp1.compareTo(timestamp2); if (compareTo == 0 && !t1.getResourceManager().getGtrid().equals(t2.getResourceManager().getGtrid())) { // if timestamps are equal, use the Uid as the tie-breaker. the !equals() check above avoids an expensive string compare() here. return t1.getGtrid().compareTo(t2.getGtrid()); } return compareTo; } };
private static XAResourceHolderState getLatestAlreadyEnlistedXAResourceHolderState(XAResourceHolder xaResourceHolder, BitronixTransaction currentTransaction) { if (currentTransaction == null) return null; Map<Uid, XAResourceHolderState> statesForGtrid = xaResourceHolder.getXAResourceHolderStatesForGtrid(currentTransaction.getResourceManager().getGtrid()); if (statesForGtrid == null) return null; XAResourceHolderState result = null; // iteration order is guraranteed so just take the latest matching one in the iterator for (XAResourceHolderState xaResourceHolderState : statesForGtrid.values()) { if (xaResourceHolderState != null && xaResourceHolderState.getXid() != null) { BitronixXid bitronixXid = xaResourceHolderState.getXid(); Uid resourceGtrid = bitronixXid.getGlobalTransactionIdUid(); Uid currentTransactionGtrid = currentTransaction.getResourceManager().getGtrid(); if (currentTransactionGtrid.equals(resourceGtrid)) { result = xaResourceHolderState; } } } return result; }
private static XAResourceHolderState getLatestAlreadyEnlistedXAResourceHolderState(XAResourceHolder xaResourceHolder, BitronixTransaction currentTransaction) { if (currentTransaction == null) return null; Map<Uid, XAResourceHolderState> statesForGtrid = xaResourceHolder.getXAResourceHolderStatesForGtrid(currentTransaction.getResourceManager().getGtrid()); if (statesForGtrid == null) return null; XAResourceHolderState result = null; // iteration order is guraranteed so just take the latest matching one in the iterator for (XAResourceHolderState xaResourceHolderState : statesForGtrid.values()) { if (xaResourceHolderState != null && xaResourceHolderState.getXid() != null) { BitronixXid bitronixXid = xaResourceHolderState.getXid(); Uid resourceGtrid = bitronixXid.getGlobalTransactionIdUid(); Uid currentTransactionGtrid = currentTransaction.getResourceManager().getGtrid(); if (currentTransactionGtrid.equals(resourceGtrid)) { result = xaResourceHolderState; } } } return result; }