在 NetBeans
IDE 中创建应用程序客户机
本教程向您介绍如何编写和部署用于访问 Enterprise
JavaBean(EJB)的简单应用程序,以及如何访问建构在
Java EE 5
平台(EJB
3.0)和 J2EE
1.4 平台(EJB
2.x)上的 EJB。
借助 NetBeans
IDE,您可以创建作为独立项目类型的应用程序客户端。您还可以创建作为企业应用程序的一部分或独立应用程序的应用程序客户端项目。
本文档使用 NetBeans
IDE 6.1 发行版。文章中的步骤也适用于早期版本的
IDE,但可能会没有
NetBeans IDE
6.1 中的一些新选项。
预计时间:30
分钟
教程练习
要学习本教程,您需要使用以下技术和资源。
|
软件或资源
|
所需版本
|
|
NetBeans
IDE
|
Web &
Java EE,版本
6.1
或 版本
6.0
|
|
Java
Developer Kit(JDK)
|
版本 6
或版本 5
|
|
GlassFish
V2 或 Sun
Java Systems 应用服务器
|
UR1 或
UR2
|
在本教程中,您需要在 IDE
中注册一个 GlassFish
/ Sun Java System Application Server 的本地实例。GlassFish
应用服务器绑定在 IDE
中。如果您在安装 IDE
时已经安装了应用服务器,则服务器已经通过了 IDE
的注册。
前提条件
本文档假定您拥有以下技术的基本知识或者具备相关编程经验:
创建作为企业应用程序一部分的应用程序客户端
首先,我们创建一个名为EnterpriseAppEE5的Java
EE 5企业应用程序。在我们创建企业应用程序的同时,还将创建应用程序客户端。
创建企业应用程序
从主菜单选择“文件”>“新建项目”选项。
从“企业”类别中选择“企业应用程序”,然后单击“下一步”按钮。
键入 EnterpriseAppEE5
作为项目名,并指定项目位置。
如果“使用指定文件夹”选项为选中状态,则取消选中它。
(此选项对于 NetBeans
IDE 6.1 可用。在本教程中,我们将项目库复制到一个专门的文件夹中,因为需要与其他用户或项目共享库。)
单击“下一步”按钮。
将服务器设置为 GlassFish
并将 Java
EE 版本设置为 Java
EE 5。
如果未选中“创建 EJB
模块”和“创建应用程序客户机模块”选项,请选中它们。
您可以取消选中“创建应用程序客户机模块”,因为本教程不需要网络模块。
单击“完成”按钮。
在企业应用程序中创建会话 Bean
现在,我们将在 EJB
模块中创建 SessionBean
EJB bean。要创建该 SessionBean,请执行以下操作:
右键单击“项目”窗口中的
EnterpriseAppEE5-ejb
EJB 模块,然后选择“新建”>“其他”打开“新建文件”向导。
从“企业”类别中选择“会话
Bean”,然后单击“下一步”按钮。
键入 Session
作为 EJB
名称,并键入 ejb
作为包名。
选择“无状态”作为“会话类型”,然后选择“远程”作为创建接口的类型。
(您可以取消选中本地接口,因为本教程只使用远程接口。)
单击“完成”按钮。
单击“完成”按钮时,bean
类 SessionBean.java
将在源编辑器中打开。
在“添加业务方法”对话框中,键入
getResult
作为名称,将“返回类型”设置为“字符串”,然后选中“远程接口”复选框。单击“确定”按钮。
在 SessionBean.java
中,将 getResult
方法修改为:
public String getResult() {
return "This is EJB 3.0 Bean";
}
保存更改。
通过应用程序客户机调用会话 Bean
现在,我们将代码添加到用于调用 EJB
bean 的应用程序客户机中。要修改应用程序客户机,请执行以下操作:
在“项目”窗口中展开“EnterpriseAppEE5-app-client”>“源包”>
enterpriseappee5,然后双击 Main.java 在源编辑器打开该文件。
在源编辑器中单击鼠标右键,然后选择“企业资源”
>“调用企业 Bean”。
在“调用企业 Bean”对话框中,选择
SessionBean
作为要调用的 bean
并选择“远程”作为“引用接口”。单击“确定”按钮。
单击“确定”按钮时,以下注释将被添加到
Main.java
中以调用会话 bean:
@EJB
private static SessionRemote sessionBean;
利用以下代码修改 main
方法,生成一些简单输出。我们将使用 System.err.println
,以便能方便地在“输出”窗口中查看消息。
public static void main(String[] args) {
System.err.println("result=" + sessionBean.getResult());
保存更改。
配置企业应用程序
现在几乎所有事情都已经完成了,我们需要做的最后一件事就是设置作为模块的应用程序客户端,它应该在您运行企业应用程序时运行。
要配置企业应用程序,请执行以下操作:
右键单击“项目”窗口中的
EnterpriseAppEE5
企业应用程序节点,然后选择“属性”。
在“项目属性”对话框中选择“运行”。
在“客户机模块 URI”类别中选择“EnterpriseAppEE5-app-client
”(默认选项)。单击“确定”按钮。
运行企业应用程序
现在,我们可以运行企业应用程序并测试客户程序客户机。
右键单击“项目”窗口中的 EnterpriseAppEE5
并选择“运行”。
在运行项目时,IDE
将生成并部署应用程序。以下消息将出现在“输出”窗口中:
result
= This is EJB 3.0 Bean
使用独立应用程序客户端访问
EJB
在本练习中,我们将创建一个 EJB
模块项目,然后创建与 EJB
连接的应用程序客户端项目。
我们不能使用 EJB
注释将 EJB
链接到应用程序客户端中,因此我们将使用上下文查找。如果您拥有一个以上的远程接口,
bean
查找代码是不同的,那么我们将本练习分为两部分:
访问一个远程接口
在本练习中,我们创建一个具有远程接口的 EJB
模块,然后创建访问
EJB
的应用程序客户端。
创建 EJB
模块
在本练习中,我们创建一个名为 EJBModule30
的 EJB
模块。我们并不希望将 EJB
模块添加到企业项目中。
从主菜单选择“文件”>“新建项目”选项。
在“企业”类别中选择“EJB
模块”选项并单击“下一步”按钮。
键入 EJBModule30
作为项目名称,并设置项目位置。
取消选中“使用指定文件夹”选项。单击“下一步”按钮。
确保 EJB
模块未添加到企业应用程序中。
将服务器设置为 GlassFish
并将 Java
EE 版本设置为 Java
EE 5。
单击“完成”按钮。
在 EJB
模块中创建会话 Bean
在本练习中,我们将在 EJB
模块中创建 Bean30
EJB。要创建 Bean30,请执行以下操作:
右键单击“项目”窗口中的
EJB
模块,然后选择“新建”>“其他”打开“新建文件”向导。
从“企业”类别中选择“会话
Bean”,然后单击“下一步”按钮。
键入 Bean30
作为 EJB
名称,键入 ejb
作为包名。保持“会话类型”为“无状态”不变,然后勾选“远程”创建远程接口。单击“完成”按钮。
单击“完成”按钮时,bean
类 Bean30Bean.java
将在源编辑器中打开。
在源编辑器中右键单击源代码,从弹出窗口中选择“EJB
方法”>“添加业务方法”,生成 bean
的一个业务方法。在“添加业务方法”对话框中,键入
etResult
作为方法名称,将“返回类型”设置为“字符串”,确保勾选了“远程”复选框。单击“确定”按钮。
在 Bean30Bean.java
中,将 getResult
方法的返回修改为以下内容(粗体):
public String getResult() {
return "This is EJB 3.0 Bean";
}
修改 @Stateless
会话 bean
注释,以更换用于映射 bean
的默认名称。我们想要更改从 Bean30Bean
到 Bean30
的映射名称。然后我们将使用应用程序客户机中的
Bean30
来查找
bean。现在,注释应如下所示(黑体部分不同):
@Stateless(mappedName="Bean30")
public class Bean30Bean implements Bean30Remote {
保存更改。
创建应用程序客户机项目
现在我们创建将访问 EJB
的应用程序客户机 ApplicationClientForTest。
从主菜单选择“文件”>“新建项目”选项。
从“企业”类别中选择“应用程序程序客户机”,然后单击“下一步”按钮。
键入 ApplicationClientForTest
作为项目名称,并设置位置。
取消选中“使用指定文件夹”选项。单击“下一步”按钮。
将服务器设置为 GlassFish
并将 Java
EE 版本设置为 Java
EE 5。
单击“完成”按钮。
通过应用程序客户机调用 EJB
现在,我们将 EJBModule30
项目添加到作为库的 ApplicationClientForTest
中,并添加访问 Bean30
的代码。
展开“项目”窗口中的“ApplicationClientForTest”项目节点,右键单击“库”节点并选择“添加项目”。或者,您可以打开
ApplicationClientForTest
项目属性窗口,然后单击“库”类别中的“添加项目”按钮
在“添加项目”对话框中,找到并选择
EJBModule30
项目,然后单击“添加项目 JAR
文件”按钮。EJBModule30
的 JAR
文件已添加到
ApplicationClientForTest
的库中。通过在“项目”窗口中展开项目的“库”节点,您可以看到项目库。
双击“项目”窗口中的
Main.java,在源编辑器中打开该文件。
在源编辑器中,将以下代码添加到
Main.java
的 main
方法中。我们将再次使用System.err.println,以便轻松看到“输出”窗口中的消息。
public static void main(String[] args) {
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30");
System.err.println("EJB message is:" + br.getResult());
修复导入语句(Alt-Shift-I)。
修复代码中的错误。您可以使用 IDE
中的建议功能获取帮助。
注意:在本例中,错误是由遗漏的throws子句引起的。为了使用
IDE
的建议功能,在包含错误的代码第一行中插入光标,在其下画红线强调。当“建议灯泡”图标在左侧出现时,单击灯泡并选择“添加
throws
子句...”
将
throws
子句添加到方法中。将
throws
子句添加到方法中后,IDE
会添加适当的
import
语句。
保存更改。
现在万事俱备,可以将 EJBModule30
和 ApplicationClientForTest
部署到服务器中了,请右键单击“项目”窗口中每个项目的项目节点,并选择“取消部署和部署”。部署完两个项目之后,右键单击“项目”窗口中的ApplicationClientForTest,并选择“运行”。在“输出”窗口中,您应该能看到以下消息:
EJB
message is: This is EJB 3.0 Bean
注意:如果使用防火墙,您可能需要禁用防火墙,以允许应用程序客户机访问
EJB。
访问两个或多个远程接口
在本练习中,我们在 EJBModule30
中创建第二个远程接口。然后我们修改应用程序客户机中的代码,以便它可以访问每个接口。我们在本练习中用来调用
EJB
的代码与调用一个远程接口时所用代码略有不同。本练习帮助您学习如何处理从一个独立应用客户机访问两个或多个远程接口时的情况。
为 Bean30
EJB 创建第二个远程接口
在本练习中,我们将为 Bean30
EJB 创建一个名为 Bean30Remote2
的远程接口。
要创建第二个接口,请执行以下操作:
右键单击“项目”窗口中的“EJB
模块”并选择“新建”>
“Java 类”。
键入 Bean30Remote2
作为类名,键入 ejb
作为包名,然后单击“完成”按钮。
单击“完成”按钮时,bean
类 Bean30Remote2.java
将在源编辑器中打开。
将
@Remote
注释添加到类中,声明作为远程接口的类。
修改类定义,将它声明为接口,并添加一个
getResult
方法。现在,类应如下所示(粗体为更改部分):
@Remote
public interface Bean30Remote2 {
String getResult2();
}
修复导入语句。您将需要导入
javax.ejb.Remote.。
保存更改。
修改 Bean30
Bean 实现接口
在本练习中,我们修改 Bean30
以实现接口 Bean30Remote2。
在 Bean30Bean.java
中实现 Bean30Remote2.java
中的 getResult2
方法。该方法应如下所示:
public String getResult2() {
return "This is EJB 3.0 Bean 2";
}
修改类定义以实现 Bean30Remote2.
现在,该类应如下所示:
并且,目录结构应如下所示:
修改
ApplicationClientForTest
接下来,我们将修改应用程序客户机的
Main 类中的查找代码。
在“项目”窗口中中,双击
ApplicationClientForTest
的 main.java
类在源编辑器中打开它。
修改 main
方法中的代码以查找第二个接口。在本例中,如果存在一个以上的远程接口时,我们必须使用全称查找每个接口。
public static void main(String[] args) throws NamingException {
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30#ejb.Bean30Remote");
System.err.println("EJB message is:" + br.getResult());
Bean30Remote2 br2 = (Bean30Remote2) ctx.lookup("Bean30#ejb.Bean30Remote2");
System.err.println("EJB message 2 is:" + br2.getResult2());
修复导入,为
ejb.Bean30Remote2
添加一个导入语句
保存更改。
现在,取消部署 EJBModule30
并运行应用程序客户机。在“输出”窗口中,您将看到以下输出:
EJB
message is: This is EJB 3.0 Bean
EJB message 2 is: This is EJB 3.0
Bean 2
结束语
在本练习中,我们介绍了如何使用应用程序客户机访问EJB
3.0 Enterprise JavaBeans,以及如何通过企业应用程序中的应用程序和独立应用程序客户机访问
EJB。此外,我们还演示了调用具有一个远程接口
bean
和具有一个以上远程接口 bean
的区别。
使用独立应用程序客户机访问 EJB(EJB
2.1)
如果您希望使用 EJB
2.X beans,它的流程非常相似,但并不完全相同。在本练习中,我们将介绍访问
EJB 2.x beans
与访问 EJB
3.0 beans 有何不同。
创建 EJB
模块 EJBModule14
首先,创建 EJB
模块
从主菜单选择“文件”>“新建项目”选项。
在“企业”类别中选择“EJB
模块”选项并单击“下一步”按钮。
键入
EJBModule14
作为项目名称,并设置项目位置。
取消选中“使用指定文件夹”选项。单击“下一步”按钮。
确保 EJB
模块未添加到企业应用程序中。
将服务器设置为
GlassFish,并将
Java EE 版本设置为
J2EE 1.4。
单击“完成”按钮。
在 EJBModule14
中创建会话 Bean
现在,我们将在
EJB 模块中创建
Bean14
EJB bean。要创建Bean14,请执行以下操作:
右键单击“项目”窗口中的“EJB
模块”,然后选择“新建”>“其他”打开“新建文件”向导。
从“企业”类别中选择“会话
Bean”,然后单击“下一步”按钮。
键入 Bean14
作为类名,键入 ejb
作为包名,保留“会话类型”为“无状态”并选择“远程”创建五个远程接口。单击“完成”按钮。
单击“完成”按钮时,bean
类 Bean14Bean.java
将在源编辑器中打开。
在源编辑器中右键单击源代码,从弹出菜单中选择“EJB
方法”>“添加业务方法”,打开“添加业务方法”对话框。
在“添加业务方法”对话框中,键入
getResult
作为业务方法名称,将“返回类型”设置为“字符串”,然后选择“远程”作为接口类型。单击“确定”按钮。
修改 Bean14Bean.java
中的 getResult
方法,让返回方法访问其他组件中的
bean:
public String getResult() {
return "This is EJB 1.4 Bean";
}
保存更改。
通过应用程序客户机调用 EJB
现在,我们将 EJBModule14
项目作为库添加到
ApplicationClientForTest
中,并添加访问 Bean14
的代码。
展开“项目”窗口中的
ApplicationClientForTest
项目节点,右键单击“库”节点并选择“添加项目”。
在“添加项目”对话框中,找到并选择
EJBModule14
项目,然后单击“添加项目 JAR
文件”按钮。
EJBModule14
的 JAR
文件将被添加到
ApplicationClientForTest
的库中。通过在“项目”窗口中展开项目的“库”节点,您可以看到项目库。
双击“项目”窗口中的
Main.java,在源编辑器中打开它。
在源编辑器中,移除或注释掉用于访问 EJBModule30
的代码,并将以下代码添加到 Main.java
的 main
方法中:
public static void main(String[] args) throws NamingException {
InitialContext ctx = new InitialContext();
Object remote = ctx.lookup("ejb/Bean14Bean");
Bean14RemoteHome sbrh = (Bean14RemoteHome) PortableRemoteObject.narrow(remote, Bean14RemoteHome.class);
Bean14Remote sbr = sbrh.create();
System.err.println("EJB 1.4 result:" + sbr.getResult());
修复导入语句。
修复源代码中的错误。出现错误的原因是方法需要
throws
子句处理查找时的 NamingException、CreateException
和 RemoteException。您可以使用
IDE
建议功能帮助解决错误。
现在万事俱备,可将 EJBModule14
和 ApplicationClientForTest
部署到服务器上(右键单击项目并选择“取消部署和部署”),然后运行客户机。运行客户机时,应该能在“输出”窗口中看到以下消息:
EJB
1.4 result: This is EJB 1.4 Bean
将反馈发送给我们
未来计划
有关使用 NetBeans
IDE 开发 Java
EE 应用程序的更多信息,请参阅以下资源:
更多关于使用 EJB
3.0 Enterprise Beans 的信息可在
Java
EE 5 教程
中找到。
要发送评论和建议、获取帮助,以及了解最新的
NetBeans
IDE Java EE 开发特性,请 加入
nbj2ee 邮件列表。