public CommitMarkableResourceRecordRecoveryModule() throws NamingException, ObjectStoreException { context = new InitialContext(); JTAEnvironmentBean jtaEnvironmentBean = BeanPopulator .getDefaultInstance(JTAEnvironmentBean.class); jndiNamesToContact.addAll(jtaEnvironmentBean .getCommitMarkableResourceJNDINames()); List<String> xaRecoveryNodes = jtaEnvironmentBean.getXaRecoveryNodes(); if (xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes(); whereFilter = ""; } else if (xaRecoveryNodes .contains(NodeNameXAResourceOrphanFilter.RECOVER_ALL_NODES)) { whereFilter = ""; } else { StringBuffer buffer = new StringBuffer(); Iterator<String> iterator = xaRecoveryNodes.iterator(); while (iterator.hasNext()) { buffer.append("\'" + iterator.next() + "\',"); } whereFilter = " where transactionManagerID in ( " + buffer.substring(0, buffer.length() - 1) + ")"; } if (recoveryStore == null) { recoveryStore = StoreManager.getRecoveryStore(); } transactionStatusConnectionMgr = new TransactionStatusConnectionManager(); }
List<String> xaRecoveryNodes = jtaEnvironmentBean.getXaRecoveryNodes(); if (xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes();
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { doWarning(); return Vote.ABSTAIN; } if ((_xaRecoveryNodes.contains(RECOVER_ALL_NODES))) { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("Ignoring node name. Will recover " + xid); } return Vote.ROLLBACK; } String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("node name of " + xid + " is " + nodeName); } if (_xaRecoveryNodes.contains(nodeName)) { return Vote.ROLLBACK; } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { doWarning(); return Vote.ABSTAIN; } if ((_xaRecoveryNodes.contains(RECOVER_ALL_NODES))) { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("Ignoring node name. Will recover " + xid); } return Vote.ROLLBACK; } String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("node name of " + xid + " is " + nodeName); } if (_xaRecoveryNodes.contains(nodeName)) { return Vote.ROLLBACK; } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { doWarning(); return Vote.ABSTAIN; } if ((_xaRecoveryNodes.contains(RECOVER_ALL_NODES))) { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("Ignoring node name. Will recover " + xid); } return Vote.ROLLBACK; } String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("node name of " + xid + " is " + nodeName); } if (_xaRecoveryNodes.contains(nodeName)) { return Vote.ROLLBACK; } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { doWarning(); return Vote.ABSTAIN; } if ((_xaRecoveryNodes.contains(RECOVER_ALL_NODES))) { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("Ignoring node name. Will recover " + xid); } return Vote.ROLLBACK; } String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("node name of " + xid + " is " + nodeName); } if (_xaRecoveryNodes.contains(nodeName)) { return Vote.ROLLBACK; } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { doWarning(); return Vote.ABSTAIN; } if ((_xaRecoveryNodes.contains(RECOVER_ALL_NODES))) { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("Ignoring node name. Will recover " + xid); } return Vote.ROLLBACK; } String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("node name of " + xid + " is " + nodeName); } if (_xaRecoveryNodes.contains(nodeName)) { return Vote.ROLLBACK; } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { doWarning(); return Vote.ABSTAIN; } if ((_xaRecoveryNodes.contains(RECOVER_ALL_NODES))) { if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("Ignoring node name. Will recover " + xid); } return Vote.ROLLBACK; } String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("node name of " + xid + " is " + nodeName); } if (_xaRecoveryNodes.contains(nodeName)) { return Vote.ROLLBACK; } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes(); return Vote.ABSTAIN; } String nodeName = XATxConverter.getSubordinateNodeName(new XidImple(xid).getXID()); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("subordinate node name of " + xid + " is " + nodeName); } if (!_xaRecoveryNodes.contains(nodeName)) { // It either doesn't have a subordinate node name or isn't for this server return Vote.ABSTAIN; } // It does have an XID if (nodeName != null) { if (transactionLog(xid, nodeName)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.ABSTAIN; } else { return Vote.ROLLBACK; } } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes(); return Vote.ABSTAIN; } String nodeName = XATxConverter.getSubordinateNodeName(new XidImple(xid).getXID()); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("subordinate node name of " + xid + " is " + nodeName); } if (!_xaRecoveryNodes.contains(nodeName)) { // It either doesn't have a subordinate node name or isn't for this server return Vote.ABSTAIN; } // It does have an XID if (nodeName != null) { if (transactionLog(xid, nodeName)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.ABSTAIN; } else { return Vote.ROLLBACK; } } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes(); return Vote.ABSTAIN; } String nodeName = XATxConverter.getSubordinateNodeName(new XidImple(xid).getXID()); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("subordinate node name of " + xid + " is " + nodeName); } if (!_xaRecoveryNodes.contains(nodeName)) { // It either doesn't have a subordinate node name or isn't for this server return Vote.ABSTAIN; } // It does have an XID if (nodeName != null) { if (transactionLog(xid, nodeName)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.ABSTAIN; } else { return Vote.ROLLBACK; } } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes(); return Vote.ABSTAIN; } String nodeName = XATxConverter.getSubordinateNodeName(new XidImple(xid).getXID()); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("subordinate node name of " + xid + " is " + nodeName); } if (!_xaRecoveryNodes.contains(nodeName)) { // It either doesn't have a subordinate node name or isn't for this server return Vote.ABSTAIN; } // It does have an XID if (nodeName != null) { if (transactionLog(xid, nodeName)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.ABSTAIN; } else { return Vote.ROLLBACK; } } else { return Vote.ABSTAIN; } }
@Override public Vote checkXid(Xid xid) { List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); if(_xaRecoveryNodes == null || _xaRecoveryNodes.size() == 0) { jtaLogger.i18NLogger.info_recovery_noxanodes(); return Vote.ABSTAIN; } String nodeName = XATxConverter.getSubordinateNodeName(new XidImple(xid).getXID()); if (jtaLogger.logger.isDebugEnabled()) { jtaLogger.logger.debug("subordinate node name of " + xid + " is " + nodeName); } if (!_xaRecoveryNodes.contains(nodeName)) { // It either doesn't have a subordinate node name or isn't for this server return Vote.ABSTAIN; } // It does have an XID if (nodeName != null) { if (transactionLog(xid, nodeName)) { // it's owned by a logged transaction which // will recover it top down in due course return Vote.ABSTAIN; } else { return Vote.ROLLBACK; } } else { return Vote.ABSTAIN; } }
Uid u = theXid.getTransactionUid(); List<String> xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) {
Uid u = theXid.getTransactionUid(); List<String> xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) {
Uid u = theXid.getTransactionUid(); List<String> xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); String nodeName = XAUtils.getXANodeName(xid); if (jtaLogger.logger.isDebugEnabled()) {
List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes();
List<String> _xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes();
@Test public void testSubordinateJTAXAResourceOrphanFilter() throws HeuristicRollbackException, HeuristicMixedException, HeuristicCommitException, SystemException, RollbackException, XAException { XAResourceOrphanFilter orphanFilter = new SubordinateJTAXAResourceOrphanFilter(); XidImple xid = (XidImple) XATxConverter.getXid(Uid.nullUid(), false, XATxConverter.FORMAT_ID); XATxConverter.setSubordinateNodeName(xid.getXID(), TxControl.getXANodeName()); List<String> xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); try { jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(Arrays.asList("2")); assertEquals(XAResourceOrphanFilter.Vote.ABSTAIN, orphanFilter.checkXid(xid)); jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(Arrays.asList("1")); assertEquals(XAResourceOrphanFilter.Vote.ROLLBACK, orphanFilter.checkXid(xid)); } finally { jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(xaRecoveryNodes); } } }
@Test public void testJTAActionStatusServiceXAResourceOrphanFilter() { XAResourceOrphanFilter orphanFilter = new JTAActionStatusServiceXAResourceOrphanFilter(); List<String> xaRecoveryNodes = jtaPropertyManager.getJTAEnvironmentBean().getXaRecoveryNodes(); List<String> recoveryNodes = new LinkedList<String>(); recoveryNodes.add("1"); jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(recoveryNodes); try { Uid uid = new Uid(); Xid xid = XATxConverter.getXid(uid, false, XATxConverter.FORMAT_ID); assertEquals(XAResourceOrphanFilter.Vote.ROLLBACK, orphanFilter.checkXid(xid)); TwoPhaseCoordinator tpc = new TwoPhaseCoordinator(uid); try { tpc.start(); assertEquals(XAResourceOrphanFilter.Vote.LEAVE_ALONE, orphanFilter.checkXid(xid)); } finally { tpc.cancel(); } assertEquals(XAResourceOrphanFilter.Vote.ROLLBACK, orphanFilter.checkXid(xid)); jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(null); TwoPhaseCoordinator tpc2 = new TwoPhaseCoordinator(uid); tpc2.start(); assertEquals(XAResourceOrphanFilter.Vote.ABSTAIN, orphanFilter.checkXid(xid)); tpc2.cancel(); } finally { jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(xaRecoveryNodes); } }