Utility Tools
CHAPTER 13
To speed project development, use the following wizards when creating standard J2EE components and other Java classes:
You access these wizards by selecting File>New>File from the menu.
Use the EJB Wizard to create EJB1.1 entity and session beans or EJB2.0 entity, session, and message beans. The following sections describe:
The EJB Wizard can speed your EJB development effort by providing:
Once you have created the EJB using the EJB Wizard, you can modify it in the Java Editor by opening its Java source files from the Project tab of the Navigation Pane.
On the General tab, choose EJB (in the Advanced section) and click OK. (Alternatively, you can double-click EJB.)
The steps you follow depend on the type of bean you want to generate; see Panel sequence (below) for details.
This section lists the panels you need to complete in the EJB Wizard, depending on the type of bean you want to create. Click the link to display more information about how to complete the panel.
If you want to create |
You step through these panels |
---|---|
A stateful or stateless session bean |
|
A message-driven bean |
|
A BMP entity bean |
|
A 1.x CMP entity bean |
|
A 2.x CMP entity bean |
|
This section describes the options on each panel of the EJB Wizard. The panels are:
This panel lets you specify the type of EJB you want to create.
Return to Panel sequence.
This panel lets you specify whether the wizard should create one EJB JAR or an EJB JAR and an EJB-client JAR.
Specify the EJB JAR configuration:
Return to Panel sequence.
How EJB JARs and EJB-client JARs are related in a project An EJB-client JAR project is a peer to its EJB JAR projectit is not a subproject of the EJB JAR project. The EJB JAR and EJB-client JAR are linked in the following ways:
EJB JAR has a manifest file that includes a Class-Path entry for the EJB-client JAR archive
The EJB JAR's deployment descriptor contains an <ejb-client-jar> element containing the name of the EJB-client JAR archive
If you create an EJB JAR as a subproject, its EJB-client JAR will also be made a subproject of the same parent project. The EJB-client JAR will have the same project location, same archive location, same subproject status, and same inclusion in its parent archive as the EJB JAR.
This panel is used to specify details about the project location (project, directory, package) where the wizard is to store the EJB files it generates.
If you chose to use both an EJB JAR and an EJB-client JAR, you are prompted to provide the project/package/directory information for the EJB-client JAR on a panel similar to this one:
On the top portion of this panel of the EJB Wizard, specify one of the following three project association options:
Option |
What to do |
---|---|
Add to open EJB JAR project |
If you currently have one or more EJB projects open, you can add the EJB to one of those projects by selecting it from the dropdown list. If the project that you want to associate the EJB with is not currently open, you must open the target project before starting up the EJB wizard. If the EJB project is defined as an EJB1.1 project, you cannot add EJBs that use EJB2.0 featuresand the wizard prevents you from doing so. |
Create project |
Click Create project to start the New Project Wizard. When you create a new EJB project, you are prompted to specify whether it is an EJB1.1 or EJB2.0 project. You can add EJB1.1 beans to an EJB2.0 project, but not vice versa.
|
No project -- just write files to the disk |
If you do not want to associate the EJB with a project, you can still use the wizard to create the class in a nonproject directory on the file system. |
On the bottom portion of this panel of the EJB Wizard, specify the following:
Return to Panel sequence.
This panel is used to identify whether the EJB source that the wizard generates should be completely new, based on an existing source file, or (for entity beans) a database table.
Choose one of the following options:
Return to Panel sequence.
This panel is used to specify the information that the wizard needs to connect to a database. Once connected to the database, it is able to get the list of database tables so that you can pick the database table on which the entity bean should be based.
Option |
What to do |
---|---|
Database |
Select a database profile from the dropdown list box. If the dropdown is not populated or if the existing profiles are unsuitable, you must create a database profile by clicking New (or by leaving the wizard to select Tools>Profiles and click the Databases tab). When you complete this panel (by clicking Next), the wizard creates a client connection to the database. This means that the database driver (specified in the database profile) must be available to the exteNd Director development environment.
|
Database username and Database password |
Type a user name and password that you can use to connect directly to the specified database. This user name and password combination must allow access to the database's system tables so that the wizard can access the database's metadata. |
Return to Panel sequence.
This panel presents a list of database tables. You can select the database table that you want to use as the basis for your entity bean.
Specify the following two options:
Return to Panel sequence.
This panel lets you choose an existing Java class or interface that the wizard should use as the basis for your EJB.
Return to Panel sequence.
This panel lets you specify a name for the EJB classes and interfaces that the wizard generates.
How the wizard names EJBs The EJB Wizard generates names for the EJB's implementation classes and interfaces based on a Base name that you supply in this wizard panel. It follows these rules when naming the EJB components:
On the top portion of this panel of the EJB Wizard, specify values for the following components:
Option |
What to do |
---|---|
Base name |
Specify a legal name for the EJB class and interfaces. This name is used to construct the names for the other EJB components If you are creating an entity bean based on a database table, the wizard defaults these names to the database table name as the Base name and then uses the rules defined in How the wizard names EJBs just above |
Logical EJB name |
Accept the default or provide a legal name This name is used: |
Implementation class |
Accept the default or specify a legal Java class name |
Create primary key class |
Check this when you want the EJB Wizard to create a separate primary key class |
Primary key class |
Accept the default or specify a legal Java class name |
If you are creating an entity or session bean that uses CMP 2.x, you are prompted to select the radio button (on the bottom portion of this panel) that represents the set of interfaces that you want the wizard to generate.
Accept the default names for the set of interfaces, or specify legal Java names.
Return to Panel sequence.
This panel lets you specify the methods that the wizard will add to the bean implementation class and the remote and/or local interface. Methods on the remote and/or local interface can be called by the EJB's client.
On this panel of the EJB Wizard, click Add and specify the details of one method at a time:
Repeat these steps to create other methods or click Next to continue.
Return to Panel sequence.
This panel lets you specify the CMP entity bean's persistent fields or the BMP entity bean's data fields. This panel is already populated if you base the bean on a database table. Otherwise, you'll have to use the Add button to add the fields you want.
NOTE: The EJB2.0 specification requires CMP field names to begin with a lowercase letter. If you base your entity bean on a table with field names that begin with uppercase (like Customer) or are all uppercase (CUSTOMER), the wizard generates lowercase variable names to comply with the specification. The wizard does not modify the names for BMP beans, because the specification does not require it.
Return to Panel sequence.
This panel lets you specify the fields that make up the entity bean's primary key.
Specify the following information for each field that is part of a primary key field:
Option |
What to do |
---|---|
Field |
Move the cursor to the field |
Primary Key |
Depends on how you responded to the Create primary key checkbox on the wizard panel described in Specifying the EJB class and interface names. If you:
|
Use this single field directly as the primary key |
Check this if you've selected a single field that the wizard should use as the primary key. The field must be a String or a wrapper class for a primitive type (such as java.lang.Integer). The wizard generates the code so that the wrapper-class type is in the deployment descriptor's <prim-key-class> element and the primary key field name is in the <primkey-field> element. |
Return to Panel sequence.
This panel lets you specify the fields for which the wizard should generate accessor (get/set) methods.
Specify the following information for each field that requires a get or set method:
Return to Panel sequence.
This panel lets you specify the create() methods that the wizard should generate.
Click Add to define a new create() method.
On the Create Method Detail panel, specify:
Return to Panel sequence.
This panel lets you specify values for the <relationships> node in the EJB deployment descriptor. Relationships exist between two entity beans with container-managed persistence. However, when you use the EJB Wizard, you are creating a single bean at a timeso you can only define the <relationship> node entries for the bean you are currently creating. You can define a relationship from the current bean to a preexisting bean or a not-yet-defined bean. For the related bean, you can use the name you know you will be giving it later, or you can use the default name EBUnspecified. When you use EBUnspecified, the wizard generates an incomplete relationship node in the deployment descriptor.
Relationships can be defined as bidirectional or unidirectional.
How to define bidirectional and unidirectional relationships In a bidirectional relationship, each bean knows about the other bean in the relationship. Each bean has methods for accessing the relationship field of the other bean. The wizard can generate these accessor methods when you define a relationship field for boths sides of the relationship. The relationship field is represented in the wizard as the CMR field name.
In a unidirectional relationship, only one bean in the relationship knows about the other bean. An example of a unidirectional relationship is between a lineitem and a product. The lineitem needs to know about the product, but the product does not know about the lineitem. In a unidirectional relationship, you would define a relationship field (a CMR field name) for the lineitem bean, but not for the product.
Editing bean relationships The wizard allows you to edit only the relationships listed in the deployment descriptor that are considered incomplete and that:
To edit or delete a relationship, highlight the relationship and choose the button appropriate to the action you want.
The Relationship Detail panel The wizard requires the following elements to generate accessor methods if this is part of a bidirectional relationship, or if it is unidirectional and is the bean that knows about the other bean:
You can fill in all of the other information later using the Deployment Descriptor Editor.
Return to Panel sequence.
This panel lets you define the bean's finder methods.
On this panel of the EJB Wizard, click Add to define a new find() method.
On the Find Method Detail panel, specify:
Return to Panel sequence.
This panel is used to specify any other classes or packages you want the wizard to generate import statements for. The wizard does not import any packages by default.
Type the fully qualified path name of the Java class or the full package name in the text field.
When you are done adding or removing additional classes or packages, click Next to continue.
Return to Panel sequence.
This panel lets you specify the resource reference that you'll use as a substitute for the database table name in the bean's source code, the connection factory class, and the type of authentication.
Return to Panel sequence.
This panel shows all of the classes and interfaces that the wizard will generate. Review it carefully to make sure that you have specified everything you wanted to. If you find a mistake, you can click the Back button to return to a panel and make the appropriate change.
Check the values in the Summary panel to make sure you have specified everything correctly, and then click Finish.
When the Summary panel reports the wizard is done creating the EJB, click OK.
Now the EJB implementation class and the interfaces are open for editing in the Java Editor.
Return to Panel sequence.
Use the JSP Wizard to create JSP pages. The following sections describe:
Use the JSP Wizard to quickly specify a variety of attributes for your JSP page and add your JSP page to an open project.
On the General tab, choose JSP and click OK. (Alternatively, you can double-click JSP.)
Continue as described in Specifying the JSP page name and other options (below).
To specify the JSP page name and other options:
On the first panel of the JSP Wizard, specify the following options:
Click Next to proceed to the next wizard panel. See Specifying the project, directory, and package.
To specify the project, directory, and package:
On this panel of the JSP Wizard, specify the following options:
Option |
What to do |
---|---|
Add to open WAR project |
If you currently have one or more Web archive (WAR) projects open, you can add the JSP page to one of those projects by selecting it from the list. |
Create project |
If you do not have a WAR project open but want to associate the JSP page with a WAR project, click Create project to start the New Project Wizard.
|
No projectjust write files to the disk |
Choose this option if you do not want to associate the JSP page with a project; the wizard will create the JSP page in a nonproject directory on the file system. |
Base directory |
If you specified a WAR project, the default base directory is the jsps subdirectory of the project directory. Otherwise, this field is empty. Click Browse to specify a file system location. You can add one or more subdirectories to the default base directory. |
Package |
Specify a package hierarchy (with levels separated by periods) to place the JSP page in a subdirectory of the base directory. This affects only the directory where the JSP page is saved and the default URL for accessing the JSP page. The JSP page itself is unaffected. For example, if the base directory is ProjectDir/jsps and you specified com.myco as the package, the JSP page will be created in ProjectDir/jsps/com/myco. |
File directory |
The contents of Base directory and Package are combined to specify the location of the JSP page, which is displayed under File directory. This is the file system location where the wizard creates the JSP page. You cannot change the contents of this field directly; you must change Base directory and/or Package. |
Add the files to the root of the archive |
When generating the project archive, place the JSP page at the root of the archive (taking into account any package structure you specified). |
Add the files to the archive with this prefix |
When generating the project archive, place the JSP pages in a directory tree as specified in the prefix (taking into account any package structure you specified). |
The files will be added to this location in the archive |
The location in the archive of the JSP page, as specified by the two preceding selections, is reflected in this field. You cannot change the contents of this field directly; you must change the preceding two selections. |
If on the first panel you specified that you want to specify import values, click Next to proceed to the next panel. See Specifying imports.
Otherwise, you are done. Click Finish. When the final wizard panel reports that it has finished creating the JSP page, click OK. See What happens.
To specify classes and packages to import:
On this panel of the JSP Wizard, specify which classes you want to reference in the JSP page without having to specify their package names.
Classes or packages you specify here are generated as the import attribute of the page directive. This directive corresponds to import statements in a Java source file.
NOTE: As a convenience, every JSP page automatically imports all the classes from these packages: java.lang, javax.servlet, javax.servlet.http, and javax.servlet.jsp.
To add a class or package, click Add and specify the class or package. You can add as many classes or packages as you want.
Click Finish. When the final wizard panel reports it has finished creating the JSP page, click OK. See What happens.
The JSP page is generated and appears in the JSP Editor. If you specified that you wanted an error page associated with the JSP page, the error page is generated in the same directory with the name JSPPageNameErrorPage.jsp and is specified in the JSP page's errorPage attribute of the page directive.
The wizard adds the JSP page (and error page if present) to the open project if you selected that option.
Use the Servlet Wizard to create servlet Java class files. The following sections describe:
The Servlet Wizard provides an automated mechanism for creating Java servlet source files. The wizard provides options to specify these attributes of a Java servlet class:
The content type of the HTTP response document, such as HTML, XML, and so on
Whether to implement the single- or multi-threaded model interface
Whether to include the servlet in an existing project, in a new project, or not in any project
Whether the servlet is to be a member of a package (that is, whether to specify a package definition)
The directory structure for the Java source files and for the generated classes in the archive
Once you have created a servlet using the Servlet Wizard, you can modify that servlet in the Java Editor.
On the General tab, choose Servlet and click OK. (Alternatively, you can double-click Servlet.)
Continue as described in Specifying the class name and other servlet options (below).
To specify the class name and other servlet options:
On the first panel of the Servlet Wizard, specify the following options:
Click Next to go to the next wizard panel. See Specifying the project, directory, and package.
To specify the project, directory, and package:
On the second panel of the Servlet Wizard, specify the following options:
Option |
What to do |
---|---|
Add to open WAR project |
If you currently have one or more Web archive (WAR) projects open, you can add the servlet to one of those projects by selecting it from the list. |
Create project |
If you do not have a WAR project open but want to associate the servlet with a WAR project, you can click Create project to start the New Project Wizard.
|
No projectjust write files to the disk |
If you do not want to associate the servlet with a project, you can still use the wizard to create a servlet class anywhere on the file system. |
Base directory |
If you specified a WAR project, the default base directory is a src subdirectory located directly under the project directory. Otherwise, this field is empty. Click Browse to specify a file system location. You can add one or more subdirectories to the default base directory. |
Package |
If your servlet is to be a member of a package (for example, com.mwbi.welcome), specify the package name in this field. |
File directory |
The contents of Base directory and Package are combined to specify the location of the servlet source file, which is displayed under File directory. This is the file system location where the wizard creates the servlet source file. You cannot change the contents of this field directly; you must change Base directory and/or Package. |
Add the files to the root of the archive |
When generating the project archive, place the generated class files for the servlet at the root of the archive. |
Add the files to the archive with this prefix |
When generating the project archive, place the generated class files for the servlet in a directory tree as specified in the prefix. The default is to place the servlet classes in a WEB-INF/classes directory under the root of the archive. If you specified a package name, the directory structure associated with that package is added to the prefix to determine the final archive path for the generated classes. |
The files will be added to this location in the archive |
The location in the archive of the generated servlet class files, as specified by the two preceding selections, is reflected in this field. You cannot change the contents of this field directly; you must change the preceding two selections. |
Click Next to go to the next wizard panel. See Specifying which HttpServlet methods to override.
To specify which HttpServlet methods you want to override:
On this panel of the Servlet Wizard, specify which methods in the HttpServlet class to override in the servlet.
Typically, you want to override the doGet and doPost methods. This panel enables you to override these HttpServlet methods:
Choosing any of these methods causes the wizard to insert the basic structure for that method into the servlet code it generates so that you can easily add the appropriate processing logic later using the Java Editor.
Click Next to go to the next wizard panel. See Specifying which interfaces to implement.
To specify which interfaces to implement:
On this panel, specify any interfaces that the servlet will implement. Click Add to specify an interface. You must specify the fully qualified name of the interface. For each interface, you can specify whether you want the wizard to generate stub methods.
You can rearrange the list of interfaces by clicking Up or Down. You can specify that you want stub methods for all or none of the interfaces by clicking Check All or Uncheck All.
The wizard will generate the following for each interface you specify:
Click Next to go to the next wizard panel. See Specifying which classes and packages to import.
To specify which classes and packages to import:
On this panel, specify any additional classes or packages that the servlet should import.
The wizard will generate an import statement for each entry you make here.
Once you have specified the imports, click Finish.
The Servlet Wizard creates a Java servlet class based on what you specified.
When the wizard reports that it is done creating the servlet, click OK.
The servlet code appears in the Java Editor.
If you specified that the servlet is to be associated with a WAR project, the wizard adds the servlet to that project.
Use the Java Class Wizard to create general-purpose Java class files. The following sections describe:
With the Java Class Wizard you specify a variety of class attributes such as scope and whether to create a class or an interface. The wizard lets you add the new source file to an existing project, create a new project to add the new source file to, or simply write the new class file to disk.
To start the Java Class Wizard:
On the General tab, choose Java file and click OK. (Alternatively, you can double-click Java file.)
Continue as described in Specifying the class name and other options (below).
To specify the class name and other options:
On the first panel of the Java Class Wizard, specify the following options:
Click Next to go to the next wizard panel. See Specifying which interfaces to implement.
To specify which interfaces to implement:
On this panel, specify any interfaces that the class will implement. Click Add to specify an interface. You must specify the fully qualified name of the interface. For each interface, you can specify whether you want the wizard to generate stub methods.
You can rearrange the list of interfaces by clicking Up or Down. You can specify that you want stub methods for all or none of the interfaces by clicking Check All or Uncheck All.
The wizard will generate the following for each interface you specify:
Click Next to go to the next wizard panel. See Specifying which classes and packages to import.
To specify which classes and packages to import:
On this panel, specify any additional classes or packages that the class should import.
The wizard will generate an import statement for each entry you make here.
Click Next to go to the next wizard panel. See Specifying the project, directory, and package.
To specify the project, directory, and package:
On the top portion of this panel of the Java Class Wizard, specify one of the following three project association options:
Option |
What to do |
---|---|
Add to open project |
If you currently have one or more projects open, you can add the class file to one of those projects by selecting it from the list. |
Create project |
If you do not have a project open but want to associate the class file with a project, click Create project to start the New Project Wizard. When you are through, the new project is selected as the project to add the new class file to.
|
No projectjust write the files to the disk |
Choose this option if you do not want to associate the class file with a project; the wizard will create the class file in a nonproject directory on the file system. |
On the lower portion of this Java Class Wizard panel, specify the following options:
When the final wizard panel reports it's done creating the Java class, click OK.
The code appears in the Java Editor. (The Java class is added to the open project only if you selected that option.)
The wizard creates the Java class source file. After you write the methods that implement the specific functionality for this new class (as well as any import statements), you can add the new class file to a project.
For more information, see Adding to projects.
Use the JavaBean Wizard to create JavaBeans. The following sections describe:
Use the JavaBean Wizard to quickly create a skeleton for a JavaBean and add it to an open project.
On the General tab, choose JavaBean (in the Advanced section) and click OK. (Alternatively, you can double-click JavaBean.)
Continue as described in Specifying the class name and other options (below).
To specify the class name and other options:
On the first panel of the JavaBean Wizard, specify the following options:
Click Next to go to the next wizard panel. See Specifying the data fields.
To specify the data fields for the JavaBean:
Define each data field by clicking Add and specifying the name and data type.
The generated Java file will define the fields in the order in which they are listed here. You can reorder the list by selecting a field and clicking Up or Down.
Click Next to go to the next wizard panel. See Specifying which interfaces to implement.
To specify which interfaces to implement:
On this panel, specify any interfaces that the bean will implement. Click Add to specify an interface. You must specify the fully qualified name of the interface. For each interface, you can specify whether you want the wizard to generate stub methods.
You can rearrange the list of interfaces by clicking Up or Down. You can specify that you want stub methods for all or none of the interfaces by clicking Check All or Uncheck All.
The wizard will generate the following for each interface you specify:
Click Next to go to the next wizard panel. See Specifying which classes and packages to import.
To specify which classes and packages to import:
On this panel, specify any additional classes or packages that the bean should import.
The wizard will generate an import statement for each entry you make here.
Click Next to go to the next wizard panel. See Specifying the project, directory, and package.
To specify the project, directory, and package:
On the top portion of this panel of the JavaBean Wizard, specify one of the following three project association options:
Option |
What to do |
---|---|
Add to open project |
If you currently have one or more projects open, you can add the bean to one of those projects by selecting it from the list. |
Create project |
If you do not have a project open but want to associate the bean with a project, click Create project to start the New Project Wizard. When you are through, the new project is selected as the project to add the new bean to.
|
No projectjust write the files to the disk |
Choose this option if you do not want to associate the bean with a project; the wizard will create the bean in a nonproject directory on the file system. |
On the lower portion of this JavaBean Wizard panel, specify the following options:
When the final wizard panel reports it's done creating the JavaBean, click OK.
The code appears in the Java Editor. (The JavaBean is added to the open project only if you selected that option.)
The wizard creates the skeleton of the JavaBean source file. The skeleton includes an empty constructor, declarations for all the data fields (as m_name), and get and set methods for all the fields.
Use the Tag Handler Wizard to create tag handler classes for custom JSP tags. The following sections describe:
The Tag Handler Wizard can speed your JSP development effort by:
Creating or modifying the associated tag library descriptor file (TLD)
Updating the web.xml file to include the required information
You can edit the tag handler class using the Java Editor. You can modify the TLD or the web.xml files using the XML Editor. Both files are on the Project tab of the Navigation Pane.
An open project is required before you start this wizard.
To start the Tag Handler Wizard:
On the General tab, choose Tag handler (in the Advanced section) and click OK. (Alternatively, you can double-click Tag handler.)
Continue as described in Specifying the class name and other options (below).
To specify the class name and other options:
On the first panel of the Tag Handler Wizard, specify the following options:
Click Next to go to the next wizard panel. See Specifying the project, directory, and package.
To specify the project, directory, and package:
On the top portion of this panel of the Tag Handler Wizard, specify one of the following three project association options:
Option |
What to do |
---|---|
Add to open project |
If you currently have one or more projects open, you can add the class file to one of those projects by selecting it from the list. |
Create project |
If you want to associate the class file with a new project, click Create project to start the New Project Wizard. When you are through, the new project is selected as the project to add the new class file to.
|
No projectjust write the files to the disk |
Disabledyou must associate the tag handler class with a project |
On the lower portion of this panel, specify the following options:
Click Next to proceed to the next wizard panel. See Specifying the tag library descriptor file.
To specify the tag library descriptor file:
On the top portion of this panel of the Tag Handler Wizard, choose one of the following options:
If you chose Create New TLD, complete the following fields:
Click Next to go to the next wizard panel. What panel displays next depends on whether you checked the attributes, scripting variables, or body tag check boxes on the first wizard panel. Follow the first option that fits:
If the custom tag uses the tag element's body content, see Specifying the body type.
If the custom tag uses tag element attributes, see Specifying tag handler attributes.
If the custom tag uses or creates scripting variables, see Specifying tag handler scripting variables.
Otherwise, see Specifying TagExtraInfo class.
Specify values for the following options:
Click Next to go to the next wizard panel. What panel displays next depends on whether you checked the attributes or scripting variables check boxes on the first wizard panel.
If the custom tag uses tag element attributes, see Specifying tag handler attributes.
If the custom tag uses or creates scripting variables, see Specifying tag handler scripting variables.
Otherwise, see Specifying TagExtraInfo class.
To specify the tag handler attributes:
Specify values for the following options:
Click Next to go to the next wizard panel. What panel displays next depends on whether you checked the scripting variables check box on the first wizard panel.
If the custom tag uses or creates scripting variables, see Specifying tag handler scripting variables.
Otherwise, see Specifying TagExtraInfo class.
To specify tag handler scripting variables:
Specify the values for the following options:
Click Next to go to the next wizard panel. See Specifying TagExtraInfo class.
To specify whether or not to create a TagExtraInfo class:
Specify values for the following options:
Click Finish. When the final wizard panel reports it has finished creating the TagExtraInfo class, click OK.
See What happens.
When you click Finish, the wizard:
Generates the tag handler class and displays it in the Java Editor.
Generates the TagExtraInfo class associated with the tag handler (if specified). The class is generated in the same directory with the name TagHandlerClassNameExtraInfo.java.
Adds the tag handler class (and theTagExtraInfoClass if present) to the specified project.
Creates a new TLD file (and the WAR's deployment descriptor is modified) or updates an existing TLD file, depending on what you chose.
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...