使用 NetBeans IDE 5.0 开发 J2EE 应用程序的快速入门指南

来源:百度文库 编辑:神马文学网 时间:2024/04/28 10:27:20
反馈
样例项目
是否只想试用某些 J2EE 项目?在 IDE 中,选择“文件”>“新建项目”,然后展开“样例”文件夹。IDE 中包含Java BluePrints 解决方案目录中的样例。
本教程将向您介绍创建具有容器管理持久性(CMP 实体 Bean)的实体 Enterprise JavaBeansTM 组件的基本步骤。我们将使用 NetBeansTM IDE 5.0 通过现有的 Apache Derby 数据库生成 CMP 实体 Bean。然后创建一个简单的会话 Bean 来访问数据库信息和 Web 模块客户端。
本教程是一个有关 NetBeans IDE 5.0 中的 J2EE 开发功能的快速指南,而不是如何编写企业应用程序的说明性指南。尽管您无需了解 J2EE 技术的一些知识也能完成本教程,但建议初学者最好还是先从NetBeans IDE 中的 J2EE 教程开始学起。
注意:本教程旨在向您介绍如何使用 Sun JavaTM System Application Server 8.2 及其捆绑的数据库服务器 Apache Derby。早期版本的 Sun Java System Application Server 使用 PointBase 作为捆绑的数据库服务器。要以 PointBase 为例来完成此教程,请参见使用 NetBeans IDE 4.1 开发 J2EE 应用程序的快速入门指南。
本文档包含以下主题:
入门指南设置环境配置 Derby 数据库
对 EJB 模块进行编码创建企业应用程序项目生成 CMP 实体 Bean对会话 Bean 进行编码
对 Web 模块进行编码创建定制服务定位器对 Servlet 进行编码
生成和部署应用程序设置应用程序的缺省 Web 页运行应用程序疑难解答
后续步骤
入门指南
在开始之前,必须确保安装了所需的所有软件。此外,还必须配置 Derby 数据库,并填充用来生成 CMP 实体 Bean 的数据库表。
设置环境
首先,需要在计算机上安装 Sun Java System Application Server Platform Edition 8.2(下载)。
注意:如果在 JDK 5.0 中运行 IDE,则应用服务器还需要使用 JDK 5.0 中的虚拟机。要设置 IDE 使用的 JDK,请打开 IDE_INSTALL_DIR/etc/netbeans.conf,并在 netbeans_jdkhome 属性中输入 JDK 的路径。要设置应用服务器使用的 JDK,请编辑 AS_INSTALL_DIR/config/asenv(.bat) 文件并更改 AS_JAVA 环境变量。
安装应用服务器后,需要在 NetBeans IDE 中注册该服务器。请注意,如果下载和安装的 NetBeans IDE 版本与应用服务器捆绑在一起,则不必执行此步骤。IDE 知道捆绑的应用服务器的位置。
转到 NETBEANS_INSTALL_DIR/bin 目录并运行 netbeans 命令以打开 NetBeans IDE 5.0。如果 java 不在 PATH 变量中,则在命令行中使用 --jdkhome /path/to/jdk 开关来启动 IDE,或将 netbeans_jdkhome="/path/to/jdk" 一行添加到 NETBEANS_INSTALL_DIR/etc/netbeans.conf 文件中。 在 IDE 中,从主窗口选择“工具”>“服务器管理器”。 单击“添加服务器”。选择 "Sun Java System Application Server",并为此实例指定一个名称。然后单击“下一步”。 指定应用服务器的安装目录(例如,C:\Sun\Appserver)。 将“注册本地缺省域”单选按钮保持选中状态,然后选择一个域。 (可选)单击“下一步”,输入管理员用户名和口令。如果不希望在 IDE 用户目录中存储用户名和口令,可以将这些字段保留为空。IDE 在每次需要此信息时会提示您输入。
注意:缺省管理员口令是 adminadmin。 单击“完成”。IDE 将注册该服务器,并在“运行环境”窗口的“服务器”节点下面列出该服务器。
最后,启动应用服务器:
在“运行环境”窗口中,右键单击该应用服务器节点,然后选择“启动服务器”。 展开应用服务器节点。该节点包含在应用服务器的管理控制台中看到的所有类别的子节点。通过右键单击任意一个节点并选择“属性”,可对应用服务器进行配置。

