/** * Make a new connection. * * @return * @throws IllegalStateException - Thrown if connection cannot be created. * @since 1.0.0 */ protected IREMConnection createConnection() throws IllegalStateException { // If we have a server port, then the server is probably open. If we don't then there is no // server. if (fServerPort != 0) { // We are putting it off into a thread because there are no timeout capabilities on getting a // socket. // So we need to allow for that. final Socket[] scArray = new Socket[1]; final boolean[] waiting = new boolean[] {true}; Thread doIt = new Thread( new Runnable() { public void run() { try { Socket sc = new Socket("localhost", fServerPort); // $NON-NLS-1$ synchronized (this) { if (waiting[0]) scArray[0] = sc; else sc .close(); // We are no longer waiting on this thread so close the socket // since no one will use it. } } catch (IOException e) { ProxyPlugin.getPlugin() .getLogger() .log( new Status( IStatus.WARNING, ProxyPlugin.getPlugin().getBundle().getSymbolicName(), 0, "", e)); //$NON-NLS-1$ } } }); doIt.start(); while (true) { try { doIt.join(!fNoTimeouts ? 60000 : 0); synchronized (doIt) { waiting[0] = false; // To let it know we are no longer waiting } break; } catch (InterruptedException e) { } } if (scArray[0] == null) { // Log where we are at so we can know where it was we down. ProxyPlugin.getPlugin() .getLogger() .log( new Status( IStatus.WARNING, ProxyPlugin.getPlugin().getBundle().getSymbolicName(), 0, "", new IllegalStateException( ProxyRemoteMessages .REMProxyFactoryRegistry_ConnectionCreationFailed_INFO_))); //$NON-NLS-1$ throw new IllegalStateException( ProxyRemoteMessages .REMProxyFactoryRegistry_CouldNotCreateSocketConnectionToRemoteVM_EXC_); // Couldn't // get one, // probably // server // is down. // //$NON-NLS-1$ } REMConnection connection = new REMConnection(scArray[0], fNoTimeouts); if (connection.isConnected()) return connection; // Failed, close the socket. try { scArray[0].close(); } catch (IOException e) { } } else ProxyPlugin.getPlugin() .getLogger() .log( new Status( IStatus.WARNING, ProxyPlugin.getPlugin().getBundle().getSymbolicName(), 0, "No Server to retrieve a connection.", null)); ///$NON-NLS-1$ throw new IllegalStateException( ProxyRemoteMessages.REMProxyFactoryRegistry_CouldNotCreateSocketConnectionToRemoteVM_EXC_); }