<html>

<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<title>Launching Java Applications</title>
<link rel="stylesheet" href="../default_style.css">
</head>

<body LINK="#0000ff" VLINK="#800080">
<div align="right">&nbsp; <font face="Times New Roman, Times, serif" size="2">Copyright 
  &copy; 2003 International Business Machines Corp.</font> 
  <table border=0 cellspacing=0 cellpadding=2 width="100%">
    <tr> 
      <td align=LEFT valign=TOP colspan="2" bgcolor="#0080C0"><b><font face="Arial,Helvetica"><font color="#FFFFFF">&nbsp;Eclipse 
        Corner Article</font></font></b></td>
    </tr>
  </table>
</div>
<div align="left"> 
  <h1><img src="images/Idea.jpg" height=86 width=120 align=CENTER></h1>
</div>
<p>&nbsp;</p>

<h1 ALIGN="CENTER">Launching Java Applications Programmatically</h1>

<blockquote>
<b>Summary</b>

<br>
  Application developers require the ability to run and debug code in order to 
  test it. Tool developers require the ability to launch Java&#153; applications 
  that assist in application development - for example, starting and stopping 
  a Web server on which servlets, JSPs, and HTML pages can be tested; or launching 
  a VM on which scrapbook evaluations can be performed. This article focuses on 
  the high-level API provided by the Java launching plug-in that tool developers 
  can leverage for the programmatic launching of local Java applications. 
  <p><b> By Darin Wright, IBM OTI Labs</b> <br>
    <font size="-1">August 26, 2003</font> </p>
</blockquote>

<hr width="100%">
<h2>Prerequisites</h2>
<p>To get the most out of this article, the reader should have a basic understanding 
  of the Eclipse plug-in architecture, Java programming, and launching Java programs 
  from the command line. A basic understanding of the Eclipse launching framework 
  is also helpful - see the article <a href="http://www.eclipse.org/articles/Article-Launch-Framework/launch.html">We 
  Have Lift-off: The Launching Framework in Eclipse</a>, by Joe Szurzsewski. Knowledge 
  of Tomcat is useful, but not required, as the examples are based on launching 
  a Tomcat server.</p>
<h2>Introduction</h2>
<p>Application developers require the ability to run and debug code in order to 
  test it. This is, of course, the primary use of the Java launching support in 
  the Eclipse SDK - to launch applications being developed in the IDE. However, 
  tool developers also require the ability to launch Java applications that assist 
  in application development - for example, starting and stopping a Web server 
  on which servlets, JSPs, and HTML pages can be tested; or launching a VM on 
  which scrapbook evaluations can be performed.</p>
<p>In the Eclipse SDK, there are a variety of mechanisms available to Java developers 
  for launching Java VMs. At the most basic level, <code>java.lang.Runtime</code> 
  provides an API to launch a system process by specifying a raw command line. 
  At a slightly higher level, the Java launching plug-in provides an API to launch 
  a particular JRE (defined in the workspace preferences), with a specified raw 
  classpath, boot path, program arguments, VM arguments, and a main type name. 
  At the highest level, the Java launching plug-in provides Java launch configurations. 
  Java launch configurations leverage the debug platform's launching framework, 
  providing persistence and visibility in the Eclipse user interface - i.e. processes 
  appear in the debug view, have console I/O, and launched applications appear 
  in the launch history and launch configuration dialog. Java launch configurations 
  use high-level abstractions that insulate developers from many of the tedious 
  details involved in the lower level APIs.</p>
<h2>Launching a Web Server</h2>
<p>To illustrate the use of Java launch configurations, this article steps through 
  an example of translating a command line used to start Tomcat into an equivalent 
  launch configuration. To run the example you need the following.</p>
