<html>
<head>
<meta
    http-equiv="Content-Type"
    content="text/html; charset=UTF-8">
<meta
    http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1">
<link
    rel="stylesheet"
    href="../../../..//default_style.css"
    type="text/css">
<link
    rel="stylesheet"
    href="../../../..//webtools/wtp.css"
    type="text/css">
<title>Generic server - Server Definition file explained</title>
</head>
<body>
<table
    width="100%"
    cellspacing="5"
    cellpadding="2"
    border="0">
    <tbody>
        <tr>
            <td
                width="60%"
                align="left"><font class="indextop">Generic server - Server Definition file explained</font> <br>
            <font class="indexsub">Generic server - Server Definition file explained</font></td>
            <td width="40%"><img
                width="207"
                hspace="50"
                height="129"
                align="middle"
                src="../../../..//webtools/images/wtplogosmall.jpg"
                alt=""></td>
        </tr>
    </tbody>
</table>
<table
    width="100%"
    cellspacing="5"
    cellpadding="2"
    border="0">
    <col width="16">
    <col width="*">
    <tbody>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p><b>By Gorkem Ercan</b> <br>
            December 13, 2005 <br>
            <br>
            </p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Introduction</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top"><br>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>Generic server is a special server and runtime implementation of base server tooling that can adjust
            its behaviour by a server type definition file. Server type definition files are XML based meta information
            files that are introduced using <i>"org.eclipse.jst.server.generic.core.serverdefinition"</i> extension
            point</p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>This document describes the different parts of the server definition files.</p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top"><br>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Server definition file introduction</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top"><br>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>A server definition file virtually has two parts; Properties and Server information. Properties are
            variables that is something that can be manipulated and changed using generic server graphical user
            interface. Server information is used by the generic server to perform server tooling functionality. This
            information can be defined so that properties are used to determine their values. <br>
            <br>
            If we define a property like;</p>
            <pre>
<strong>
	  <font color="#0000FF">&lt;property id=</font>"serverAddress"
		<font color="#0000FF">label=</font>"Address:"
		<font color="#0000FF">type=</font>"string"
		<font color="#0000FF">context=</font>"server"
		<font color="#0000FF">default=</font>"127.0.0.1" <font color="#0000FF">/&gt;</font>
		</strong>
		
</pre> <br>
            And if we refer to this property in a server information element such as: <pre>
	
<strong>
	<font color="#0000FF">&lt;jndiConnection&gt;</font>
	<font color="#0000FF">    &lt;providerUrl&gt;</font>iiop://${serverAddress}:2001<font color="#0000FF">&lt;/providerUrl&gt;</font>
	<font color="#0000FF">    &lt;initialContextFactory&gt;</font>org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory<font
                color="#0000FF">&lt;/initialContextFactory&gt;</font>
	<font color="#0000FF">&lt;/jndiConnection&gt;</font></strong>
	
</pre> <br>
            When used in the generic server tooling the provider URL becomes<br>
            <pre>
<strong><font color="#009933">    iiop://127.0.0.1:2001</font></strong>
</pre>
            <p></p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff"> Properties to collect user data </font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top"><br>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>The defined properties show up in the generic server user interface for collecting user data. A
            property element must have all the following attributes: <br>
            <br>
            <b>id:</b> A property is referred in the server definition and the generic server APIs with this value. If
            you wish to refer to this property later in the server definiton file wrap it inside <i>${.. }</i>. Ids must
            be unique. <br>
            <br>
            <b>label:</b> User friendly alias for the property. This is value is shown to users. <br>
            <br>
            <b>type:</b> Properties are string valued. This attribute determines the type of GUI to use. The allowed
            values, <i>"string"</i> renders a text widget, <i>"boolean"</i> renders a check box, <i>"directory"</i>
            renders a file path dialog, <i>"file"</i> renders a file dialog. <br>
            <br>
            <b>context:</b>Determined whether the property is part of server runtime or a server instance. The user is
            asked for the value of the property in new Server Runtime wizard or New Server wizard depending on this
            value. Allowed values are <i>"server"</i>, and <i>"runtime"</i> <br>
            <br>
            <b>default:</b> This is the initial value presented to user.</p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Defining classpaths</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>Well defined classpaths are an important part of server definitions. A classpath definition can be
            referred in more than one section of the server definition. It can be used to start, stop server or define
            the entries to be added to a project' s build path. Classpaths are defined using the classpath element.</p>
            <pre>
			
