Process factories
When a launch configuration launches its program, it is responsible for invoking the executable
program in the requested mode. The implementation for a launch will depend on the specifics of
each launch configuration, but most plug-ins will build a command line and call a runtime exec to start
the program. The
DebugPlugin
class implements a convenience method for invoking a runtime exec and handling the possible exceptions.
Clients can specify the command line and working directory for the exec.
Process p = DebugPlugin.exec(cmdLine, workingDirectory);
Once the java.lang.Process for the executing program has been created, it needs to be managed by the
debug plug-in. For starters, the process needs to be associated with the
ILaunch
that represents the launched program. The debug plug-in defines a wrapper for a system process,
IProcess,
that allows clients to access the associated
ILaunch
and assign their own named attributes to the process. In addition,
IProcess,
defines a label for the process and associates an
IStreamsProxy
with the process that gives clients access to the input, output, and error streams of the system process. This process wrapper
can also be created using a utility method in
DebugPlugin.
IProcess process= DebugPlugin.newProcess(launch, p, "My Process);
A map of named attributes can also be supplied.
Many plug-ins can simply rely on the utility methods in
DebugPlugin
for launching the system process and wrapping it in an
IProcess.
For those plug-ins that need more control in the creation of the wrapper, a process factory can be associated with a launch
configuration. The process factory is used to create an
IProcess
that meets the special needs of the plug-in. The process factory is referenced by id, and should be stored in the
DebugPlugin.ATTR_PROCESS_FACTORY_ID attribute of the launch configuration.
The association between the process factory id and the class that implements it is made using the
org.eclipse.debug.core.processFactories
extension point.
The following example shows how the Ant plug-in sets up a process factory for its launches:
<extension point="org.eclipse.debug.core.processFactories">
<processFactory
class="org.eclipse.ant.internal.ui.launchConfigurations.RemoteAntProcessFactory"
id="org.eclipse.ant.ui.remoteAntProcessFactory">
</processFactory>
</extension>
It is the responsibility of the registering plug-in to store the process factory id in the proper launch configuration attribute.