<ul>
  <li>a local installation of Tomcat, version 4.1.24 (available <a href="http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/">here</a>)</li>
  <li>a Java Development Kit (JDK, version 1.3.1 or higher, available <a href="http://java.sun.com/j2se/">here</a>)</li>
  <li>an environment variable, <code>JAVA_HOME</code>, set to the installation 
    location of your JDK</li>
  <li>an Eclipse SDK, with <a href="org.eclipse.jdt.launching.examples.tomcat.zip">this 
    example plug-in</a> unzipped into its plugins directory</li>
  <li>a classpath variable (Preferences &gt; Java &gt; Classpath Variables) named 
    <code>TOMCAT_HOME</code>, that points to your Tomcat installation directory</li>
</ul>
<h3>First a Disclaimer</h3>
<p>The example used in this article is <b>not</b> <b>intended to be a style guide</b> 
  for integrating server or application launching into the Eclipse IDE. The sole 
  intent is to demonstrate the Java launch API.</p>
<h3>Launching Tomcat from the Command Line</h3>
<p>The simplest way to launch Tomcat is to use the <code>startup</code> command 
  provided with the sever. For example, from a DOS prompt, in the <code>bin</code> 
  directory of your Tomcat installation, type <code>startup</code>. This will 
  execute the batch file which starts the server. A second DOS shell will appear, 
  labeled Tomcat, and output messages will appear in the shell as the server starts. 
  To ensure the server has started properly, you can open a Web browser on this 
  address <code><a href="http://localhost:8080/">http://localhost:8080</a></code>. 
  The server can be shut down by using the <code>shutdown</code> command from 
  the bin directory of the Tomcat installation. The server will be stopped, and 
  the associated DOS window will close.</p>
<p>Examining the <code>startup</code> batch file reveals that Tomcat is ultimately 
  started by launching a Java application. </p>
<p><img src="images/tryit.gif" width="61" height="13"> From the <code>bin</code> 
  directory of your Tomcat installation, enter a command line similar to the following. 
  You will need to substitute the proper location for <code>tools.jar</code> specified 
  in the classpath parameter, based on the location of your JDK (in this example, 
  it is found in <code>d:\jdk1.4.1_02\lib\tools.jar</code>).</p>
<pre>java -Djava.endorsed.dirs=&quot;..\common\endorsed&quot;<br>  -classpath &quot;d:\jdk1.4.1_02\lib\tools.jar;..\bin\bootstrap.jar&quot;<br>  -Dcatalina.base=&quot;..&quot;<br>  -Dcatalina.home=&quot;..&quot;<br>  -Djava.io.tmpdir=&quot;..\temp&quot;<br>  org.apache.catalina.startup.Bootstrap start
</pre>
<p>This has the same effect as running the <code>startup</code> batch file, except 
  this time, the startup messages appear in the same DOS window. Once again, we 
  can verify the server has started properly by opening a Web browser on this 
  address <code><a href="http://localhost:8080/">http://localhost:8080</a></code>. 
  Examining the command line that was entered, we notice the following.</p>
<ul>
  <li>a Java VM is launched</li>
  <li>the main type is <code>org.apache.catalina.startup.Bootstrap</code></li>
  <li>the main type is passed one program argument - <code>start</code></li>
  <li>the classpath includes <code>tools.jar</code> from the JDK installation, 
    and <code>bootstrap.jar</code> from the Tomcat installation</li>
  <li>several system properties are set - <code>java.endorsed.dirs</code>, <code>catalina.base</code>, 
    <code>catalina.home</code>, and <code>java.io.tmpdir</code></li>
</ul>
<p>The server can be shut down by using the <code>shutdown</code> command (from 
  another DOS shell). Note that the <code>shutdown</code> command actually results 
  in the same Java application being launched, with a different program argument 
  - i.e. <code>stop</code>. Thus, you can also stop the server by entering a command 
  line similar to the following, from the <code>bin</code> directory of the Tomcat 
  installation. Once again, you need to substitute the proper location of <code>tools.jar</code>.</p>
