jtaEnvironmentBean.getValue().setUserTransaction(userTransaction); service.setJbossXATerminator(xaTerminatorInjector.getValue()); service.setTransactionSynchronizationRegistry(new TransactionSynchronizationRegistryWrapper()); jtaEnvironmentBean.getValue().setUserTransaction(userTransaction); service.setJbossXATerminator(xaTerminatorInjector.getValue()); service.setTransactionSynchronizationRegistry(new TransactionSynchronizationRegistryWrapper()); final Field field = TransactionManagerLocator.class.getDeclaredField("tm"); field.setAccessible(true); field.set(TransactionManagerLocator.getInstance(), jtaEnvironmentBean.getValue().getTransactionManager()); } catch (IllegalAccessException e) { throw new IllegalAccessError(e.getMessage());
jtaPropertyManager.getJTAEnvironmentBean().getTransactionSynchronizationRegistry(); InitialContext initContext = new InitialContext(); initContext.rebind(uniqueName, managedDataSource); initContext.rebind("java:comp/UserTransaction", com.arjuna.ats.jta.UserTransaction.userTransaction()); initContext.rebind("java:comp/TransactionManager", tm); initContext.rebind("java:comp/TransactionSynchronizationRegistry", tsr);
@Override public void start(StartContext context) throws StartException { List<String> connectableResourceJNDINames = jtaEnvironmentBean.getValue().getCommitMarkableResourceJNDINames(); Map<String, String> connectableResourceTableNameMap = jtaEnvironmentBean.getValue().getCommitMarkableResourceTableNameMap(); Map<String, Boolean> performImmediateCleanupOfConnectableResourceBranchesMap = jtaEnvironmentBean.getValue().getPerformImmediateCleanupOfCommitMarkableResourceBranchesMap(); Map<String, Integer> connectableResourceRecordDeleteBatchSizeMap = jtaEnvironmentBean.getValue().getCommitMarkableResourceRecordDeleteBatchSizeMap(); connectableResourceJNDINames.add(jndiName); connectableResourceTableNameMap.put(jndiName, tableName); performImmediateCleanupOfConnectableResourceBranchesMap.put(jndiName, immediateCleanup); connectableResourceRecordDeleteBatchSizeMap.put(jndiName, batchSize); jtaEnvironmentBean.getValue().setCommitMarkableResourceJNDINames(connectableResourceJNDINames); jtaEnvironmentBean.getValue().setCommitMarkableResourceTableNameMap(connectableResourceTableNameMap); jtaEnvironmentBean.getValue().setPerformImmediateCleanupOfCommitMarkableResourceBranchesMap(performImmediateCleanupOfConnectableResourceBranchesMap); jtaEnvironmentBean.getValue().setCommitMarkableResourceRecordDeleteBatchSizeMap(connectableResourceRecordDeleteBatchSizeMap); }
@Override public void stop(StopContext context) { jtaEnvironmentBean.getValue().getCommitMarkableResourceJNDINames().remove(jndiName); jtaEnvironmentBean.getValue().getCommitMarkableResourceTableNameMap().remove(tableName); jtaEnvironmentBean.getValue().getPerformImmediateCleanupOfCommitMarkableResourceBranchesMap().remove(jndiName); jtaEnvironmentBean.getValue().getCommitMarkableResourceRecordDeleteBatchSizeMap().remove(jndiName); }
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(); }
/** * Retrieve a reference to the transaction manager from the passed in JNDI initial context. * @param ctx The JNDI initial context to lookup the Transaction Manager reference from. * @return The transaction manager bound to the appropriate JNDI context. Returns null * if the transaction manager cannot be found. * */ public static javax.transaction.TransactionManager transactionManager (InitialContext ctx) { javax.transaction.TransactionManager transactionManager = null; try { transactionManager = (javax.transaction.TransactionManager)ctx.lookup(jtaPropertyManager.getJTAEnvironmentBean().getTransactionManagerJNDIContext()); } catch (Exception e) { jtaLogger.i18NLogger.warn_TransactionManager_jndifailure(e); } return transactionManager; }
System.setProperty("ObjectStoreEnvironmentBean.objectStoreDir", _storeDir); System.setProperty("com.arjuna.ats.arjuna.objectstore.objectStoreDir", _storeDir); _jtaEnvironmentBean = jtaPropertyManager.getJTAEnvironmentBean(); _jtaEnvironmentBean.setTransactionManagerClassName(com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple.class.getName()); _jtaEnvironmentBean.setUserTransactionClassName(com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple.class.getName()); _jtaEnvironmentBean.setTransactionSynchronizationRegistryClassName(com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple.class.getName()); InitialContext initialContext = new InitialContext(); initialContext.bind("java:jboss/TransactionManager", _jtaEnvironmentBean.getTransactionManager()); initialContext.bind("java:jboss/UserTransaction", _jtaEnvironmentBean.getUserTransaction()); initialContext.bind("java:jboss/TransactionSynchronizationRegistry", _jtaEnvironmentBean.getTransactionSynchronizationRegistry());
private void delete(String jndiName, List<Xid> completedXids) { int batchSize = jtaEnvironmentBean .getCommitMarkableResourceRecordDeleteBatchSize(); Integer integer = jtaEnvironmentBean .getCommitMarkableResourceRecordDeleteBatchSizeMap().get( jndiName); if (integer != null) { Connection connection = null; DataSource dataSource = (DataSource) context .lookup(jndiName); try { connection = dataSource.getConnection();
/** * Bind the currently configured transaction manager implementation to the JNDI * context passed in. * @param initialContext * @throws javax.naming.NamingException */ public static void bindJTATransactionManagerImplementation(InitialContext initialContext) throws javax.naming.NamingException { /** Look up and instantiate an instance of the configured transaction manager implementation **/ String tmImplementation = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManagerClassName(); /** Bind the transaction manager to the appropriate JNDI context **/ Reference ref = new Reference(tmImplementation, tmImplementation, null); initialContext.rebind(getTransactionManagerJNDIName(), ref); }
/** * Bind the currently configured TransactionSynchronizationRegistry implementation to the passed in * JNDI context. * @param initialContext * @throws javax.naming.NamingException */ public static void bindJTATransactionSynchronizationRegistryImplementation(InitialContext initialContext) throws javax.naming.NamingException { /** Look up and instantiate an instance of the configured TransactionSynchronizationRegistry implementation **/ String tsrImplementation = jtaPropertyManager.getJTAEnvironmentBean().getTransactionSynchronizationRegistryClassName(); Object tsr = null; try { tsr = Class.forName(tsrImplementation).newInstance(); } catch(Exception e) { NamingException namingException = new ConfigurationException(jtaLogger.i18NLogger.get_utils_JNDIManager_tsr1()); namingException.setRootCause(e); throw namingException; } /** Bind the TransactionSynchronizationRegistry to the appropriate JNDI context **/ initialContext.rebind(getTransactionSynchronizationRegistryJNDIName(), tsr); }
/** * Creates a new {@link TransactionContext}. * * @deprecated Please use the {@link #TransactionContext(Supplier, * Supplier)} constructor instead. */ @Deprecated public TransactionContext() { this(() -> jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager(), () -> jtaPropertyManager.getJTAEnvironmentBean().getTransactionSynchronizationRegistry()); }
/** * Retrieve the singleton transaction manager reference. * @return The singleton transaction manager. Can return null if the instantiation failed. */ public synchronized static javax.transaction.TransactionManager transactionManager () { return jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager(); } }
/** * Retrieve the singleton UserTransaction reference. * * @return The singleton UserTransaction reference. Can return null if the * instantiation failed. */ public static synchronized javax.transaction.UserTransaction userTransaction () { return jtaPropertyManager.getJTAEnvironmentBean().getUserTransaction(); } }
@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; } }
event.addBean(new JNDIBean<>(jtaPropertyManager.getJTAEnvironmentBean().getTransactionManagerJNDIContext(), TransactionManager.class)); maybeAddInitialContextBean = true; event.addBean(new JNDIBean<>(jtaPropertyManager.getJTAEnvironmentBean().getTransactionSynchronizationRegistryJNDIContext(), TransactionSynchronizationRegistry.class)); maybeAddInitialContextBean = true;
@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; } }
private final static String getTransactionSynchronizationRegistryJNDIName() { return jtaPropertyManager.getJTAEnvironmentBean().getTransactionSynchronizationRegistryJNDIContext(); } }
private final static String getTransactionManagerJNDIName() { return jtaPropertyManager.getJTAEnvironmentBean().getTransactionManagerJNDIContext(); }
@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); } } }
/** * User internal factory method to instantiate new or reuse existing instance of * {@link javax.transaction.TransactionSynchronizationRegistry}. * * @param obj * @param name * @param nameCtx * @param environment * @return instance of {@link javax.transaction.TransactionSynchronizationRegistry} or {@code null} if instantiation has * failed. */ @Override public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) { return jtaPropertyManager.getJTAEnvironmentBean().getTransactionSynchronizationRegistry(); }