/* * (non-Javadoc) * * @see * org.eclipse.ptp.rtsystem.IRuntimeSystem#startup(org.eclipse.core.runtime * .IProgressMonitor) */ public void startup(IProgressMonitor monitor) throws CoreException { SubMonitor subMon = SubMonitor.convert(monitor, 100); synchronized (this) { startupMonitor = subMon; } initialize(); subMon.subTask(Messages.AbstractToolRuntimeSystem_1); DebugUtil.trace( DebugUtil.RTS_TRACING, "RTS {0}: startup", getResourceManager().getConfiguration().getName()); // $NON-NLS-1$ try { remoteServices = PTPRemoteCorePlugin.getDefault() .getRemoteServices( getResourceManager().getControlConfiguration().getRemoteServicesId(), subMon.newChild(10)); if (remoteServices == null) { throw new CoreException( new Status( IStatus.ERROR, RMCorePlugin.PLUGIN_ID, Messages.AbstractToolRuntimeSystem_Exception_NoRemoteServices)); } IRemoteConnectionManager connectionManager = remoteServices.getConnectionManager(); Assert.isNotNull(connectionManager); subMon.worked(10); subMon.subTask(Messages.AbstractToolRuntimeSystem_2); connection = connectionManager.getConnection( getResourceManager().getControlConfiguration().getConnectionName()); if (connection == null) { throw new CoreException( new Status( IStatus.ERROR, RMCorePlugin.PLUGIN_ID, Messages.AbstractToolRuntimeSystem_Exception_NoConnection)); } if (!connection.isOpen()) { try { connection.open(subMon.newChild(50)); } catch (RemoteConnectionException e) { throw new CoreException( new Status(IStatus.ERROR, RMCorePlugin.PLUGIN_ID, e.getMessage())); } } if (subMon.isCanceled()) { connection.close(); return; } try { doStartup(subMon.newChild(40)); } catch (CoreException e) { connection.close(); throw e; } if (subMon.isCanceled()) { connection.close(); return; } /* * Wait for discover job to complete so we can check it's status and * throw an exception if it fails. */ Job discoverJob = createDiscoverJob(); if (discoverJob != null) { /* * Disable error messages being displayed on job's progress * monitor. These are handled by the progress service starting * the RM. */ discoverJob.setProperty( IProgressConstants.NO_IMMEDIATE_ERROR_PROMPT_PROPERTY, Boolean.TRUE); discoverJob.schedule(); try { discoverJob.join(); } catch (InterruptedException e) { // Just check result } IStatus status = discoverJob.getResult(); if (!status.isOK()) { throw new CoreException(status); } } if (jobQueueThread == null) { jobQueueThread = new Thread( new JobRunner(), Messages.AbstractToolRuntimeSystem_JobQueueManagerThreadTitle); jobQueueThread.start(); } /* * Register for connection events */ connection.addConnectionChangeListener(fConnectionChangeHandler); fireRuntimeRunningStateEvent(eventFactory.newRuntimeRunningStateEvent()); } finally { synchronized (this) { startupMonitor = null; } if (monitor != null) { monitor.done(); } } }