<pre>java -Djava.endorsed.dirs=&quot;..\common\endorsed&quot;<br>  -classpath &quot;d:\jdk1.4.1_02\lib\tools.jar;..\bin\bootstrap.jar&quot;<br>  -Dcatalina.base=&quot;..&quot;<br>  -Dcatalina.home=&quot;..&quot;<br>  -Djava.io.tmpdir=&quot;..\temp&quot;<br>  org.apache.catalina.startup.Bootstrap stop</pre>
<h3>Launching Tomcat from Eclipse</h3>
<p>Now let's translate the command line used to start Tomcat from the system command 
  prompt into a launch configuration that can be used to launch Tomcat from within 
  Eclipse. To do this, we will create an instance of a local Java application 
  launch configuration, set various attributes on the configuration corresponding 
  to our command line, and then launch the configuration.</p>
<p>The example plug-in provides sample actions to start and stop Tomcat, available 
  on a Tomcat menu (on window menu bar). The <b>Start Tomcat</b> action provides 
  a cascading menu of all JREs defined in the workspace. When a JRE is selected, 
  Tomcat is launched on that JRE. The code snippets below refer to code in the 
  sample action <code>org.eclipse.jdt.launching.examples.tomcat.StartAction</code>, 
  which launches Tomcat on a specific JRE.</p>
<h4>Creating a Launch Configuration</h4>
<p>The first step is to create an instance of a launch configuration, used for 
  launching local Java applications.</p>
 
<pre>
<img src="images/tag_1.gif" width=24 align=CENTER>ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();<br>   ILaunchConfigurationType type =<br>      manager.getLaunchConfigurationType(ID_JAVA_APPLICATION);<br><img src="images/tag_2.gif" width=24 align=CENTER>ILaunchConfiguration[] configurations =<br>      manager.getLaunchConfigurations(type);<br>   for (int i = 0; i &lt; configurations.length; i++) {<br>      ILaunchConfiguration configuration = configurations[i];<br>      if (configuration.getName().equals(&quot;Start Tomcat&quot;)) {<br>         configuration.delete();<br>         break;<br>      }<br>   }<br><img src="images/tag_3.gif" width=24 align=CENTER>ILaunchConfigurationWorkingCopy workingCopy =<br>      type.newInstance(null, &quot;Start Tomcat&quot;);<p></p>
</pre>
<ol>
  <li>The Java Application launch configuration type is retrieved. A launch configuration 
    type represents a class of launch configurations (much like a type in Java 
    represents a class of objects, also known as the Type Object pattern). Launch 
    configuration types are stored with the launch manager in the debug platform. 
    Each launch configuration type is defined as an extension in plug-in XML, 
    and has a unique identifier which can be used to access it. The constants 
    associated with the Java Application launch configuration are defined in <code>org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants</code>.</li>
  <li>This example deletes any existing launch configuration with the name &quot;<code>Start 
    Tomcat</code>&quot;. This is done by iterating through all Java application 
    launch configurations, in search of a configuration with that name, and deleting 
    it if one is found. A real application might reuse an existing launch configuration, 
    but for the purposes of this example, we simply delete any previously created 
    configuration.</li>
  <li>An instance of a Java Application launch configuration is created and named 
    &quot;<code>Start Tomcat</code>&quot;. Instances are created as working copies, 
    which are read-write. In this example, the launch configuration will be persisted 
    with the workspace metadata. The <code>newInstance</code> method accepts an 
    <code>IContainer</code> in which to create the launch configuration, and the 
    name of the configuration to create. When null is specified as the container, 
    the configuration will be persisted with the workspace metadata. Alternatively, 
    a workspace project or folder could be specified - in which case the configuration 
    would be stored as a file in the workspace.</li>
</ol>
<p>Launch configurations are simply containers of attribute-value pairs that can 
  be persisted. Each launch configuration type extension provides a launch delegate 
  that is capable of interpreting the attributes of a launch configuration and 
  launching an associated process. </p>
<h4>Specifying a JRE</h4>
<p>The JRE used to execute a Java application is, by default, the JRE on the build 
  path of the project being launched. If a launch configuration is not associated 
  with a project (as in this example), the workspace default JRE is used. A specific 
  JRE may be specified on a Java launch configuration, to refer to one of the 
  JREs defined in the workspace. A workspace may have any number of JREs defined, 
  which can be configured and displayed on the <b>Java &gt; Installed JREs</b> 
  preference page.</p>
