protected Connection getConnection() throws RemoteException
	{
    String key = getClientIdentifier();

    Connection conn = (Connection) this.connections.get(key);

    if (conn != null)
    {
      try
      {
        checkConnection(conn);
      }
      catch (SQLException e)
      {
        Logger.info("connection check failed, creating new connection. message: " + e.getMessage());
        conn = null;
      }
    }
    
    if (conn == null)
    {
      conn = createConnection();
      try
      {
        conn.setAutoCommit(getAutoCommit());
        int trLevel = getTransactionIsolationLevel();
        if (trLevel > 0)
        {
          Logger.info("transaction isolation level: " + trLevel);
          conn.setTransactionIsolation(trLevel);
        }
      }
      catch (SQLException e)
      {
        throw new RemoteException("autocommit=false failed or transaction isolation level not supported",e);
      }
      Logger.info("created new connection for " + (key == null ? "<local>" : key));
      this.connections.put(key,conn);
    }

    return conn;
	}