<strong>
		<font color="#0000FF">&lt;classpath id="</font>jonas<font color="#0000FF">"&gt;</font>
		<font color="#0000FF">    &lt;archive path="</font>${classPath}/lib/common/ow_jonas_bootstrap.jar<font color="#0000FF">" /&gt;</font>
		<font color="#0000FF">    &lt;archive path="</font>${classPath}/conf<font color="#0000FF">" /&gt;</font>
		<font color="#0000FF">&lt;/classpath&gt;</font>
			</strong>
			
</pre> <br>
            <b>id:</b> Is the name that this classpath is referred to in server definition file and the generic server
            APIs <br>
            <br>
            <b>archive and path:</b> this element points either to a directory or a java library that will be a part of
            the classpath. <br>
            <br>
            If a flexible project is targeted for a generic server its build path is updated by the generic server
            tooling to include required libraries by the server. In server definition files the project element is used
            to determine which classpath definition is used for project build paths. <br>
            <br>
            <b>project:</b> element contains only one element that refers to a classpath definition. <pre>
<strong>
		<font color="#0000FF">&lt;project&gt;</font>
		<font color="#0000FF">   &lt;classpathReference&gt;</font>jonas<font color="#0000FF">&lt;/classpathReference&gt;</font>
		<font color="#0000FF">&lt;/project&gt;</font>
		    </strong>
</pre>
            <p></p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Information to start and stop your server</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>The start and stop elements are very similiar tags that are used to define parameters to launch a
            server, and stop a running server respectively. They are both consist of the same elements. Generic server
            framework support two kinds of launches, java launch and external launch. The type of the launch used is
            determined by the launch configuration in the definition of the server type. <br>
            <br>
            <b>workingDirectory:</b> This is the directory in which the application server starts. <br>
            <br>
            <b>programArguments:</b> Specific values that the server is expecting (a user name or a URLs, configuration
            params, for example). <br>
            <br>
            <b>environmentVariable:</b> These are the <i>name</i> and <i>value</i> pairs that are used as environment
            variables for launchs. <br>
            <br>
            If a java launch is configured you should define mainClass, vmParameters, classpathReference tags in
            addition to above. <br>
            <br>
            <b>mainClass</b> A java application server is a Java application after all. Like any other Java application
            you will need a class with a main method to start it. This the name of that class. <br>
            <br>
            <b>vmParameters:</b> Values that are used as parameters to java virtual machine. <br>
            <br>
            <b>classpathReference:</b> This is the classpath definition used to invoke the main class. <br>
            <br>
            When defining an external launch use the external, and debugPort tags with workingDirectory and
            programArguments. <br>
            <br>
            <b>debugPort:</b>This is the port number that eclipse debugger will connect to when the server is started in
            debug mode. <br>
            <br>
            <b>external:</b>This is the external executable or script that will be used for launching the server. The os
            attribute in the tag indicates the platform of the definition. You can have as many external tags as the
            number of platform you wish to support. <br>
            <br>
            The following is an example for an external launch definition.</p>
            <pre>
<strong>
		<font color="#0000FF">&lt;start&gt;</font>
		<font color="#0000FF">	&lt;external&gt;</font>${startScript}<font color="#0000FF">&lt;/external&gt;</font>
		<font color="#0000FF">	&lt;workingDirectory&gt;</font>${domainDirectory}<font color="#0000FF">&lt;/workingDirectory&gt;</font>
		<font color="#0000FF">	&lt;debugPort&gt;</font>${debugPort}<font color="#0000FF">&lt;/debugPort&gt;</font>
		<font color="#0000FF">	&lt;environmentVariable&gt;</font>
		<font color="#0000FF">		&lt;name&gt;</font>debugFlag<font color="#0000FF">&lt;/name&gt;</font>
		<font color="#0000FF">		&lt;value&gt;</font>true<font color="#0000FF">&lt;/value&gt;</font>
		<font color="#0000FF">	&lt;/environmentVariable&gt;</font>
		<font color="#0000FF">&lt;/start&gt;</font>
		</strong>
</pre>
            <p></p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Publishers</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>Generic publishers are general purpose publishers that can be used for publishing to different
            servers. It is also possible to implement a server specific publisher, if the publishing mechanisms of the
            server requires it. A new publisher is introduced using <i>org.eclipse.jst.server.generic.core.genericpublisher</i>
            extension point. WTP includes the general purpose ANT publisher. ANT based publisher simply calls specific
            targets on an ANT script to publish modules to a server. <br>
            <br>
            A server definition file can contain some server specific information that is used for initializing the
            publisher. The publisher element in the server definiton can be used for this purpose. <br>
            <br>
            </p>
            <pre>
<strong>
	    <font color="#0000FF">&lt;publisher id="</font>org.eclipse.jst.server.generic.antpublisher<font color="#0000FF">"&gt;</font>
		<font color="#0000FF">    &lt;publisherdata&gt;</font>
		<font color="#0000FF">        &lt;dataname&gt;</font>build.file<font color="#0000FF">&lt;/dataname&gt;</font>
		<font color="#0000FF">        &lt;datavalue&gt;</font>/buildfiles/jonas.xml<font color="#0000FF">&lt;/datavalue&gt;</font>
		<font color="#0000FF">    &lt;/publisherdata&gt;</font>
	<font color="#0000FF">&lt;/publisher&gt;</font>
		</strong>
		
</pre> <br>
            <b>id:</b> This is the id of the publisher. This value must match the value in the <i>plugin.xml</i> where
            the publisher is defined. <br>
            <br>
            <b>publisherdata:</b> A single name value pair that will be passed to publisher.
            <p></p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Modules</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>The <i>module</i> element shows the module types this server definition can work. It also includes
            information on publishing the module. <br>
            <br>
            <b>type:</b> The module type. This value must match the value in the <i>plugin.xml</i> where the module type
            is defined. <br>
            <br>
            <b>publishDir:</b> The directory where the final module will be published to. <br>
            <br>
            <b>publisherReference:</b> The id of the generic publisher that should be used to publishing of this module
            type.</p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">Ports</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>the <i>port</i> element indicates the ports and the protocols that the server starts on. These values
            are used to determine if a server is alive. <br>
            <br>
            <b>no:</b> The port number. <br>
            <br>
            <b>protocol:</b> The protocol supported by this port. <br>
            <br>
            <b>name:</b> User friendly name of the port' s protocol.</p>
            </td>
        </tr>
        <tr>
            <td
                valign="top"
                bgcolor="#0080c0"
                align="left"
                colspan="2"><b><font
                face="Arial,Helvetica"
                color="#ffffff">JNDI properties</font></b></td>
        </tr>
        <tr>
            <td
                valign="top"
                align="right">&nbsp;</td>
            <td valign="top">
            <p>The JNDI properties for a server are needed for any clients that need jndi such as EJB testers. The <i>jndiConnection</i>
            element is used to provide the jndi information for accessing an application server. <br>
            <br>
            <b>providerUrl:</b> The url to jndi server. <br>
            <br>
            <b>initialContextFactory:</b> Name of the initial context factory class for the server' s jndi
            implementation. <br>
            <br>
            <b>jndiProperty:</b> Name, value pairs that may be used for establishing jndi connection, such as usernames,
            passwords, etc.</p>
            </td>
        </tr>
    </tbody>
</table>
</body>
</html>
