本教程向您介绍如何编写和部署用于访问 Enterprise JavaBean (EJB) 的简单应用程序,以及如何访问建构在 Java EE 5 平台 (EJB 3.0) 和 J2EE 1.4 平台 (EJB 2.x) 上的 EJB。
使用 NetBeans IDE 5.5, 您可以创建作为独立项目类型的应用程序客户端。您还可以创建作为企业应用程序的一部分或独立应用程序的应用程序客户端项目。本文使用 NetBeans IDE 5.5 Release。
预计持续时间:30分钟
m 访问一个远程接口
本教程假定您已经具有了以下技术的一些基本知识或编程经验:
l Java 编程
l NetBeans IDE
本教程需要在计算机上安装以下软件:
l NetBeans IDE 5.5 (下载)。
l Java Standard Development Kit (JDK) version 5.0 或version 6.0 (下载)
l Sun Java System Application Server, Platform Edition 9.0(下载)
本教程需要使用IDE注册Sun Java System Application Server的本地实例。
首先,我们创建一个名为EnterpriseAppEE5的Java EE 5企业应用程序。在我们创建企业应用程序的同时,还将创建应用程序客户端。
现在我们在EJB模块中创建SessionBean EJB bean。要创建该SessionBean,需执行以下操作:
当单击Finish时,bean类SessionBean.java在Source Editor中打开。
public String getResult() {
return "This is EJB 3.0 Bean";
}
现在我们将代码添加到用于调用EJB bean的应用程序客户端中。要修改应用程序客户端,需执行以下操作:
@EJB
private static SessionRemote sessionBean;
System.err.println("result=" + sessionBean.getResult());
现在几乎所有事情都已经完成了,我们需要做的最后一件事就是设置作为模块的应用程序客户端,它应该在您运行企业应用程序时运行。要配置企业应用程序,需执行以下操作:
现在我们可以运行企业应用程序测试应用程序客户端。
1. 右键单击Projects窗口中的EnterpriseAppEE5,然后选择Run。
当您运行项目时,IDE构建并部署应用程序。以下消息出现在Output窗口中:
result = This is EJB 3.0 Bean
在本练习中,我们创建一个EJB模块项目,然后创建与EJB连接的应用程序客户端项目。
我们不能使用EJB注释将EJB链接到应用程序客户端中,因此我们将使用上下文查找。如果您拥有一个以上的远程接口, bean查找代码是不同的,那么我们将本练习分为两部分:
在本练习中,我们创建一个具有远程接口的EJB模块,然后创建访问EJB的应用程序客户端。
在本练习中,我们创建名为EJBModule30的EJB模块。
在本练习中,我们将在EJB模块中创建Bean30 EJB。要创建Bean30,需执行以下操作:
当单击Finish时,bean类Bean30Bean.java在Source Editor中打开。
public String getResult() {
return "This is EJB 3.0 Bean";
}
@Stateless(mappedName="Bean30")
public class Bean30Bean implements Bean30Remote {
现在我们创建将访问EJB的应用程序客户端ApplicationClientForTest。
现在我们将EJBModule30项目添加到作为库的ApplicationClientForTest中,并添加访问Bean30的代码。
单击OK即可将EJBModule30的JAR文件添加到ApplicationClientForTest库中。通过在Projects窗口中展开项目的Libraries节点,您可以看到项目库。
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30");
System.err.println("EJB message is:" + br.getResult());
注:在这种情况下,错误是由遗漏的throws子句引起的。为了使用IDE的建议功能,在包含错误的代码第一行中插入光标,在其下画红线强调。当“建议灯泡”图标在左侧出现时,单击灯泡并选择 “Add throws clause...” 将throws子句添加到方法中。IDE在将throws子句添加到方法中后,添加适当的import语句。
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1027" style="WIDTH: 363.75pt; HEIGHT: 113.25pt" alt="image of using IDE suggestion feature to fix errors" type="#_x0000_t75"><imagedata o:href="http://www.netbeans.org/images/articles/appclient-throwsclause.png" src="file:///C:/DOCUME~1/fujiang/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata></shape>
8. 保存更改。
现在万事俱备,可以将EJBModule30和ApplicationClientForTest部署到服务器中了,请右键单击Projects窗口中每个项目的项目节点,并选择Deploy Project。部署完两个项目之后,右键单击Projects窗口中的ApplicationClientForTest,并选择Run Project运行应用程序客户端。在Output窗口中,我们应该看到如下所示消息:
EJB message is: This is EJB 3.0 Bean
注:如果使用防火墙,您可能需要禁用防火墙,以允许应用程序客户端访问EJB。
在本练习中,我们在EJBModule30中创建第二个远程接口。然后我们修改应用程序客户端中的代码,以便它可以访问每个接口。我们在本练习中用来调用EJB的代码与调用一个远程接口时所用代码略有不同。本练习帮助您学习如何处理从一个独立应用客户端访问两个或多个远程接口时的情况。
在本练习中,我们为Bean30 EJB创建名为Bean30Remote2的第二个远程接口。
要创建第二个接口,需执行以下操作:
当单击Finish时,bean类Bean30Remote2.java在Source Editor中打开。
@Remote
public interface Bean30Remote2 {
String getResult2();
}
5. 修改import语句。您将需要导入javax.ejb.Remote。
在本练习中,我们修改Bean30以实现接口Bean30Remote2。
public String getResult2() {
return "This is EJB 3.0 Bean 2";
}
该类现在应该看起来如下所示:
<shape id="_x0000_i1025" style="WIDTH: 449.25pt; HEIGHT: 387.75pt" alt="Bean30Bean.java source" type="#_x0000_t75"><imagedata o:href="http://www.netbeans.org/images/articles/appclient-Bean30Bean.png" src="file:///C:/DOCUME~1/fujiang/LOCALS~1/Temp/msohtml1/01/clip_image003.png"></imagedata></shape>
目录结构如下所示:
<shape id="_x0000_i1026" style="WIDTH: 165pt; HEIGHT: 163.5pt" alt="Directory structure for EJB30Module" type="#_x0000_t75"><imagedata o:href="http://www.netbeans.org/images/articles/appclient-EJBModule30snapshot.png" src="file:///C:/DOCUME~1/fujiang/LOCALS~1/Temp/msohtml1/01/clip_image005.png"></imagedata></shape>
接下来,我们修改应用程序客户端Main类中的查找代码。
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30#ejb.Bean30Remote");
System.err.println("EJB 3.0 result:" + br.getResult());
Bean30Remote2 br2 = (Bean30Remote2) ctx.lookup("Bean30#ejb.Bean30Remote2");
System.err.println("EJB 3.0 result 2:" + br2.getResult2());
现在重新部署EJBModule30,并运行应用程序客户端。在Output窗口中,您将看到以下输出:
EJB 3.0 result: This is EJB 3.0 Bean
EJB 3.0 result: This is EJB 3.0 Bean 2
在本练习中,我们为您介绍了如何使用应用程序客户端访问EJB 3.0 Enterprise JavaBeans,以及如何从企业应用程序中的应用程序和独立应用程序客户端访问EJB。此外,我们还示范了调用具有一个远程接口bean和具有一个以上远程接口bean的区别。
如果您想使用EJB 2.X beans工作,流程非常相似,但不完全相同。在本练习中,我们将为您介绍访问EJB 2.x beans与访问EJB 3.0 beans有何不同。
首先,我们创建EJB模块。
现在我们在EJB模块中创建Bean14 EJB bean。要创建Bean14,需执行以下操作:
当单击Finish时,bean类Bean14Bean.java在Source Editor中打开。
public String getResult() {
return "This is EJB 1.4 Bean";
}
现在我们将EJBModule14项目添加到ApplicationClientForTest中作为库,并添加访问Bean14的代码。
单击OK时即可将EJBModule14的JAR文件添加到ApplicationClientForTest库中。通过在Projects窗口中展开项目的Libraries节点,您可以看到项目库。
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());
现在万事俱备,可将EJBModule14和ApplicationClientForTest部署到服务器上(右键单击项目并选择Deploy Project和Run Project),然后运行客户端。当运行客户端时,我们应该在Output窗口中看到以下消息:
EJB 1.4 result: This is EJB 1.4 Bean
如需有关使用NetBeans IDE 5.5开发Java EE应用程序的更多信息,请参见以下资源:
本文英文地址:
http://www.netbeans.org/kb/articles/appclient-entappclient.html