<p>The Java launching plug-in allows for different types of JREs, as there are 
  many vendors and versions of JREs. A type of JRE is represented by the interface 
  <code>IVMInstallType</code>. For example, VMs which conform to the standard 
  Sun command line options are represented by one type of JRE. A specific instance 
  or installation of a type of JRE, is represented by the interface <code>IVMInstall</code>. 
  (Once again, we see the Type Object pattern).</p>
<p>The VM install types defined in a workspace can be retrieved from the <code>JavaRuntime</code> 
  class in the Java launching plug-in (<code>org.eclipse.jdt.launching</code>). 
  The instances or installations of each VM type, are retrieved from the VM type. 
  Our cascading sample menu <b>Start Tomcat, </b>loops through each VM install 
  within each VM type, and populates a submenu of actions - one for each VM install 
  in the workspace, as shown in the following code snippet from <code>StartMenuAction</code>.</p>
<pre>IVMInstallType[] types = JavaRuntime.getVMInstallTypes();<br>for (int i = 0; i &lt; types.length; i++) {<br>   IVMInstallType type = types[i];<br>   IVMInstall[] jres = type.getVMInstalls();<br>   for (int j = 0; j &lt; jres.length; j++) {<br>      IAction action = new StartAction(jres[j]);<br>      ActionContributionItem item = new ActionContributionItem(action);<br>      item.fill(menu, -1);<br>   }<br>}</pre>
<p>Thus, each <code>StartAction</code> is created to launch Tomcat with a specific 
  JRE, and uses the following code to specify the JRE on the launch configuration.</p>
<pre>workingCopy.setAttribute(ATTR_VM_INSTALL_NAME, jre.getName());
workingCopy.setAttribute(ATTR_VM_INSTALL_TYPE, jre.getVMInstallType().getId());</pre>
<p>The JRE name and type are specified via the attributes <code>ATTR_VM_INSTALL_NAME</code> 
  and <code>ATTR_VM_INSTALL_TYPE</code>, respectively. Each VM install type has 
  an associated identifier that uniquely identifies it among other VM install 
  types, and this identifier is used to specify the VM type. The actual VM installation 
  is specified by the name of the JRE. Although a JRE also has a unique identifier, 
  the name of a JRE is used to identify it instead. The identifier for a specific 
  VM install may be different between workspaces, and has little meaning to a 
  user (as it is simply a number). Thus, the name is more descriptive and portable 
  when sharing a launch configuration with other users.</p>
<h4>Specifying a Main Type and Program Arguments</h4>
<p>The next step is to specify the main type we want to launch and the arguments 
  to pass to the main type.</p>
<pre><img src="images/tag_1.gif" width=24 align=CENTER>workingCopy.setAttribute(ATTR_MAIN_TYPE_NAME,<br>                            &quot;org.apache.catalina.startup.Bootstrap&quot;);<br><img src="images/tag_2.gif" width=24 align=CENTER>workingCopy.setAttribute(ATTR_PROGRAM_ARGUMENTS, &quot;start&quot;);</pre>
<ol>
  <li>To specify a main type, we simply set the main type attribute - <code>ATTR_MAIN_TYPE_NAME</code>. 
    The value is a string containing the fully qualified name of the main type.</li>
  <li>To specify program arguments, the <code>ATTR_PROGRAM_ARGUMENTS</code> attribute 
    is used. Its value is a string containing the raw command line arguments to 
    pass to the main type.</li>
</ol>
<h4>Specifying a Classpath</h4>
<p>By default, the project associated with a Java application launch configuration 
  is used to determine a runtime classpath for the application (which is specified 
  by the <code>ATTR_PROJECT_NAME</code> attribute). Generally, the build path 
  specified for a project in the workspace corresponds to the desired runtime 
  classpath. Thus, when a classpath is not explicitly specified on a launch configuration, 
  a default runtime classpath is computed from the associated project's build 
  path. However, our example launch configuration is not associated with a project 
  in the workspace - we are launching an application external to the workspace. 
  Thus, we must specify the runtime classpath to use.</p>
