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); expiryScanners = recoveryEnvironmentBean.getExpiryScannerClassNames(); } else { expiryScanners = new ArrayList<String>(); recoveryEnvironmentBean.setRecoveryModuleClassNames(recoveryExtensions); recoveryEnvironmentBean.setExpiryScannerClassNames(expiryScanners); recoveryEnvironmentBean.setRecoveryActivators(null); expiryScanners.add(ExpiredToplevelScanner.class.getName()); expiryScanners.add(ExpiredServerScanner.class.getName()); recoveryEnvironmentBean.setRecoveryModuleClassNames(recoveryExtensions); recoveryEnvironmentBean.setExpiryScannerClassNames(expiryScanners); recoveryEnvironmentBean.setRecoveryActivatorClassNames(Collections.singletonList(com.arjuna.ats.internal.jts.orbspecific.recovery.RecoveryEnablement.class.getName()));
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())); throw new FatalError("Recovery manager already active (or recovery port and address are in use)!"); _periodicRecovery = new PeriodicRecovery(threaded, useListener); ExpiredEntryMonitor.startUp(); 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); } }
/** * 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(); }
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 testRecoveryMonitorWithFailure() throws Exception { 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); manager.addModule(new XARecoveryModule()); // 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
public static InetAddress getRecoveryManagerHost() throws UnknownHostException { String host = recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryAddress(); return Utility.hostNameToInetAddress(host, "com.arjuna.ats.arjuna.recovery.RecoveryManager_2"); }
public static int getRecoveryManagerPort() { return recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryPort(); }
/** * 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(); }
private String getListenerHostName() { return recoveryPropertyManager.getRecoveryEnvironmentBean().getTransactionStatusManagerAddress(); }
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())); throw new FatalError("Recovery manager already active (or recovery port and address are in use)!"); _periodicRecovery = new PeriodicRecovery(threaded, useListener); ExpiredEntryMonitor.startUp(); 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; } }
/** * 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(); }
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; }
public static InetAddress getRecoveryManagerHost() throws UnknownHostException { String host = recoveryPropertyManager.getRecoveryEnvironmentBean().getRecoveryAddress(); return Utility.hostNameToInetAddress(host); }