<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>NetBeans IDE 5.5 and JBoss Application Server 4.0.4.GA Bundle Installation Instructions</title>
        <meta name="description" content="A guide to installing the NetBeans IDE on various OSs">
        <link rel="stylesheet" type="text/css" href="../../../netbeans.css">
    </head>
    <body>
        <a name="top"></a>
        <h1>NetBeans IDE 5.5 and JBoss Application Server Bundle Installation Instructions </h1>
        <p>Last Updated: 9 August 2006</p>
        <blockquote>
        <p>The following instructions cover installation of the NetBeans&trade; IDE 5.5 and
        JBoss Application Server Bundle. </p>

        <br>
        <h2 style="color:#0E1B55">Contents</h2>
        <ul>
            <li><a href="#bundle">NetBeans IDE and JBoss Application Server Bundle Installation</a></li>
            <li><a href="#launching">Launching the IDE</a></li>
            <li><a href="#start_JBoss">Launching the JBoss Application Server</a></li>
            <li><a href="#uninstall">Uninstallation</a></li>
            <li><a href="#troubleshooting">Troubleshooting</a></li>
        </ul>

        <p><b>Note: </b>For system requirements and other information, such as launching
        the IDE with different startup parameters, see the <a href="relnotes.html">Release
        Notes</a>.</p>
        </blockquote>

        <br>
        <div class="greybox">
            <p><b>Please Note: </b>Sun Microsystems, Inc. does not provide service
            or support for JBoss Application Server. </p>
        </div>
        <br>
        <br>

        <a name="bundle"></a>
        <h2>NetBeans IDE and JBoss Application Server Bundle Installation</h2>
        <p>Following are instructions for installing the NetBeans IDE 5.5 and
        JBoss Application Server bundle on all supported platforms.</p>
        <blockquote>
            <a name="windows_bundle"></a>
            <h2 style="color:#0E1B55"> Windows</h2>
            <p>On Microsoft Windows machines, the preferred method of installing
            NetBeans IDE and JBoss Application Server bundle is using the self-extracting installer.</p>
            <blockquote>
                <p><b>To install the NetBeans IDE 5.5 and JBoss Application Server bundle: </b></p>
                <ol>
                    <li>Once you have downloaded the installer file, double-click the installer's
                    icon to launch the installer. </li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next.</li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE. The
                    installation directory must not contain spaces in its name. <br>
                        <p><b>Note:</b> This NetBeans IDE will not disrupt the settings of
                        your other NetBeans installations because the IDE automatically creates
                        a new user directory when launched (<tt>${HOME}/.netbeans/5.5</tt>).</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory within which to install the JBoss Application Server and click Next.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list of suitable
                    choices in the list, then click Next.</li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="solaris_bundle"></a>
            <h2 style="color:#0E1B55">Solaris&trade; Operating System (Solaris OS)</h2>
            <p>On machines running Solaris operating system, the binary installer is the preferred method for
            installing NetBeans IDE and JBoss Application Server bundle. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE 5.5 and JBoss Application Server bundle: </b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer. </li>
                    <br>
                    <li>If necessary, change the installer file's permissions to make the binary
                        executable by typing from a command prompt:
                        <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p> </li>
                    <br>
                    <li>Launch the installer by typing from a command prompt:
                        <blockquote> <code>$&nbsp;./<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Again, be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p> </li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next. </li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.
                    The installation directory must not contain spaces in it's name.</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory within which to install the JBoss Application Server and click Next.</li>
                    <br>
                    <li> Choose the JDK you want the IDE to use from the list of suitable choices
                    in the list, then click Next.</li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="linux_bundle"></a>
            <h2 style="color:#0E1B55">Linux</h2>
            <p>On Linux machines, the binary installer is the preferred method
            for installing  NetBeans IDE and JBoss Application Server bundle. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE and JBoss Application Server bundle: </b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer. </li>
                    <br>
                    <li>If necessary, change the installer file's permissions to make the binary
                        executable by typing from a command prompt:
                        <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p> </li>
                    <br>
                    <li>Launch the installer by typing from a command prompt:
                        <blockquote> <code>$&nbsp;./<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Again, be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next. </li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.
                    The installation directory must not contain spaces in it's
                    name.</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory within which to install the JBoss Application Server and click Next.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list
                    of suitable choices in the list, then click Next.</li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="macintosh_bundle"></a>
            <h2 style="color:#0E1B55">Macintosh OS X</h2>
            <p>On Mac OS X, the NetBeans and JBoss Application Server bundle is packaged as a jar file. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE and JBoss Application Server bundle: </b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer.</li>
                    <br>
                    <li>If necessary, change the installer file's permissions to make the binary
                    executable by typing from a command prompt:
                    <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                    <p><b>Note:</b> be sure to replace <code><i>your_binary_executable</i></code> with
                    the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>Launch the installer by double-clicking the bundle installer jar file.</li>
                    <br>
                    <li>On the install wizard's initial panel, click Next to continue.</li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next.</li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.
                    The installation directory must not contain spaces in it's
                    name. By default, NetBeans is installed in the Applications directory.</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory
                    within which to install the JBoss Application Server and click Next. By default, JBoss is installed in the
                    <tt>JBoss Application Server</tt> subdirectory of your home directory.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list
                    of suitable choices in the list, then click Next.</li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect the installation process.</p>
                </div>
            </blockquote>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

        <a name="launching"></a>
        <h2>Launching the IDE</h2>
        <p>Following are instructions for starting the NetBeans IDE. If you are using
        an operating system for which there is no installer you can still use NetBeans
        IDE by downloading and installing archive distributions. For more information,
        see the <a href="#archives">Archive Distributions</a>
        section below. </p>

        <blockquote>
            <h2 style="color:#0E1B55">Windows</h2>
            <p><b>To start the IDE on Microsoft Windows machines, do one of the following:</b></p>
            <ul>
                <li>Double-click the NetBeans IDE icon on your desktop.</li>
                <br>
                <li>From the Start menu, select NetBeans 5.5 &nbsp;&gt;&nbsp;NetBeans IDE.</li>
            </ul>
            <br>

            <h2 style="color:#0E1B55">Solaris&trade; Operating System (Solaris OS)</h2>
            <p><b>To start the NetBeans IDE on Solaris systems:</b></p>
            <ol>
                <li>Navigate to the <tt>bin</tt> subdirectory of your installation. </li>
                <br>
                <li>Execute the launcher script by typing <tt>./netbeans</tt>.
            </ol>
            <br>

            <h2 style="color:#0E1B55">Linux</h2>
            <p><b>To start the NetBeans IDE on Linux systems:</b></p>
            <ol>
                <li>Navigate to the <tt>bin</tt> subdirectory of your installation. </li>
                <br>
                <li>Execute the launcher script by typing <tt>./netbeans</tt>.
            </ol>
            <br>

            <h2 style="color:#0E1B55">Macintosh OS X</h2>
            <p><b>To start the NetBeans IDE on Mac OS X systems:</b></p>
            <ul>
                <li>Double-click the NetBeans IDE application icon. </li>
            </ul>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

        <a name="start_JBoss"> <h2>Launching the JBoss Application Server</h2></a>
        <p>If you used the standalone NetBeans IDE installer, you need to register
        the Application Server before you can use it.
        <blockquote>

            <p><b>To start the JBoss Application Server:</b>
            <ol>
                <li>In the Runtime window, right-click the newly-created localhost node and
                choose Start/Stop Server from the contextual menu. </li>
                <br>
                <li>In the Server Status dialog, click Start Server.</li>
                <br>
                <li> Click Close to close the dialog box.</li>
            </ol>

            <!--
            <div class="greybox">
                <p><b>Note: </b>The NetBeans IDE and Sun Java System Application Server bundle
                creates the <tt>admin</tt> user with password <tt>adminadmin</tt> by default.
                Users should use these settings to log in via the web console. </p>
            </div>
            -->
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

        <a name="archives"> <h2>Archive Distributions</h2></a>
        <p>If you are using an operating system for which there is no installer
        you can still use NetBeans IDE by downloading and installing archive
        distributions. You can also install archive distributions of the IDE if
        you want to test development builds.</p>
        <blockquote>
            <p><b>To install archive NetBeans IDE distributions: </b></p>
            <ol>
                <li>Navigate to the directory that contains the archive file. </li>
                <br>
                <li>Unpack the archive using the appropriate utilities for your system.
            </ol>
            <p><b>To launch archive NetBeans IDE distributions:</b> </p>
            <ol>
                <li>Navigate to the <tt>bin</tt> subdirectory of your NetBeans IDE installation.</li>
                <br>
                <li>Execute the appropriate launcher for your system. </li>
            </ol>
            <p>The following launchers are included in the archive distributions: </p>
            <ul>
                <li><tt>netbeans.exe</tt> - Windows</li>
                <li><tt>nb.exe</tt> - Windows (from within a console window)</li>
                <li><tt>netbeans</tt> - UNIX, Linux </li>
                <li><tt>NetBeans </tt> - Mac OS X </li>
                <li><tt>netbeans.cmd</tt> - OS/2 </li>
                <!--<li><tt>netbeansopenvms.com</tt> - OpenVMS -->
            </ul>
            <p>If there is no specific launcher for your operating system, you may need
            to create one by modifying the appropriate script. If your machine supports
            JDK 1.5.0 or greater you should, however, be able to run the IDE.
            <p><b>Note</b>: If you create a launcher, you can contribute it to the NetBeans
            project. For more information, see <a href="https://netbeans.org/community/contribute/index.html">Contributing
            to netbeans.org</a>. </p>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

    <a name="uninstall"> <h2>Uninstalling the Bundled Software </h2></a>
    <p>If necessary, you can uninstall the NetBeans IDE and the JBoss Application Server using the following procedures.</p>
    <blockquote>
        <h3 style="color:#0E1B55">Uninstalling the bundled software from Windows</h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>From your system's Start menu, choose Control Panel.</li>
                <br>
                <li>Double-click the Add or Remove Programs icon.</li>
                <br>
                <li>Select NetBeans IDE 5.5 from the list and click Remove.</li>
            </ol>

            <p><b>To uninstall the JBoss Application Server:</b></p>
            <ol>
                <li>From your system's Start menu, open the Control Panel.</li>
                <br>
                <li>Double-click the Add or Remove Programs icon.</li>
                <br>
                <li>Select JBoss Application Server from the list and click Remove. Note that by default
                the Application server is installed in the <tt>C:\jboss-4.0.4.GA</tt> directory of your
                system.</li>
            </ol>
            <!--<p><b>Note:</b> If you uninstall the J2SE JDK software, but
            wish to continue using NetBeans IDE, you must set the IDE's
            <tt>-jdkhome</tt> parameter to point to an alternate installation of the J2SE
            JDK as outlined below.</p>-->
        </blockquote>

        <h3 style="color:#0E1B55">Uninstalling the bundled software from Solaris (SPARC and x86 Platform Editions) </h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>Navigate to the <tt>_uninst</tt> subdirectory of your NetBeans
                IDE installation directory.</li>
                <br>
                <li>Type <tt>./uninstaller</tt> to run the InstallShield uninstaller.</li>
            </ol>

            <p><b>To uninstall the JBoss Application Server:</b></p>
            <ol>
                <li>Navigate to the JBoss Application Server installation directory. Note that by default
                the Application server is installed in the <tt>jboss-4.0.4.GA</tt> subdirectory of your
                home directory.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstall</tt> to run the uninstaller.</li>
            </ol>
        </blockquote>

        <h3 style="color:#0E1B55">Uninstalling the bundled software from Linux </h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>Navigate to the <tt>_uninst</tt> subdirectory
                of your NetBeans IDE installation directory.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstaller</tt> to run
                the InstallShield uninstaller.</li>
            </ol>

            <p><b>To uninstall the JBoss Application Server:</b></p>
            <ol>
                <li>Navigate to the JBoss Application Server installation directory. Note that by default
                the Application server is installed in the <tt>jboss-4.0.4.GA</tt> subdirectory of your
                home directory.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstall</tt> to run the uninstaller.</li>
            </ol>
        </blockquote>

        <h3 style="color:#0E1B55">Uninstalling the bundled software from Macintosh OS X </h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>Navigate to the installation location of the NetBeans IDE.
                By default, NetBeans is installed in the Applications directory.</li>
                <br>
                <li>Right-click the NetBeans icon and choose Show Package Contents
                from the pop-up menu.</li>
                <br>
                <li>In the window that appears, navigate to the <tt>_uninst</tt>
                subdirectory. </li>
                <br>
                <li>In a terminal window, type <tt>./uninstaller</tt> to run the InstallShield uninstaller.</li>
            </ol>

            <p><b>To uninstall the JBoss Application Server:</b></p>
            <ol>
                <li>Navigate to the JBoss Application Server installation directory. By default, the Application
                server is installed in the <tt>jboss-4.0.4.GA</tt> subdirectory of your
                home directory.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstall</tt> to run the uninstaller.</li>
            </ol>
        </blockquote>
    </blockquote>

<p align="center"><a href="#top">top</a></p><br>

        <a name="troubleshooting"><h2>Troubleshooting</h2></a>
        <p>If you experience problems installing or running the software, see the
        list of issues below for workarounds. For a complete list of known issues,
        system requirements and other useful information, see the <a href="relnotes.html">Release
        Notes</a>. </p>
        <p> Following are the unresolved issues for this release that could affect
        or disrupt the installation process: </p>
        <ul>
            <!--<li><h3>General Issues</h3>
            <blockquote>
                <p><b>Description:</b></p>
                <p>The installer for the NetBeans IDE and Sun Java System Application
                Server bundle does not let you install on JDK 6.0, because Sun Java
                System Application Server Platform Edition 8.2 has several serious
                issues on pre-release versions of JDK 6.0. However, you can install
                the NetBeans IDE standalone installer on JDK 6.0.
            </blockquote>
            <br>-->
            <!--
            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=72601">Issue #72601</a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>After specifying the location of the Sun Java System Application
                Server and clicking Next, the wizard page becomes blank, and it is impossible to
                continue the installation.
                <p><b>Workaround:</b></p>
                <p>In the wizard, press Cancel. On your system, navigate to
                the NetBeans IDE installation directory that installer has just created and
                delete that directory. Then run the installer again and specify a location for the
                application server installation directory that is not inside of the NetBeans IDE
                installation directory.</p>
            </blockquote>
            <br>-->

            <li> <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=26965">Issue #26965</a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>When using JDK installations that include an incompatible version of <tt>sax.jar</tt>,
                the IDE installer crashes with the following message:
                &quot;The wizard cannot continue because of the following error: could
                not load wizard specified in /wizard.inf (104)&quot;
                <p><b>Workaround:</b></p>
                <p>Temporarily remove <tt>jre/lib/endorsed/sax.jar</tt> from the JDK directory
                during IDE installation.
                </blockquote><br>

            <!--
            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=52856">Issue #52856 (Windows XP only) </a>
            <blockquote>
            <p><b>Description:</b></p>
                <p>Sun Java System Application Server  installation fails. Note that
                this problem has been known to occur both when using the NetBeans IDE 5.5
                and Sun Java System Application Server Platform Edition 8.2 Bundle
                installer as well as the stand-alone Application Server installer.
                This happens when a previous installation of the Application Server has failed and
                subsequent attempts at  uninstallation were also unsuccessful (i.e. some
                registry entries or configuration files weren't deleted).
                <p><b>Workaround:</b></p>
                <p>If this happens, remove all previous installations of the Sun Java
                System Application Server. Then delete the installer's <code>&lt;USERHOME&gt;\Local
                Settings\temp\</code> directory and the Application Server's <code><userhome>\Application
                Data\Sun\tmp\</code> directory (note that files may also be located in <code>&lt;WINDIR&gt;\Sun\</code>).
                If a previous uninstallation attempt of the Application Server was
                unsuccessful, also delete the <code>&lt;SYSTEMDIR&gt;/productregistry</code> file.
                Next, create a new directory within which to install the software
                and ensure that the directory is empty and writable. Finally, reinstall
                the Application Server in the new location on your system. <!--<b>Note: </b>in
                general, it is recommended that users use the provided uninstaller
                to remove Application Server installations.
            </blockquote><br>
            -->

            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=65482">Issue #65482 (Linux only) </a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>Unable to install NetBeans on some Mandrake/Mandriva Linux distributions.
                During initialization, the installer displays the following message:
                    <blockquote>
                        <pre>Initializing InstallShield Wizard........<br>./netbeans-5_0-bin-linux.bin: line 189: bc: command not found<br>./netbeans-5_0-bin-linux.bin: line 404: [: : integer expression expected </pre>
                    </blockquote>
                <p><b>Workaround:</b></p>
                <p>NetBeans installer uses GNU's bc utility, which doesn't seem to install
                by default in Mandriva. If you experience this problem, install GNU's
                bc utility manually prior to installing NetBeans. If you have an active
                Internet connection, you can  run <tt>urpmi bc</tt> from the command
                line to accomplish this. Note that it is also possible to download
                the appropriate RPM and install using the <tt>rpm -i
                &lt;bc_package&gt;.rpm</tt> command.</p>
            </blockquote>
            <br>

            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=67530">Issue #67530 </a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>After starting the installer, you get a message that says "Welcome
                to the Install Wizard for ERROR: null". This could be caused by running
                multiple installers simultaneously or by running the installer after another
                installer that has failed to exit.</p>
                <p><b>Workaround:</b></p>
                <p>Delete the contents of the <tt>\InstallShield\Universal\Common</tt> directory
                and then restart the installer.</p>
                <p>On Windows systems, this directory is located at <tt>C:\Program Files\Common files\InstallShield\Universal\Common</tt>.</p>
                <p>On Solaris and Linux systems, this directory is located at
                <tt><i>/$HOME</i>/InstallShield/Universal/Common</tt>.</p>
            </blockquote>

            <li> <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=52012">Issue #52012 (only Turkish locale on Windows XP systems)</a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>For systems set to use the Turkish locale, the installer does not successfully
                finish.</p>
                <p><b>Workaround:</b></p>
                <p>Cancel the installer. On your system, switch to the English (United States) locale and then
                retstart the installer. </p>
                <p>On Windows XP systems, you can switch locales on your system by choosing Start | Control Panel
                 and double-clicking Regional and Language Options. Then select the locale from the
                 drop-down list in the Standards and Formats section of the dialog box.</p>
            </blockquote><br>
        </ul>

    <!--                BEGIN ADDITIONAL INFO SECTION                  -->
    <a name="additional_info"></a>
    <h3>Finding Additional Information</h3>
    <blockquote>
        <p>For information about the JBoss Application Server, visit
        <a href="http://www.jboss.org/products/jbossas">the JBoss homepage</a>.</p>
        <p>For information about NetBeans IDE, visit
        <a href="http://www.netbeans.org">NetBeans.org</a>.</p>
        <p>NetBeans IDE is documented in the software's help system,
        however, additional documentation about NetBeans IDE is available at
        <a href="https://netbeans.org/kb/">https://netbeans.org/kb/</a>.</p>
    </blockquote>

        <p align="center"><a href="#top">Top</a></p><br>
    </body>
</html>