配置 Derby 数据库
在本教程中,您将通过 Derby 数据库服务器中包含的其中一个表来生成 CMP Bean。Derby 数据库服务器包含在 Sun Java System Application Server 8.2 下载文件中。
在“运行环境”窗口中,展开“数据库”节点。您会看到 jdbc:derby://localhost:1527/sample 数据库的节点。
右键单击 jdbc:derby://localhost:1527/sample 数据库,然后选择“连接”。如果系统提示您输入口令,请键入 app 作为用户名和口令,然后单击“确定”。 展开 sample 数据库节点和“表”节点。确保其中包含 CUSTOMER 节点,如下所示。
注意:如果修改了 sample 数据库,可使用此 SQL 脚本对其进行重写。
对 EJB 模块进行编码
对 Enterprise Bean 进行编码非常容易。IDE 会兼顾所有实现细节,因此您可以集中精力对 EJB 模块的业务逻辑进行编码。
创建企业应用程序项目
在本示例中,我们将创建一个企业应用程序项目作为 Web 模块和 EJB 模块的容器。通过使用企业应用程序模板,您可以自动为 Web 模块和 EJB 模块创建项目。
选择“文件”>“新建项目”(Ctrl-Shift-N),然后从“企业”类别中选择“企业应用程序”模板。单击“下一步”。 将应用程序命名为 CustomerBook,然后指定项目位置。将其余设置保持为缺省值,然后单击“完成”。
生成 CMP 实体 Bean
现在,我们将生成访问 sample 数据库的实体 Bean。对于程序要访问的每个表,都需要一个对应的实体 Bean。
在“项目”窗口中,右键单击 EJB 模块的节点 (CustomerBook-EJBModule),然后选择“新建”>“通过数据库生成 CMP 实体 Bean”。 选择“JDBC 连接”作为数据库源,然后从组合框中选择 jdbc:derby://localhost:1527/sample 连接。 键入 ejb 作为包名,然后单击“下一步”。向导将显示选定数据库中的所有表。 选择 CUSTOMER 表,单击“添加”,然后单击“完成”。
IDE 将为 CUSTOMER 表以及从 CUSTOMER 引用的任何表 (DISCOUNT_CODE) 创建 CMP Bean。IDE 还会创建一个新的 JDBC 连接池和数据源,在部署项目时,将在应用服务器中注册该连接池和数据源。

对会话 Bean 进行编码
现在,我们将创建一个会话 Bean,用来处理 Web 应用程序客户端对实体 Bean 中的信息的访问。我们将创建一个空会话 Bean,生成对实体 Bean 的调用,然后添加一些 business 方法。
在“项目”窗口中,右键单击 CustomerBook-EJBModule 项目节点,然后选择“新建”>“会话 Bean”。将该会话 Bean 命名为 CustomerFacade,并将其放在 ejb 包中。将 Bean 设置为无态 Bean,并且只有远程接口。然后单击“完成”。IDE 将创建此 Bean,并在源代码编辑器中打开其 Bean 类。 在源代码编辑器中,在 Bean 类中的任意位置单击鼠标右键,选择“企业资源”>“调用 Enterprise Bean”。选择 CustomerEB Bean,然后单击“确定”。IDE 将在源文件底部生成 lookupCustomerBean 方法。 将以下内容添加到 Bean 类起始位置的变量声明中: private ejb.CustomerLocalHome custHome; 现在,我们将在会话 Bean 的 create 方法中获取对实体 Bean 的 Home 接口的引用。删除 ejbCreate() 中的注释并添加以下语句: custHome = lookupCustomerBean(); 在 Bean 类主体中的任意位置单击鼠标右键,选择“EJB 方法”>“添加 Business 方法”。指定以下信息:
元素 值
方法名 getCustomerInfo
返回类型 String
参数 int custId
异常 javax.ejb.FinderException
在源代码编辑器中,按如下内容编辑 getCustomerInfo business 方法: public String getCustomerInfo(int custId) throws javax.ejb.FinderException { ejb.CustomerLocal customer = custHome.findByPrimaryKey(new Integer(custId)); return "Name: " + customer.getName() + ", E-mail: " +customer.getEmail(); }
最终的 CustomerFacadeBean.java 文件应如此处所示。
对 Web 模块进行编码
现在,我们需要对 Web 模块进行编码,该模块将为实体 Bean 提供用户接口。Web 模块包含一个 Servlet,允许用户按客户编号对客户进行搜索。
创建定制服务定位器
在上一节中,我们在调用 Enterprise Bean 时通过 IDE 生成了内联查找代码。在此节中,我们将创建一个定制服务定位器,IDE 将在生成对 Enterprise Bean 的调用时用到它。我们的服务定位器没有任何特殊功能,但您可以定制企业应用程序查找 Enterprise Bean 的方式。
在“项目”窗口中,右键单击 CustomerBook-WebModule 节点,然后选择“新建”>“文件/文件夹”。在向导中,从“企业”类别中选择服务定位器模板。单击“下一步”。 键入 ServiceLocator 作为类名,键入 Web 作为包,然后单击“完成”。
对 Servlet 进行编码
在最后一步中,我们将向 Web 模块添加一个 Servlet,通过它可以查找并显示 CUSTOMER 表中的每个客户的信息。
在“项目”窗口中,右键单击 CustomerBook-WebModule 节点,然后选择“新建”> "Servlet"。将 Servlet 命名为 CustomerDetail,然后将其放在 web 包中。然后单击“完成”。 在源代码编辑器中,在 Servlet 类中的任意位置单击鼠标右键,选择“企业资源”>“调用 Enterprise Bean”。选择 CustomerFacade 会话 Bean,将 web.ServiceLocator 类设置为服务定位器策略,然后单击“确定”。IDE 将插入该查找方法。 按如下所示编辑 processRequest 方法: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Servlet customerDetail"); out.println(""); out.println(""); out.println("

Servlet customerDetail at " + request.getContextPath () + "

"); String customerNr = request.getParameter("customer_nr"); if((customerNr != null) && !(customerNr.equals(""))) { try{ ejb.CustomerFacadeRemote custFacade = lookupCustomerFacadeBean(); out.println("Customer‘s info for nr. " + customerNr + ": " + custFacade.getCustomerInfo( Integer.parseInt(customerNr))); }catch(javax.ejb.FinderException ex){ out.println("Customer with nr. " + customerNr +" not found"); } } out.println("
"); out.println("Customer number: "); out.println(""); out.println("
"); out.println(""); out.println(""); out.close(); }
最终的 CustomerDetail.java Servlet 应如此处所示。
生成和部署应用程序
现在,就可以将企业应用程序部署到应用服务器中了。不需要再对部署描述符进行其他配置。IDE 已经配置了部署描述符,并为企业应用程序准备了新的连接池和数据源。
设置程序的缺省 Web 页
缺省情况下,Web 应用程序在运行时会显示其 index.jsp 页。由于我们的 index.jsp 是空的,因此希望 CustomerBook 项目显示 CustomerDetail Servlet。
在“项目”窗口中,右键单击 CustomerBook 项目,然后选择“属性”。接下来在左面板中单击“运行”。 在“相对 URL”字段中键入 /CustomerDetail。
运行应用程序
右键单击 CustomerBook 项目并选择“运行项目”。IDE 会执行以下所有任务: 生成企业应用程序项目及其所有子项目(Web 模块项目和 EJB 模块项目)。 如果服务器尚未运行,请启动它。 如果企业应用程序已部署到应用服务器上,请卸下它。 将企业应用程序部署到应用服务器上。 打开在指定的相对 URL 中的 Web 模块。
您应在外部浏览器中看到以下页面。在键入某一客户编号并按 Enter 键时,页面中应显示该客户的信息。

疑难解答
一些常见问题包括:
打开 CustomerDetail 时出现 HTTP Status 404 错误。这意味着,应用服务器找不到 CustomerDetail Servlet。确保上下文根目录 (/CustomerBook-WebModule) 与为 Web 模块设置的根目录匹配(右键单击 Web 模块项目节点 >“属性”>“运行”>“上下文路径”)。 在 CustomerDetail 表单中提交客户编号时出现 javax.transaction.TransactionRolledbackException: CORBA TRANSACTION_ROLLEDBACK 错误。这通常意味着,服务器无法访问数据库。如果出现这种情况,请执行以下操作:
确保 Derby 数据库服务器正在运行。要启动 Derby,请选择“工具”> "Derby" >“启动 Derby 服务器”。 确保在应用服务器中正确注册了资源池和数据源。要对其进行检查,可转到“运行环境”窗口并展开应用服务器的 JDBC 节点。“JDBC 资源”节点应包含 jdbc/derby_net 节点;“连接池”节点应包含 derby_netConnectionPool 节点。注册连接池和数据源(如果尚未注册):
展开 CustomerBook-EJBModule 项目的“服务器资源”节点。 右键单击 connection-pool-derby_net.sun-resource 节点,然后选择“注册”。 对 datasource-jdbc_derby_net.sun-resource 节点执行相同的步骤。
注意:要查看服务器日志,请转至“运行环境”窗口,右键单击应用服务器节点,然后选择“查看服务器日志”。
后续步骤
有关使用 NetBeans IDE 5.0 的详细信息,请参见以下资源:
NetBeans IDE 5.0 快速入门指南:用于基本 Java 应用程序用于 Web 应用程序用于 Web 服务用于 J2ME MIDP 应用程序
NetBeans IDE 5.0 导入指南:用于基本 Java 应用程序用于 Web 应用程序用于 J2EE 应用程序用于 J2ME MIDP 应用程序
NetBeans IDE 支持与文档页
要发送意见和建议、获得支持以及随时了解 NetBeans IDE J2EE 开发功能的最新开发情况,请加入nbj2ee@netbeans.org 邮件列表。