<p><img src="images/tip.gif" width="62" height="13"> In the Eclipse SDK, the command 
  line used to launch a Java application can be viewed by selecting the associated 
  process or debug target in the <b>Debug View</b>, and selecting <b>Properties</b> 
  from the context menu. This displays a dialog containing the command line (including 
  the classpath option) generated to launch a Java application. Examining the 
  command used to launch a process can be useful when diagnosing launch problems.</p>
<p>In the Eclipse SDK, the runtime classpath can be configured via the <b>Classpath</b> 
  tab of a Java application launch configuration. On this tab, the user can specify 
  the order of projects, system libraries, jars, folders, and variables to be 
  placed on the classpath. Entries can be added to the user application classpath 
  or the boot path. Similarly, a classpath can be programmatically specified on 
  a Java application launch configuration as an ordered list of classpath entries. 
  The attribute used to specify a classpath is <code>ATTR_CLASSPATH</code>, 
  and its value is a list of <code>String</code>s, 
  each of which is a memento for an <code>IRuntimeClasspathEntry</code>.</p>
<p>An <code>IRuntimeClasspathEntry</code> can 
  be used to describe any of the following:</p>
<ul>
  <li>a project in the workspace</li>
  <li>an archive (jar or zip file) in the workspace</li>
  <li> an archive in the local file system</li>
  <li>a folder in the workspace</li>
  <li>a folder in the local file system</li>
  <li>a classpath variable with an optional extension</li>
  <li>a system library (also known as a classpath container, which is a related 
    group of archives, such as the jars associated with a JDK)</li>
</ul>
<p>The classpath specified on a launch configuration is specified in an unresolved 
  format, and is resolved by the launch delegate at run time. For example, a project 
  entry on the classpath is resolved to the output locations of that project (i.e. 
  the folder or folders that contain the compiled class files for the project). 
  Specifying an unresolved classpath on the launch configuration makes the classpath 
  portable between workspaces and shareable among users. When a classpath is specified 
  on a launch configuration, it must be specified completely - that is, including boot path 
  and user classpath entries.</p>
<p>Our example requires two entries on the user application classpath - <code>tools.jar 
  </code>and <code>bootstrap.jar</code>.</p>
<pre><img src="images/tag_1.gif" width=24 align=CENTER>IVMInstall jre = JavaRuntime.getDefaultVMInstall();			<br>   File jdkHome = jre.getInstallLocation();<br>   IPath toolsPath = new Path(jdkHome.getAbsolutePath())<br>          .append(&quot;lib&quot;)<br>          .append(&quot;tools.jar&quot;);<br>   IRuntimeClasspathEntry toolsEntry =<br>      JavaRuntime.newArchiveRuntimeClasspathEntry(toolsPath);<br>   toolsEntry.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES);<br><img src="images/tag_2.gif" width=24 align=CENTER>IPath bootstrapPath = new Path(&quot;TOMCAT_HOME&quot;)<br>          .append(&quot;bin&quot;)<br>          .append(&quot;bootstrap.jar&quot;);<br>   IRuntimeClasspathEntry bootstrapEntry = <br>      JavaRuntime.newVariableRuntimeClasspathEntry(bootstrapPath);<br>   bootstrapEntry.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES);			<br><img src="images/tag_3.gif" width=24 align=CENTER>IPath systemLibsPath = new Path(JavaRuntime.JRE_CONTAINER);<br>   IRuntimeClasspathEntry systemLibsEntry =<br>      JavaRuntime.newRuntimeContainerClasspathEntry(systemLibsPath,<br>         IRuntimeClasspathEntry.STANDARD_CLASSES);<br><img src="images/tag_4.gif" width=24 align=CENTER>List classpath = new ArrayList();<br>   classpath.add(toolsEntry.getMemento());<br>   classpath.add(bootstrapEntry.getMemento());<br>   classpath.add(systemLibsEntry.getMemento());<br>   workingCopy.setAttribute(ATTR_CLASSPATH, classpath);<br>   workingCopy.setAttribute(ATTR_DEFAULT_CLASSPATH, false);</pre>
<ol>
  <li>The first entry on our classpath is <code>tools.jar</code> from the JDK 
    install. (This example assumes you have set your workspace default JRE to 
    a JDK install containing <code>tools.jar</code> in the <code>lib</code> directory). 
    We create a classpath entry that points to an archive in the local file system, 
    with an absolute path. We build the path relative to the install location 
    of the workspace default JRE. The entry's classpath property is set to <code>USER_CLASSES</code>, 
    to indicate that the classpath entry is to appear on the user application 
    portion of the classpath.</li>
  <li>Next, a classpath entry for Tomcat's <code>bootstrap.jar</code> is created. 
    (This example assumes you have defined a classpath variable, <code>TOMCAT_HOME</code>, 
    that points to the install location of Tomcat). This entry is created relative 
    to the Tomcat install location, by creating a variable entry with an extension 
    of &quot;<code>bin\bootstrap.jar</code>&quot;. This entry is also set to appear 
    on the user application portion of the classpath.</li>
  <li>When launching Tomcat from the command line, we did not specify a boot path 
    (the default boot path was used). However, when specifying a classpath on 
    a Java launch configuration, the complete path must be specified. Thus, an 
    entry is created that refers to the system libraries associated with the default 
    JRE. The classpath property of this entry is set to <code>STANDARD_CLASSES</code>, 
    indicating that the entry refers to a set of archives that normally appear 
    on the boot path by default. The Java application launch delegate only generates 
    a boot path argument when non-default entries appear on the boot path. However, 
    we must still specify all entries.</li>
  <li>The classpath attribute is created and set - an <b>ordered</b> list of runtime 
    classpath entry <b>mementos</b>. It is also important to note that the <code>ATTR_DEFAULT_CLASSPATH</code> 
    attribute is also set to <code>false</code>. When this attribute is omitted 
    or set to <code>true</code>, a default classpath is used, rather than the 
    classpath specified on the launch configuration.</li>
</ol>
<h4>Specifying System Properties</h4>
<p>Next we specify system properties.</p>
<pre><img src="images/tag_1.gif" width=24 align=CENTER>workingCopy.setAttribute(ATTR_VM_ARGUMENTS,<br>      &quot;-Djava.endorsed.dirs=\&quot;..\\common\\endorsed\&quot;&quot;<br>    + &quot;-Dcatalina.base=\&quot;..\&quot;&quot;<br>    + &quot;-Dcatalina.home=\&quot;..\&quot;&quot;<br>    + &quot;-Djava.io.tmpdir=\&quot;..\\temp\&quot;&quot;);</pre>
<ol>
  <li>System properties are specified as VM arguments, using the <code>ATTR_VM_ARGUMENTS</code> 
    attribute. The value is a string of raw arguments, as they would appear on 
    the command line.</li>
</ol>
<h4>Specifying a Working Directory</h4>
<p>The working directory associated with a Java runtime can be retrieved at run 
  time via the system property <code>user.dir</code> (that is, <code>System.getProperty(&quot;user.dir&quot;)</code>). 
  At run time, file operations are performed relative to the working directory 
  when absolute paths are not specified. When launching a Java program from the 
  command line, the working directory is initialized to the location in the file 
  system from which the VM is launched. When launching a Java program from within 
  Eclipse, the working directory must be specified. When a working directory is 
  not specified, it is, by default, the location in the local file system that 
  corresponds to the directory of the project being launched. When a project is 
  not associated with a launch configuration, the default working directory is 
  the directory from which the Eclipse SDK was started.</p>
<p>When we launched Tomcat from the command line, the working directory was the 
  <code>bin</code> directory of the Tomcat install - i.e. the directory from which 
  the command was given. Since we have specified system properties relative to 
  the working directory, we must also specify the working directory that should 
  be used on our launch configuration.</p>
