All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arjuna.ats.internal.arjuna.recovery.Connection Maven / Gradle / Ivy

There is a newer version: 4.17.37.Final
Show newest version
/*
 * JBoss, Home of Professional Open Source
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
 * as indicated by the @author tags. 
 * See the copyright.txt in the distribution for a
 * full listing of individual contributors. 
 * This copyrighted material is made available to anyone wishing to use,
 * modify, copy, or redistribute it subject to the terms and conditions
 * of the GNU Lesser General Public License, v. 2.1.
 * This program is distributed in the hope that it will be useful, but WITHOUT A 
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
 * You should have received a copy of the GNU Lesser General Public License,
 * v.2.1 along with this distribution; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
 * MA  02110-1301, USA.
 * 
 * (C) 2005-2006,
 * @author JBoss Inc.
 */
/*
 * Copyright (C) 1999-2001 by HP Bluestone Software, Inc. All rights Reserved.
 *
 * HP Arjuna Labs,
 * Newcastle upon Tyne,
 * Tyne and Wear,
 * UK.
 *
 * $Id: Connection.java 2342 2006-03-30 13:06:17Z  $
 */
 
package com.arjuna.ats.internal.arjuna.recovery;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import com.arjuna.ats.arjuna.logging.tsLogger;
import com.arjuna.ats.arjuna.recovery.Service;

public class Connection extends Thread
{
   /**
    * Takes socket and service to execute.
    */

   public Connection( Socket server_socket, Service service)
   {
       this(server_socket, service, null);
   }

    /**
     * Takes socket and service to execute and a callback to run when processing of the connection has completed
     */

    public Connection( Socket server_socket, Service service, Callback callback )
   {
      super( "Server.Connection:" + server_socket.getInetAddress().getHostAddress() + ":" + server_socket.getPort() );
              
      _server_socket = server_socket;

      try
      {
	  _server_socket.setSoTimeout(0);
      }
      catch (java.net.SocketException ex) {
          tsLogger.i18NLogger.warn_recovery_Connection_2();
      }

      _service = service;

       _callback = callback;
   }
   
   /**
    * Obtains input and output streams and executes work
    * required by the service.
    */

   public void run()
   {
      try
      {
         InputStream  is = _server_socket.getInputStream();
         OutputStream os = _server_socket.getOutputStream();

         _service.doWork ( is, os );
      }
      catch ( IOException ex ) {
          tsLogger.i18NLogger.warn_recovery_Connection_1();
      }
      finally
      {

      // run the callback to notify completion of processing for this connection

      if (_callback != null) {
          _callback.run();
      }
      }
   }

   // What client (RecoveryManager) talks to.
   private Socket  _server_socket;
   
   // What Service is provided to the client(RecoveryManager).
   private Service _service;

   private Callback _callback;

    // abstract class instantiated by clients to allow notification that a connection has been closed
    
   public static abstract class Callback
   {
       abstract void run();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy