<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> 
    <title>NetBeans 5.5.1 Visual Web Pack Installation Guide</title>
    <meta name="description" content="This guide provides information for installing and configuring NetBeans Visual Web Pack 5.5.">
    <meta name="keywords" content="VWP, VWP installer, Java Studio Creator">     
    <link rel="stylesheet" type="text/css" href="../../../../netbeans.css" media="screen">
    <style type="text/css">
        <!--
.style2 {color: #FF0000}
        -->
    </style>
</head>

<body>

<a name=top></a>

<h1>NetBeans Visual Web Pack 5.5.1 Installation Instructions</h1>

<!-- <p>Last Updated: October 2006</p> -->

<p>NetBeans Visual Web Pack 5.5.1 provides an environment for rapidly 
    building web applications with Ajax-enabled JavaServer Faces components, 
support for drag-and-drop binding to data sources, and more. </p>

<p><b>Contents</b></p>
<ul>
    <li><a href="#impnotes"> Important Notes </a></li>
    <li><a href="#prerequisites" title="Prerequisites">Prerequisites</a> </li>
    <li> <a href="#installation" title="Installing the Software">Installing the Software</a></li>
    <li><a href="#upgrade" title="Upgrading NetBeans Visual Web Pack from Version 5.5 to 5.5.1">Upgrading NetBeans Visual Web Pack from Version 5.5 to 5.5.1</a></li>
    <li> <a href="#configinfo" title="Configuration Information">Configuration Information</a> </li>
    <li> <a href="#uninstallation" title="Uninstalling the Software">Uninstalling the Software</a> </li>
    <li> <a href="#troubleshoot" title="Troubleshooting">Troubleshooting</a> </li>
</ul>
<p><b>Note:</b> For information about system requirements for the software 
    included in this bundle, see the <a href="vwp-release-notes.html">NetBeans 
Visual Web Pack 5.5.1 Release Notes</a>.</p>

<br>

<!-- IMPORTANT NOTES ----------------------------------------------------- -->

<h2><a name=impnotes></a>Important Notes</h2>

<blockquote>
    
    <h3>Application Servers/Servlet Containers </h3>
    
    <p>The Visual Web Pack works with all the application servers 
    and servlet containers that the NetBeans IDE supports.</p>
    
    <h3>Java EE 5/JavaServer Faces 1.2 Constraints</h3>
    
    <p>As of this date, only the Sun Java System Application Server 9 U1 (build 14) 
        or higher supports Visual Web applications that use the Java EE 5 platform. 
    If you use a different server, you must choose the J2EE 1.4 platform when you create your project.</p>
    
    <h3>Bundled Travel Database</h3>
    
    <p> Many of the tutorials and sample applications use a Travel database. 
        If you make the Sun Java System Application Server available 
        to the IDE before you install the Visual Web Pack,
        the Visual Web Pack installation adds a Travel database 
        to the Java DB (Derby) server that is bundled with the Sun Java System Application Server.
        If you make the the Sun Java System Application Server available to the IDE after you install the Visual Web Pack, you must restart the IDE to enable the Travel database. 
        For instructions on installing the Travel database into your own installation of the Java DB or Apache Derby 
        database server, see <a href="#samples">Visual Web Pack Sample Database</a> in the Configuration Information 
    section.</p>
    
    <!--
    <h3> Technology Preview</h3>

    <p>If you have installed the Technology Preview release of NetBeans Visual Web Pack 5.5, you must uninstall it, as described in <a href="#uninstallation" title="Uninstalling the Software">Uninstalling the Software</a>, prior to installing the production release of Visual Web Pack. </p>
    <p>If you have installed the Blueprints Ajax components into the NetBeans Visual Web Pack 5.5 Technology Preview, you must uninstall these components manually prior to installing the production release of Visual Web Pack. 
    To delete a component library from the IDE:
    <ol>
    <li>Choose Tools > Component Library Manager.</li>
    <li>
    <p>In the Component Library Manager, select the library you want to delete and click the Remove button at the bottom of the window.</p> 
    You might see a message saying that you have projects open that use the library. If so, click OK in the message and close the Component Library Manager, and then close those projects. You can then reopen the Component Library Manager and start over.</li>
    <li>
    <p>Confirm that you want to delete the library.</p>
    The library is removed from your user directory. Any projects that use the library can continue to do so because they have their own copy of the library in the project directory.
    </li>
    </ol></p> -->

</blockquote>

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

<!-- PREREQUISITES ----------------------------------------------------- -->

<h2><a name=prerequisites></a>Prerequisites</h2>

<p>This topic specifies the prerequisites that must be met 
before you start to install NetBeans Visual Web Pack 5.5.1. </p>

<p>Download NetBeans Visual Web Pack 5.5.1 from the 
<a href="http://services.netbeans.org/downloads/index.php?rs=21">netbeans.org Downloads Page</a>.</p>

<blockquote>
    <h3>Required Software</h3>
    <!--
  Release Notes does this better - refer to *an* app server and then *to best take advantage, use SJAS*
   -->

    <p>The following software must be installed before you install NetBeans Visual Web Pack 5.5.1:</p>
    
    <ul>
        <li><a href="http://services.netbeans.org/downloads/index.php">NetBeans IDE 5.5.1</a>.</li>
        <li><a href="http://java.sun.com/javase/downloads/index.jsp">Java SE 
        Development Kit (JDK) 5.0 Update 6 (version 1.5.0_06)</a> or higher.<br>
            <br>
            If you do not have an installation of JDK 5.0 Update 6 or higher, 
            you cannot proceed with the installation. 
            You can download this JDK from the <a href="http://java.sun.com/javase/downloads/index.jsp">Java 
            SE Downloads</a> page. <br>
            <br>
            <span class="bold">Note: </span>Windows Vista requires either JDK 5.0 Update 11 or JDK 6. 
            You can download both of these JDKs from the <a href="http://java.sun.com/javase/downloads/index.jsp">Java 
            SE Downloads</a> page. If you require earlier JDKs, place them later 
            in the classpath so that 1.5.0_11 or JDK 6 are found first.<br>
            <br>
            <span class="bold">Note: </span>Mac OS X installations require  
            Java 2 Standard Edition (J2SE) 5.0  Release 4.
            You can download this JDK from the <a href="http://www.apple.com/support/downloads/" 
            target="_blank">Apple Downloads page</a>. Search for &quot;J2SE&quot; to locate this release. </li>
       <li>One of the application servers or servlet containers that are supported by the Netbeans IDE.<br>
            <br>
            <b>Note:</b>To develop Visual Web applications using the Java EE 5
            platform, you must use the Sun Java System Application Server 9. 
            For more information, see the 
            <a href="http://www.sun.com/software/products/appsrvr/index.xml">Java EE Downloads</a> web site. </li>
    </ul>
    
    <h3>Installation Order</h3>
    
    <p>If you are installing the NetBeans Visual Web Pack with the NetBeans IDE 
    and the separate installation of Sun Java System Application Server, 
    it is best to <a href="#config_sjas">configure the application server</a> 
    before installing the Visual Web Pack so that the bundled Travel database is immediately available. 
    If you configure the application server after you install the Visual Web Pack, 
    you must restart the IDE before the Travel database becomes available in the Runtime window.
    </p>
    
    <h3>Firewall Applications</h3>

    <p>Enabled firewall applications can prevent some components from being 
    configured correctly during the installation process. 
    Depending on your firewall, you might have to disable it prior to installation. 
    Consult your firewall documentation. </p>
    
</blockquote>

<p align=center><a href="#top">top</a></p>
<!-- INSTALLATION ------------------------------------------------------ -->

<h2><a name=installation></a>Installing the Software</h2>

<p>This topic contains instructions for installing NetBeans Visual Web Pack 5.5.1 on all supported platforms:
    <ul>
        <li> <a href="#install_windows">Microsoft Windows</a> </li>
        <li> <a href="#install_sollinux">Solaris OS and Linux</a> </li>
        <li> <a href="#install_macos">Mac OS X</a> </li>
    </ul>
</p> 

<p><b>Note: </b>If you have installed the Sun Java System Application Server, 
configure the application server on NetBeans IDE, as described in 
<a href="#config_sjas">Application Server Configuration</a> 
before installing Visual Web Pack so that the installer 
can install the sample Travel schema into the server's bundled Java DB database. 
Note that Visual Web Pack does not require an application server, 
but you deploy Visual Web Pack projects to an application server.</p>

<!-- <p><b>Important: </b>If you have installed the Technology Preview release of NetBeans Visual Web Pack 5.5, 
you must uninstall it, as described in <a href="#uninstallation" title="Uninstalling the Software">Uninstalling the Software</a>,  
prior to installing the production release of Visual Web Pack. </p> -->

<blockquote>  
    
    <h3><a name=install_windows></a>Microsoft Windows</h3>
    
    <p>Following are instructions for installing NetBeans Visual Web Pack 5.5.1 on the Microsoft Windows platform.</p>
    <p><b>Before You Start</b></p>
    
    <p>The following restriction applies to the installation on the Microsoft Windows platform:</p>
    The installer first extracts the required files to the default temporary space directory defined by the <tt>TEMP</tt> environment variable. If the amount of disk space in the temporary directory is less than required, the installation might fail or proceed incorrectly. <br>
    <br>
    
    If you encounter this problem, you can increase the space allocated for the <tt>TEMP</tt> environment variable or specify a different temporary directory that has sufficient space. To specify a temporary directory for the installation, type the following commands: <br>
    
    <br>
    <blockquote><tt>&gt;&nbsp;cd&nbsp;<i>location-of-installer</i></tt> <br>
    <tt>&gt;&nbsp; <strong></strong>netbeans-visualweb-5_5_1-windows.exe&nbsp;-is:tempdir&nbsp;<i>temporary-directory</i></tt></blockquote>
    
    <p><b>To Install</b></p>
    <ol>
        <li> When you have downloaded the installer file <tt>netbeans-visualweb-5_5_1-windows.exe</tt>, double-click the installer's icon to launch the installer.
        </li>
        <li> At the Welcome page of the installation wizard, click Next.
        </li>
        <li> Accept the license agreement and click Next.    </li>
        
        <li> At the installation directory page of the installation wizard, specify the location of your NetBeans IDE 5.5.1 installation and click Next. </li>
        
        <li> The installation wizard searches for compatible JDK installations. If your JDK is not in the default location, you will need to specify the location of your Java JDK 1.5.0_06 or higher.
            You can also type the path to another installed JDK or use the Browse button to navigate to and select another installation.
        </li>
        <li>When installation is complete, click Finish to exit the wizard.</li>
    </ol>
    <p>The default projects directory is <tt>C:\Documents and Settings\<i>username</i></tt>. If you uninstall NetBeans Visual Web Pack, this directory is not deleted, and will be identified the next time you install Visual Web Pack.</p>
    
    <div class=greybox><b>Note: </b>If you encounter problems during software installation, see <a href="#troubleshoot">Troubleshooting</a> for full descriptions and suggested workarounds for unresolved issues that could affect the installation process. </div>
</blockquote>
<p align=center><a href="#top">top</a></p>

<blockquote>
    <h3><a name=install_sollinux></a>Solaris OS and Linux</h3>
    <p>Following are instructions for installing NetBeans Visual Web Pack 5.5.1 on  Solaris and Linux platforms.</p>
    <p>In the instructions below, replace <tt><i>your_binary_executable</i></tt> with one of the following:</p>
    <ul>
        
        <li> <b>Solaris OS, SPARC</b>: <tt>netbeans-visualweb-5_5_1-solaris-sparc.bin</tt> </li>
        
        <li> <b>Solaris OS, x86/x64 Platform Edition</b>: <tt>netbeans-visualweb-5_5_1-solaris-x86.bin</tt> </li>
        <li> <b>Linux</b>: <tt>netbeans-visualweb-5_5_1-linux.bin</tt> </li>
    </ul>
    
    <p><b>To Install</b>
        
        <ol>
            <li> When you have downloaded the installer file <tt><i>your_binary_executable</i></tt>, navigate to the directory that contains the file.
            </li>
            <li>
                <p>If necessary, change the permissions on the installer file to make the binary executable by typing the following command at a command prompt:</p>
                
                <tt>&#36;&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></tt>
                
            </li>
            <li> Launch the installer by typing the following command at a command prompt:<br>
                <br>
            <tt>&#36;&nbsp;./<i>your_binary_executable</i></tt>    </li>
            
            <li> At the Welcome page of the installation wizard, click Next.
            </li>
            
            <li> Accept the license agreement and click Next.
            </li>
            <li> At the installation directory page of the installation wizard, accept the NetBeans IDE directory found by the wizard or select a different IDE installation.
            </li>
            <li>
                <p> Verify that the installation location is correct and that you have adequate space on your system for the installation. To determine the amount of free disk space, execute the following command:
                </p>
                <tt>$ df -k</tt>
            </li>
            <li> Click Next to begin the installation.
            </li>
            <li> When the installation is complete, click Finish to exit the wizard. </li>
    </ol></p>
    <p>The default projects directory is <tt>&#36;HOME/</tt>. If you uninstall NetBeans Visual Web Pack, this directory is not deleted, and will be identified the next time you install Visual Web Pack.</p>
    <div class=greybox><b>Note: </b>If you encounter problems during software installation, see <a href="#troubleshoot">Troubleshooting</a> for full descriptions and suggested workarounds for unresolved issues that could affect the installation process. </div>
</blockquote>
<br>
<p align=center><a href="#top">top</a></p>
<!-- INSTALLATION: MAC OS ---------------------------------------------- -->
<blockquote>  <h3><a name=install_macos></a>Mac OS X</h3>
    
    <p>Following are instructions for installing NetBeans Visual Web Pack 5.5.1 on the Macintosh OS X platform.</p>
    <p>Note that for the Macintosh OS, the required JDK
        is  Java 2 Standard Edition (J2SE) 5.0  Release 4.
        You can download this JDK from the <a href="http://www.apple.com/support/downloads/">Apple Downloads page</a>.
    Search for &quot;J2SE&quot; to locate the this release. </p>
    
    <p><b>Before You Start</b></p>
    <p>The following restrictions apply to the installation on the Mac OS X platform:</p>
    
    <ul>
        <li>
            <p>To ensure correct operation of the installer and uninstaller, you must configure Java to use JDK 5.0:</p>
            <ol type=a>
                <li> In the Finder window, go to Applications > Utilities > Java > J2SE5.0 and open the Java Preferences utility. </li>
                
                <li> In the Java Application Runtime Settings section, move J2SE5.0 to the top of the list.</li>
                
            </ol>
        </li>
        <li> To allow the operating system to correctly recognize the NetBeans 5.5.1 IDE bundle components, the installation directory must end with the string <tt>.app</tt>. </li>
    </ul>
    <p><b>To Install</b></p>
    <ol>
        <li>Double-click the installer's icon in the download window to launch the installer. </li>
        
        <li> At the Welcome page of the installation wizard, click Next.
        </li>
        <li>Accept the license agreement and click Next.
        </li>
        <li> At the installation directory page of the installation wizard, accept the NetBeans IDE directory found by the wizard or select a different IDE installation.
        </li>
        <li>
            <p> Verify that the installation location is correct and that you have adequate space on your system for the installation. To determine the amount of free disk space, execute the following command:
            </p>
            <tt>$ df -b</tt>
            
        </li>
        <li> Click Next to begin the installation.
        </li>
        <li> When the installation is complete, click Finish to exit the wizard. </li>
    </ol>
    <p>The default projects directory is <tt>&#36;<i>username</i>/</tt>. If you uninstall NetBeans Visual Web Pack, this directory is not deleted, and will be identified the next time you install Visual Web Pack.</p>
    
    <div class=greybox><b>Note: </b>If you encounter problems during software installation, see <a href="#troubleshoot">Troubleshooting</a> for full descriptions and suggested workarounds for unresolved issues that could affect the installation process.<br>
    </div>
</blockquote>
<p align=center><a href="#top">top</a></p>
<br>
<h2><a name="upgrade"></a>Upgrading NetBeans Visual Web Pack  from Version 5.5 to 5.5.1.</h2>
<!-- <p>To upgrade your Visual Web Pack installation, you must uninstall any BluePrints AJAX Components you have installed as well as the Visual Web Pack itself before installing the Production Release.</p>
<p>To uninstall BluePrints AJAX components:
<ol><li>From the Main menu, select Tools > Module Manager.</li>
  <li>In the Module Manager, expand the Visual Web module and select <tt>BluePrints AJAX Components Technology Preview v. 0.1.1</tt>. </li>
  <li>Click Uninstall, and then click Close.</li>
</ol>
</p> -->
<p>NetBeans Visual Web Pack 5.5.1 only works with NetBeans IDE 5.5.1. To upgrade:<ol><li>Uninstall Visual Web Pack 5.5, following the instructions in <a href="#uninstallation">Uninstalling the Software</a> below.</li>
        <li>Uninstall NetBeans IDE 5.5 and install NetBeans IDE 5.5.1 according to the instructions in the <a href="install.html">NetBeans 5.5 Installation Instructions</a>.</li>
        <li>Install NetBeans Visual Web Pack 5.5.1 as described in <a href="#installation">Installing the Software</a> above. </li>
    </ol>
</p>

<!-- CONFIG INFO ------------------------------------------------------- -->
<h2><a name=configinfo></a>Configuration Information</h2>

<p> This topic provides information on how to make the Sun Application Server 
    available to the IDE, how to access the sample Travel database that is used 
    by some sample applications and tutorials, and how to configure
a Visual Web project. </p>

<blockquote><ul>
        <li><a href="#config_sjas">Sun Java System Application Server Configuration </a></li>
        <!--  <li><a href="#dbaseconfig">Database Configuration</a></li> -->
        <li><a href="#samples"> Visual Web Pack Sample Database</a></li>
        <li><a href="#projconfig">Visual Web Project Configuration</a></li>
        
    </ul>
    
    
    <!-- Configuration: SJAS --------------------------------------------- -->

    <h3 style="color: rgb(14, 27, 85);"><a name=config_sjas></a>Sun Java System Application Server Configuration</h3>
    
    <p>If you have installed the NetBeans IDE that is bundled with the Sun Java System Application Server, 
        the application server is already registered with the IDE and you do not need to configure it. 
        If you downloaded and installed the Sun Java System Application Server
        separately, you must configure the IDE to make the server available to
        the IDE. It is best to configure the configure the server
    before installing the Visual Web Pack.</p>
    <p>To configure a separate installation of the server:</p>
    <ol>
        
        <li>After installing the NetBeans IDE and the Sun Java System Application Server, launch the  IDE.</li>
        <li>In the Runtime window, right-click the Servers node and choose Add Server
        from the pop-up menu.  </li>
        <li>In the Add Server Instance wizard, select Sun Java System Application Server from the Server
            drop-down list, and click Next.
        </li>
        <li>Enter the location of the application server installation and click Next. </li>
        <li><div>The default username and password values for the default Application Server domain, <tt>domain1</tt>, are:</div><ul>
                
                <li>username: <tt>admin</tt></li>
                
        <li>password: <tt>adminadmin</tt></li></ul>Note that if you specify a password here, it will be stored in your user directory, a possible security risk. If you do not specify the password here, you will be prompted for the values when needed.</li>
        <li>Click Finish.</li>
        
    </ol>
    <!-- <p>If you need to access the administration console for the Access Manager server, use the following values:
  <ul>
      <li>username: <tt>amadmin</tt></li>

  <li>password: <tt>admin123</tt> </li>   </ul>
  </p>-->
    
    <!--
<h3><a name="dbaseconfig"></a>Database Configuration</h3>
<p>This section contains information for configuring Visual Web Pack for various database systems.</p>
<p>To create a new database connection: </p>
<ol><li>Launch the NetBeans IDE.
</li>
<li>In the Runtime window, right-click Databases and select New Connection.</li>
<li>
  <p>On the Basic setting tab of the New JDBC Driver dialog:
    </p>
  <ol type="a">
      <li>Select New Driver from the Name dropdown list. </li>
      <li>In the New JDBC Driver window, click Add and navigate to the location of your database's JDBC driver. The Driver Class and Name fields should populate automatically. Click OK. </li>
      <li>Modify the Database URL to reflect the host, port, and database you are using.
    </li>
      <li>Enter the User name and password of a user registered on the database. If you want to specify a database schema to use, do so on the Advanced tab.
    Otherwise click OK.</li>

  </ol>
</li>
</ol>
<p>To configure your database for NetBeans Visual Web Pack 5.5:</p>
<ol>
  <li>Launch the NetBeans IDE.
</li>
  <li>In the Runtime window, right-click Databases &gt; Drivers and select New Driver. </li>
  <li>In the New JDBC Driver window, click Add, navigate to the location of your database's JDBC driver, and select the driver. The Driver Class and Name fields should populate automatically. Click OK. </li>
</ol>
-->
    
    <!-- Configuration: Java DB --------------------------------------------- -->
    
    <h3><a name="samples"></a>Visual Web Pack Sample Database</h3>
    <p>When you install the Visual Web Pack, the installation process
        makes a sample Travel database available for the Java DB database
        that is bundled with the Sun Java System Application Server, as
        shown in the following table. Some
        sample applications and tutorials require the Travel database.
        If the IDE is configured to use the Sun Java System Application Server 
        before the Visual Web Pack is installed, the Travel database
        will be available from the Runtime window. If you make the
        Sun Java System Application Server available to the IDE
        after you install the Visual Web Pack, you must restart the IDE
        before the Travel database appears in the Runtime window.
    </p>
    <table border=1 cellpadding=4 cellspacing=3>
        <col width="20*">
        <col width="40*">
        <col width="40*">
        <tr valign="top"><th width="20%">Sample Database</th>
            <th width="40%">Connection Details</th>
            
        <th width="40%">Needed For</th></tr>
        <tr width="20%"><td>Travel</td>
            <td width="40%">DB URL: <tt>jdbc:derby://localhost:1527/travel</tt><br>
                Driver: <tt>org.apache.derby.jdbc.ClientDriver</tt><br>
                Username: travel<br>
                Password: travel<br>
            </td>
            <td width="40%">Some tutorials and sample applications</td>
        </tr>
    </table>
    <br>
    <p><b>Note:</b> To use the Travel database with a server other than the Sun Java System
        Application Server, you must make the <tt>derbyclient.jar</tt> available to the
        server, as described in the following section.
    </p>
    <p>If you do not want to install the Sun Java System Application Server,
        complete the following steps to make the Travel database available
    to the IDE.</p>
    <ol>
        <li>Download and install either the <a href="http://developers.sun.com/prodtech/javadb/downloads/">Java DB</a> database or the <a href="http://db.apache.org/derby/derby_downloads.html">Apache
            Derby</a> database.
        </li>
        <li>
            <p>Complete the following steps to make the database available
            to the IDE:</p>
            <ol type="a">
                <li>Choose Options from the Tools menu.</li>
                
                <li>Clicked Advanced Options.</li>
                <li>Expand Server and External Tool Settings, and select Java DB Database.</li>
                <li>Set the <tt>Java DB Location</tt> to the folder into which you installed
                the database server.</li>
                <li>Set the <tt>Database Location</tt> to the folder in which you store
                the databases.</li>
                <li>Click Close.</li>
            </ol>
        </li>
        <li>If you have not yet started the database server, choose Tools &gt;
        Java DB Database &gt; Start Java DB Server.</li>
        <li>In the Runtime window, right-click Databases and choose New Connection
        from the pop-up menu to open the New Database Connection dialog box.</li>
        <li>Choose Java DB (Network) from the drop-down list for Name.</li>
        <li>In the textbox for Database URL, type <tt>jdbc:derby://localhost:1527/travel;create=true;</tt>.
        <li>Set the Username to <tt>travel</tt>, set the Password to <tt>travel</tt>,
        and click OK.</li>
        <li>A new node for the connection appears. Right-click the node
        and choose Disconnect from the pop-up menu.</li>
        <li>You no longer need the connection to create the database. Right-click
            the node and choose Delete from the pop-up menu.
        </li>
        <li>Right-click Databases and choose New Connection
        from the pop-up menu to open the New Database Connection dialog box.</li>
        <li>Choose Java DB (Network) from the drop-down list for Name.</li>
        <li>In the textbox for Database URL, type <tt>jdbc:derby://localhost:1527/travel</tt>.
        <li>Set both the User Name and the Password to <tt>travel</tt>
        and click OK.</li>
        
        <li><p>Once the connection has been established, click OK to close the dialog box.</p>
        You will use this node from now on to connect to the Travel database.</li>
        <li>Right-click the node for the connection and choose Execute Command to
        open the SQL Command query editor.</li>
        <li>In the main menu, choose File &gt; Open File.</li>
        <li>Browse to and select <tt>$NetBeansInstallDir/rave2.0/startup/samples/create-Travel-derby.sql</tt>,
        then click Open.</li>
        <!-- <li>Copy the contents of the <tt>create-Travel-derby.sql</tt> file and
paste it into the SQL Command query editor.</li> -->
        
        <li>Click Run SQL in the editing toolbar to create and populate the tables
        in the Travel database.</li>
        <li>Close the SQL Command query editor and the create-Travel-derby.sql.</li>
        <li>Expand the node for the travel database connection to view the tables.</li>
    </ol>
    <p>For more information:</p>
    <ul>
        
        <li> <a href="vwp-release-notes.html#configinfo">
        NetBeans Visual Web Pack 5.5.1 Configuration Information</a> has further instructions for configuring databases and application servers.</li>
        
        <li>  <a href="http://developers.sun.com/prodtech/javadb/" target="_blank">
        Java DB At a Glance</a> gives a product overview to Java DB as well as a tour and documentation. <i>(External site opens in a new window.)</i> </li>
        <li><a href="https://netbeans.org/kb/archive/index.html">Connecting To Databases</a> <i>(Archived Document)</i> explains
        how to connect the IDE to other database servers.</li>
    </ul>
    
    <h3><a name="projconfig"></a>Visual Web Project Configuration</h3>
    <p>When you create a Visual Web project, the New Visual Web Application 
        wizard allows you to set the server and Java EE version for that project, 
    as shown in the following figure:</p>
    
    <!-- BEGIN FIGURE COMPONENT -->
    <table border="0" cellpadding="2" cellspacing="0" width="668">
        <tr>
            <td align="center" class="grey3">
                
                <img src="../../../../images_www/articles/new-project.png" width="658" height="436" border="0" alt="Figure 1: New Project Wizard">
            <div class="pad3"> <span class="dkcaption1"> <b>Figure 1</b>: New Project Wizard</span></div></td>
        </tr>
    </table>
    <!-- END FIGURE COMPONENT -->
    
    <p>If you want to use the JavaServer Faces 1.2 components, set the Java EE Version 
        to Java EE 5. The Sun Java System Application Server 9 is currently the only 
        tested server that supports Java EE 5 projects. The Visual Web Pack online 
        help topic New Visual Web Application Wizard has detailed information 
    about the settings you can use for creating a new project. </p>
    
    <p>The following table is listed at the beginning of each Visual 
    Web Pack tutorial and shows the resources that work with that tutorial:</p>
    
    <table border="1" cellpadding="1">
        <tbody>
            <tr>
                <td valign="top">JavaServer Faces Components/<br>
                Java EE Platform</td>
                <td valign="top"><img src="../../../../images_www/articles/check.png" alt="works with" height="15" hspace="3" width="14">1.2 with Java EE 5*<br>
                    <img src="../../../../images_www/articles/check.png" alt="works with" height="15" hspace="3" width="14">1.1 with J2EE 1.4 
            </td></tr>
            <tr>
                <td valign="top">Travel Database</td>
                <td colspan="4" valign="top"><img src="../../../../images_www/articles/spacer.png" alt="not required" height="15" hspace="3" width="14">Not required</td>
            </tr>
            <tr>
                <td valign="top">BluePrints AJAX Component Library</td>
                <td colspan="4" valign="top"><img src="../../../../images_www/articles/spacer.png" alt="not required" height="15" hspace="3" width="14">Not required</td>
            </tr>
    </tbody></table><br>
    
    <ul>        
        <li><b>JavaServer Faces Components/Java EE Platform:
                
                
            </b>When you choose Java EE 5 for the platform, the Component Palette
            contains JavaServer Faces 1.2 components. When you choose 
            J2EE 1.4 for the platform, the Component Palette
        contains JavaServer Faces 1.1 components</li>
        
        <li><p><b>Travel Database: </b>If listed as <em>Required</em>, the 
                Travel database is required for completing the tutorial. 
                For more information about the Travel database, 
            see the previous section titled <a href="#samples">Visual Web Pack Sample</a>.</p>
            
            To use the Travel database with a server other than the Sun Java System
            Application Server, 
            you must either add the <tt>derbyclient.jar</tt> to
            your project or copy it into your server's library directory. 
            For example, if you want to use the Travel database with Tomcat, 
            copy the <tt>derbyclient.jar</tt> file into 
            <tt>&#36;visualwebpack_install\enterprise3\apache-tomcat-5.5.17\common\lib.</tt>.
            You can find a copy of the <tt>derbyclient.jar</tt> in 
        <tt>&#36;glassfish_install\javadb\lib\derbyclient.jar</tt>.</li>
        <li><b>BluePrints AJAX Component Library: </b>If listed as <em>Required</em>, the tutorial demonstrates how to use components that are bundled with the BluePrints AJAX Component Library. See 
        <a href="https://netbeans.org/kb/archive/index.html">Downloading and Importing Ajax and Other Components</a> <i>(Archived document)</i> for details. </li>
    </ul>
    
    
</blockquote>
<!--
<a href="http://db.apache.org/derby/quick_start.html">Apache Derby: Quick Start</a>-->

<p align=center><a href="#top">top</a></p>
<!-- UNINSTALLATION ---------------------------------------------------- -->
<h2><a name=uninstallation>Uninstalling the Software</a></h2>
<p>This section contains information for uninstalling NetBeans Visual Web Pack 5.5 and 5.5.1 
    <!--, Sun Java System Application Server Platform Edition 9, Project Open ESB Starter Kit, and Sun Java System Access Manager-->
    from your system.
    <ul>
        <li><a href="#uninstall_windows">Microsoft Windows</a> </li>
        <li> <a href="#uninstall_sollinux">Solaris OS and Linux</a> </li>
        <li> <a href="#uninstall_macos">Mac OS X</a> </li>
    </ul>
</p>
<blockquote>
    <!-- UNINSTALLATION: WINDOWS ------------------------------------------- -->
    <h3><a name=uninstall_windows>Microsoft Windows</a></h3>
    
    <p></p>
    <ol>
        <li> Shut down the IDE.</li>
        <li> From the Control Panel, start Add or Remove Programs, select NetBeans Visual Web Pack and click Change/Remove.
        </li>
        
        <li> Follow the instructions in the uninstaller. </li>
        
        <li>Remove the <tt>$&lt;NetBeans install directory&gt;\rave2.0</tt> directory manually if it still exists. </li>
    </ol>
    
    <!-- UNINSTALLATION: SOLARIS and LINUX --------------------------------- -->
    <h3><a name=uninstall_sollinux>Solaris OS and Linux</a></h3>
    
    <ol>
        <li> Shut down the IDE.</li>
        <li> 
            <p>Navigate to the <tt>uninst</tt> subdirectory of your NetBeans Visual Web Pack 5.5 or 5.5.1 installation, </p>
        <tt>&#36;NetBeansInstallDir/rave2.0/uninst</tt></li>
        <li> Execute the <tt>uninstaller</tt> script. </li>
        <li>Remove the <tt>$NetBeansInstallDir/rave2.0</tt> directory manually if it still exists. </li>
    </ol>
    
    
    <!-- UNINSTALLING MAC OS ------------------------------------------------- -->
    
    <h3><a name=uninstall_macos>Mac OS X</a></h3>
    
    <ol>
        <li> Shut down the IDE.</li>
        
        <li> 
            <p>Navigate to the Visual Web Pack <tt>uninst</tt> subdirectory 
            of your NetBeans Visual Web Pack 5.5 or 5.5.1 installation,</p>
            <tt>&#36;NetBeansInstallDir/NetBeans.app/Contents/Resources/NetBeans/rave2.0/uninst</tt>
        </li>
        
        <li>
            <p>Execute the command:</p> 
        <tt>$ java -jar uninstall.jar</tt>.</li>
        
        <li>Remove the <tt>$NetBeansInstallDir/NetBeans.app/Contents/Resources/NetBeans/rave2.0</tt> 
        directory manually if it still exists. </li>
    </ol>
</blockquote>

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

<a name=troubleshoot></a>
<h2>Troubleshooting</h2>

<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 configuration information, 
see the <a href="vwp-release-notes.html">Release Notes</a>. </p>


<p> If you encounter a problem not listed in the release notes or wish to request an enhancement, file an issue in the NetBeans bug tracking system, IssueZilla, at <a href="https://netbeans.org/issues">https://netbeans.org/issues</a>.
For Visual Web Pack issues, select the "visualweb" component and then select an appropriate subcomponent. If you are not sure of the right subcomponent name, choose "other".</p>
<p>If you are already logged in to netbeans.org, you can go directly to the <a href="https://netbeans.org/bugzilla/enter_bug.cgi?component=visualweb&version=5.5">visualweb issue entry screen</a>.</p>

<p>Following are the unresolved issues for this release that could affect or disrupt the installation process: </p>
<ul>
    <!-- Bug Id: 6346340 http://bt2ws.central.sun.com/CrPrint?id=6346340 -->
    <li> <b><span style="color: rgb(4, 84, 145);">Solaris installation aborts with the error "JRE not found" even though JRE was installed and specified.</span></b>
        
        <p><strong><span class="titlectable style2"></span>Description: </strong> This application requires a Java Run Time Environment (JRE) implementation to run, but the installer is unable to find one on your computer. Use the command line switch <tt>-is:javahome</tt> to specify a valid JRE.  For more help, use the option <tt>-is:help</tt>.</p>
        <p><strong>Workaround: </strong> Start the installer with the <tt>-is:tempdir <i>custom-temp-dir</i></tt> command line parameter. Note that <tt><i>custom-temp-dir</i></tt> must be an absolute path, and should contain at least 1 GB of  disk space.</p>
    </li>
    <li><b><span style="color: rgb(4, 84, 145);">Installation of Sun Java System Application Server 9 fails due to conflict with port 4848</span></b></li>
    <p><strong><span class="titlectable style 2"></span>Description: </strong>By default, Sun Java System Application Server uses port 4848, a port which may be used by another application. You can modify the application server's <tt>setup.xml</tt> file to point to a different port. Note that this issue only affects standalone installations of Sun Java Application Server, not installations in which the application server is bundled with NetBeans IDE. </p>
    <p><strong>Workaround: </strong>To assign a different port number to Sun Java System Application Server:<ol>
            <li>Navigate to the directory containing the application servers's installer .JAR file. by.</li>
            <li><p>Extract the files in the installer by running the command: </p>
            <tt>java -Xmx256m -jar <i>filename.jar</i></tt></li>
            <li>Open <tt>setup.xml</tt> in a text editor.</li>
            <li>Search for the string 4848 and change this number to that of an unused port. Save and close the file. </li>
            <li>Continue with the <a href="http://glassfish.dev.java.net/public/downloadsindex.html#Instructions_to_unbundle_and_configure">application server's installation</a>.</li>
    </ol> </p>
</ul>

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

<!-- End Content Area -->
</body>
</html>