<pre><img src="images/tag_1.gif" width=24 align=CENTER>File workingDir = JavaCore.getClasspathVariable(&quot;TOMCAT_HOME&quot;)<br>      .append(&quot;bin&quot;).toFile();<br>   workingCopy.setAttribute(ATTR_WORKING_DIRECTORY,<br>      workingDir.getAbsolutePath());</pre>
<ol>
  <li>The value of the working directory attribute is a string representing a 
    path. If the path is absolute (that is, begins with a device or path separator), 
    the path is interpreted as a location in the local file system. If the path 
    is relative (does not begin with a device or path separator), the path is 
    interpreted as relative to the workspace root. Our example specifies an absolute 
    path in the local file system - the <code>bin</code> directory of the Tomcat 
    install.</li>
</ol>
<h4>Launching a Configuration</h4>
<p>Now we are ready to launch our configuration.</p>
<pre><img src="images/tag_1.gif" width=24 align=CENTER>ILaunchConfiguration configuration = workingCopy.doSave();<br><img src="images/tag_2.gif" width=24 align=CENTER>DebugUITools.launch(configuration, ILaunchManager.RUN_MODE);</pre>
<ol>
  <li>First, the working copy launch configuration is saved. This persists the 
    launch configuration locally with the workspace metadata.</li>
  <li>Next, the configuration is launched. This example launches the configuration 
    in run mode, using the launch API provided by the debug UI plug-in. This convenience 
    API has several advantages. According to workspace preferences any unsaved 
    editors are saved, the workspace is built, and then the configuration is launched, 
    all while displaying a progress dialog.</li>
</ol>
<p><img src="images/tip.gif" width="62" height="13"> You can also launch a configuration 
  via the API <code>ILaunchConfiguration.launch(String mode, IProgressMonitor 
  monitor)</code>. This avoids saving editors and building the workspace, but 
  it requires you to provide a progress monitor.</p>
<p><img src="images/tryit.gif" width="61" height="13"> Display the <b>Tomcat </b>action 
  set by selecting <b>Window &gt; Customize Perspective</b>, and then checking 
  the <b>Tomcat Example</b> action set. Run the example by selecting the <b>Start 
  Tomcat</b> action from the <b>Tomcat</b> menu our example plug-in provides, 
  and selecting a JRE from the cascading menu. Note that you must choose a JRE 
  that is a JDK containing a <code>tools.jar</code>. Output will appear in the 
  console as the server is launched. You can verify the server is up and running 
  by opening a Web browser on this address <code><a href="http://localhost:8080/">http://localhost:8080</a></code>. 
  Notice that the launch configuration we created also appears in the launch history 
  (drop down <b>Run</b> and <b>Debug</b> menus), and the launch configuration 
  also appears in the launch configuration dialog.</p>
<p><img src="images/tip.gif" width="62" height="13"> We could avoid having the 
  launch configuration appear in the launch dialog and launch history by marking 
  our launch configuration as private. The debug plug-in defines an attribute 
  common to all launch configurations to control this - <code>IDebugUIConstants.ATTR_PRIVATE</code>. 
  The value is a boolean indicating if the launch configuration is private, and 
  the default value is <code>false</code> (i.e. when unspecified).</p>
<h3>Stopping the Server</h3>
<p>A <b>Stop Tomcat</b> action is provided to shut down Tomcat as well - available 
  from the <b>Tomcat</b> menu. This action is almost identical to the start action, 
  except it creates a launch configuration with a different name (<code>Stop Tomcat</code>), 
  and specifies the <code>stop</code> argument in place of <code>start</code>.</p>
<p><img src="images/tryit.gif" width="61" height="13">Shut down the server by 
  selecting the <b>Stop Tomcat</b> action. You will notice another process is 
  launched and then both processes (the Tomcat server and the newly launched process) 
  eventually terminate. </p>
<h3>Debugging the Server</h3>
<p>The example has shown how to launch Tomcat in run mode. The VM used to run 
  Tomcat can also be launched in debug mode, simply by changing the mode specified 
  in the following line.</p>
