/** * Load recovery modules prior to starting to recovery. These are loaded in list iteration order. */ private void loadModules () { _recoveryModules.addAll(recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryModules()); }
private static void loadScanners() { _expiryScanners = new Vector(); for(ExpiryScanner scanner : recoveryPropertyManager.getRecoveryEnvironmentBean().getExpiryScanners()) { if ( scanner.toBeUsed() ) { _expiryScanners.add( scanner ); } } }
boolean useListener = recoveryPropertyManager.getRecoveryEnvironmentBean().isRecoveryListener(); tsLogger.i18NLogger.fatal_recovery_fail(RecoveryManager.getRecoveryManagerHost().getHostAddress(), Integer.toString(RecoveryManager.getRecoveryManagerPort())); tsLogger.i18NLogger.fatal_recovery_fail("unknown", "unknown"); throw new FatalError("Recovery manager already active (or recovery port and address are in use)!"); ExpiredEntryMonitor.startUp(); _periodicRecovery = new PeriodicRecovery(threaded, useListener); tsLogger.i18NLogger.info_recovery_socketready( Integer.toString(_periodicRecovery.getServerSocket().getLocalPort()));
/** * Create service and Transaction status manager item. */ private void start( String serviceName, String host, int port ) { try { Service service = ClassloadingUtility.loadAndInstantiateClass(Service.class, serviceName, null); if(service == null) { tsLogger.i18NLogger.warn_recovery_TransactionStatusManager_4(serviceName); return; } ServerSocket socketServer = getTsmServerSocket(host, port); addService( service, socketServer ) ; TransactionStatusManagerItem.createAndSave(socketServer.getInetAddress().getHostAddress(), socketServer.getLocalPort() ) ; if (recoveryPropertyManager.getRecoveryEnvironmentBean().getTransactionStatusManagerPort() == 0) { tsLogger.i18NLogger.info_recovery_TransactionStatusManager_3(Integer.toString(socketServer.getLocalPort()), socketServer.getInetAddress().getHostAddress(), serviceName); } else { tsLogger.logger.debugf("TransactionStatusManager started on port %s and host %s with service %s", Integer.toString(socketServer.getLocalPort()), socketServer.getInetAddress().getHostAddress(), serviceName); } } catch ( IOException ex ) { tsLogger.i18NLogger.warn_recovery_TransactionStatusManager_14(getListenerHostName(), Integer.toString(getListenerPort(-1))); throw new FatalError(tsLogger.i18NLogger.get_recovery_TransactionStatusManager_9(), ex); } }
/** * * @return a bound server socket corresponding to the recovery manager * @throws IOException if the host name is unknown or the endpoint has already been bound */ public ServerSocket getServerSocket () throws IOException { synchronized (_socketLock) { if (_socket == null) { _socket = new ServerSocket(RecoveryManager.getRecoveryManagerPort(), Utility.BACKLOG, RecoveryManager.getRecoveryManagerHost()); recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryPort(_socket.getLocalPort()); } return _socket; } }
private static void loadScanners() { _expiryScanners = new Vector(); for(String scannerName : recoveryPropertyManager.getRecoveryEnvironmentBean().getExpiryScanners()) { loadScanner(scannerName); } }
/** * Load recovery modules prior to starting to recovery. These are loaded in list iteration order. */ private void loadModules () { Vector<String> moduleNames = new Vector<String>(recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryExtensions()); for(String moduleName : moduleNames) { loadModule(moduleName); } }
private static void loadRecoveryActivators () { Vector<String> activatorNames = new Vector<String>(recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryActivators()); for(String activatorName : activatorNames) { loadActivator(activatorName); } }
boolean useListener = recoveryPropertyManager.getRecoveryEnvironmentBean().isRecoveryListener(); "com.arjuna.ats.internal.arjuna.recovery.fail", new Object[] { RecoveryManager.getRecoveryManagerHost(), RecoveryManager.getRecoveryManagerPort() throw new FatalError("Recovery manager already active (or recovery port and address are in use)!"); ExpiredEntryMonitor.startUp(); _periodicRecovery = new PeriodicRecovery(threaded, useListener); new Object[] { _periodicRecovery.getServerSocket().getLocalPort() });
/** * initialise the periodic recovery instance to a suitable initial state */ private void initialise () { setStatus(Status.INACTIVE); setMode(Mode.ENABLED); _recoveryPeriod = recoveryPropertyManager.getRecoveryEnvironmentBean().getPeriodicRecoveryPeriod(); if (_recoveryPeriod != _defaultRecoveryPeriod && tsLogger.logger.isDebugEnabled()) { tsLogger.logger.debug("com.arjuna.ats.arjuna.recovery.PeriodicRecovery" + ": Recovery period set to " + _recoveryPeriod + " seconds"); } _backoffPeriod = recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryBackoffPeriod(); if (_backoffPeriod != _defaultBackoffPeriod && tsLogger.logger.isDebugEnabled()) { tsLogger.logger.debug("PeriodicRecovery" + ": Backoff period set to " + _backoffPeriod + " seconds"); } _periodicRecoveryInitilizationOffset = recoveryPropertyManager.getRecoveryEnvironmentBean().getPeriodicRecoveryInitilizationOffset(); }
RecoveryEnvironmentBean recoveryEnvironmentBean = recoveryPropertyManager.getRecoveryEnvironmentBean(); recoveryEnvironmentBean.setRecoveryBackoffPeriod(1); // use a short interval between passes recoveryEnvironmentBean.setRecoveryListener(true); // configure the RecoveryMonitor RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); XARecoveryModule recoveryModule = new XARecoveryModule(); recoveryModule.addXAResourceRecoveryHelper(xaResourceRecoveryHelper); manager.addModule(recoveryModule); // we only need to test the XARecoveryModule manager.startRecoveryManagerThread(); // start periodic recovery String host = recoveryEnvironmentBean.getRecoveryAddress(); // the recovery listener host String rcPort = String.valueOf(recoveryEnvironmentBean.getRecoveryPort()); // the recovery listener port
private static void initialise() { /* * Read the system properties to set the configurable options */ _scanIntervalSeconds = recoveryPropertyManager.getRecoveryEnvironmentBean().getExpiryScanInterval() * 60 * 60; if (tsLogger.logger.isDebugEnabled()) { tsLogger.logger.debug("Expiry scan interval set to "+Integer.toString(_scanIntervalSeconds)+" seconds"); } if (_scanIntervalSeconds != 0) { // is it being used to skip the first time if ( _scanIntervalSeconds < 0 ) { _skipFirst = true; _scanIntervalSeconds = - _scanIntervalSeconds; } loadScanners(); } initialised = true; }
@Test public void test() { recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(1); System.setProperty("com.arjuna.ats.jta.xaRecoveryNode", "1"); System.setProperty("XAResourceRecovery1", "com.hp.mwtests.ts.jta.recovery.DummyXARecoveryResource"); RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); manager.scan(); manager.scan(); System.clearProperty("com.arjuna.ats.jta.xaRecoveryNode"); System.clearProperty("XAResourceRecovery1"); } }
public synchronized void start(StartContext context) throws StartException { final RecoveryEnvironmentBean recoveryEnvironmentBean = recoveryPropertyManager.getRecoveryEnvironmentBean(); final SocketBinding recoveryBinding = recoveryBindingInjector.getValue(); recoveryEnvironmentBean.setRecoveryInetAddress(recoveryBinding.getSocketAddress().getAddress()); recoveryEnvironmentBean.setRecoveryPort(recoveryBinding.getSocketAddress().getPort()); final SocketBinding statusBinding = statusBindingInjector.getValue(); recoveryEnvironmentBean.setTransactionStatusManagerInetAddress(statusBinding.getSocketAddress().getAddress()); recoveryEnvironmentBean.setTransactionStatusManagerPort(statusBinding.getSocketAddress().getPort()); recoveryEnvironmentBean.setRecoveryListener(recoveryListener);
recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(1); RecoveryManager manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); XARecoveryModule xarm = new XARecoveryModule(); manager.removeAllModules(false); manager.addModule(xarm); manager.scan();
/** * Lookup the listener port for the transaction manager * @param defValue the value to use if no valid port number can be found * @return the listener port */ private int getListenerPort(Integer defValue) { // has the port already been bound if (_port > 0) return _port; return recoveryPropertyManager.getRecoveryEnvironmentBean().getTransactionStatusManagerPort(); }
public static InetAddress getRecoveryManagerHost() throws UnknownHostException { String host = recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryAddress(); return Utility.hostNameToInetAddress(host, "com.arjuna.ats.arjuna.recovery.RecoveryManager_2"); }
@BeforeClass public static void beforeClass() throws Exception { RecoveryEnvironmentBean recoveryEnvironmentBean = recoveryPropertyManager.getRecoveryEnvironmentBean(); // Ensure that test XAR is recoverable by adding the test XAResourceRecovery ArrayList<String> rcvClassNames = new ArrayList<>(); rcvClassNames.add(XATestResourceXARecovery.class.getName()); jtaPropertyManager.getJTAEnvironmentBean().setXaResourceRecoveryClassNames(rcvClassNames); recoveryEnvironmentBean.setRecoveryBackoffPeriod(1); // use a short interval between passes recoveryEnvironmentBean.setRecoveryListener(true); // configure the RecoveryMonitor manager = RecoveryManager.manager(RecoveryManager.DIRECT_MANAGEMENT); manager.addModule(new XARecoveryModule()); // we only need to test the XARecoveryModule manager.startRecoveryManagerThread(); // start periodic recovery }
recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryModuleClassNames(recoveryExtensions); int recoveryBackoffPeriod = recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryBackoffPeriod(); recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(1); RecoveryManager.manager().scan(); recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryBackoffPeriod(recoveryBackoffPeriod); try { Xid xid = XATxConverter.getXid(Uid.nullUid(), false, XATxConverter.FORMAT_ID); } finally { jtaPropertyManager.getJTAEnvironmentBean().setXaRecoveryNodes(xaRecoveryNodes); recoveryPropertyManager.getRecoveryEnvironmentBean().setRecoveryModuleClassNames(null);
private void loadRecoveryActivators () { List<String> activatorNames = recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryActivatorClassNames(); for(String activatorName : activatorNames) { RecoveryActivator recoveryActivator = ClassloadingUtility.loadAndInstantiateClass(RecoveryActivator.class, activatorName, null); if(recoveryActivator != null) { _recoveryActivators.add(recoveryActivator); } } }