<pre>DebugUITools.launch(configuration, ILaunchManager.DEBUG_MODE);</pre>
<p><img src="images/tryit.gif" width="61" height="13"> Another way to launch Tomcat 
  in debug mode is to re-launch Tomcat from the debug drop down menu, or from 
  the launch configuration dialog when opened in debug mode. Tomcat will launch, 
  and its process, debug target, and threads will be displayed in the debug view.</p>
<h2>Other Launch Options</h2>
<p>Our Tomcat example demonstrates many of the common features/attributes required 
  for launching Java applications programmatically. However, there are other aspects 
  of the launch that can be controlled by attributes that were not used in our 
  example. The following list provides a summary of the options not covered by 
  the example, and when you might want to use them.</p>
<ul>
  <li><code>ATTR_PROJECT_NAME</code> - This attribute specifies the name of a 
    Java project associated with a launch configuration. When this attribute is 
    specified, the launch delegate uses the associated project to compute default 
    values for a launch - such as runtime classpath, working directory, JRE, and 
    source lookup path.</li>
  <li><code>ATTR_STOP_IN_MAIN</code> - This attribute is a boolean indicating 
    whether an application should suspend when the <code>main</code> method is 
    entered on startup. The default value is <code>false</code>, and this attribute 
    is only effective when a configuration is launched in debug mode.</li>
  <li><code>ATTR_VM_INSTALL_TYPE_SPECIFIC_ATTRS_MAP</code> - This attribute is 
    a map of attribute-value pairs. The interpretation of the attributes is specific 
    to a VM install type. For example, the Standard VM install type supports the 
    specification of the name of the executable used to launch a VM - i.e. java, 
    javaw, etc. This value is specified by the <code>ATTR_JAVA_COMMAND</code> 
    attribute with in this attribute map. An extension point (<code>org.eclipse.jdt.debug.ui.vmInstallTypePage</code>) 
    exists for clients to contribute a user interface control to the JRE tab of 
    a Java application launch configuration, to display and edit JRE specific 
    attributes.</li>
  <li><code>ATTR_SOURCE_PATH</code> - This attribute is analogous to the classpath 
    attribute, except that it specifies where source should be be located. The 
    value is an ordered list of runtime classpath entry mementos. This attribute 
    is used mostly in debug mode when stepping through source code, but is also 
    useful in run mode when navigating from stack traces in the console to corresponding 
    source.</li>
  <li><code>ATTR_DEFAULT_SOURCE_PATH</code> - This boolean attribute (analogous 
    to <code>ATTR_DEFAULT_CLASSPATH</code>) indicates whether a default source 
    path should be used, based on the default classpath. When unspecified or <code>true</code>, 
    any explicitly specified source path is ignored.</li>
  <li><code>ATTR_CLASSPATH_PROVIDER</code> - This attribute specifies an identifier 
    of a classpath provider extension (extensions of type <code>org.eclipse.jdt.launching.classpathProviders</code>). 
    When specified, the associated classpath provider is consulted to compute 
    and resolve a runtime classpath for a launch configuration. This provides 
    clients with a hook for generating and resolving runtime classpaths.</li>
  <li><code>ATTR_SOURCE_PATH_PROVIDER</code> - This attribute is analogous to 
    <code>ATTR_CLASSPATH_PROVIDER</code>, except that it specifies an extension 
    used to compute and resolve the source lookup path.</li>
</ul>
<h2>Summary</h2>
<p>Launch configurations provide a high-level API for programmatically launching 
  Java applications. Just as a user can create, modify and launch an application 
  from the Eclipse user interface, configurations can be created, modified, and 
  launched programmatically. Java VM command line options correspond to Java launch 
  configuration attributes. Launch configurations leverage features of the debug 
  platform launching framework - persistence, launch history, console I/O, and 
  visibility in the launch configuration dialog.</p>
<p><small>Java and all Java-based trademarks and logos are trademarks or registered 
  trademarks of Sun Microsystems, Inc. in the United States, other countries, 
  or both.</small></p>
<p><small>Other company, product, and service names may be trademarks or service marks 
  of others.</small></p>
</body>
</html>
