分享
 
 
 

新手指南 J2EE专家起步图解2

王朝java/jsp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

二、 开发第一个EJB

EJB2.0规范中定义了3种企业Bean。分别为会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message Driven Bean)。会话Bean模拟一个商务过程;实体Bean模拟商务数据;而消息驱动Bean与会话Bean类似也是在模拟一个商务过程,但消息驱动Bean只接受消息的调用。

本文着重介绍如何快速开发一个实体Bean。因为会话Bean相对简单,在理解了实体Bean后,自己很容易就能编写出来。而消息驱动Bean在用到的时候学也不迟。

1. Eclipse中,运行"file"-> "new"-> "project"选择Lomboz J2EE Project。在project name中填入我们的工程名"EJBTest"。点击next后,会出现java setting的对话框,我们不做任何修改,直接next。在这一步,我们将建立一个EJB的模块。如图九所示,在ejb Module选项卡中,我们新建一个名为myEJB的EJB Module。

(图九)

然后在Targent Server中,选择我们刚刚配置好的Jboss3.2.x。add以后再选择finish,我们工程就建立好了。

2. 现在用Lomboz的向导来生成我们EJB,选择"file"-> "new"->"Lomboz EJB Creation Wizard"。如图十所示:

(图十)

在package 中填入包名,比如"Rip.ejb.cmp";在name中,我们给这个EJB起个名字,比如"mytest"。Select EJB Type选项里,选择"Container Managed Entity EJB",表明要创建一个由容器管理的实体EJB。如图十一所示

(图十一)

这一步中我们要声明数据表名称,数据源名称,以及表中各个字段。参照图十二:

将各项内容填入相应的地方。注意,每添加一个字段都要点击add一次,将其放入下方的已加入的字段列表中。最后选中id这一字段,点击Make Primary Key,将其标记为主健。其中,table name项对应着我们先前在mySQL中建立的数据表myejb;datasource对应着我们在jBoss中设定的数据源mytest-ds.xml。

点击finish后,就可以在左侧src目录下Rip.ejb.cmp包中找到并打开我们刚刚生成的mytestBean.java(mytest后的Bean是Lomboz自动添加的)文件。找到ejbCreate()方法,添加两个字符串型的输入变量"id"和"context,并添加两个方法setId(id)和setContext(context),具体实现如图十三:

(图十三)点击放大

如果更改过程中出现载入包或者捕捉异常的错误,单击错误符号,选择载入或直接抛出异常即可。

这个新建立的EJB需要被放入一个模块中才可以被装载、执行。如图十四所示:

(图十四)点击放大

右健点击mytestBean.java,选择lombozJ2EE...->AddEJBtoModule,再在刚才建立的myEJB这个模块前打勾,点击ok后,便实现了装载。一个完整的实体EJB是由多个不同功用的文件组合起来的,但这里它们由加了标签的mytestBean.java自动生成。所使用的是XDoclet技术,感兴趣的读者可以到网上去搜索一下,有很多的相关介绍,我们就不再介绍具体细节了。如图十五所示:右健点击myEJB这个模块,选择lombozJ2EE...->GenerateEJBClasses。

(图十五)点击放大

显示成功之后,在ejbsrc目录下的Rip.ejb.cmp包中,你就可以看到mytestHome.java等六个文件。在mytest这个模块下面的META-INF文件夹中,有许多xml文件。其中,jboss.xml、jbosscmp-jdbc.xml和ejb-jar.xml是部署EJB最关键的三个配置文件。而我们现阶段需要更改的只是jbosscmp-dbc.xml这个文件,它描述了对数据源的描述,其他的文件都已经由lomboz配置好了。我们将这个文件的相关部分修改为:

<jbosscmp-jdbc>

<enterprise-beans>

<defaults>

<datasource>java:/mytestDS</datasource>

<datasource-mapping>mySQL</datasource-mapping>

<preferred-relation-mapping>foreign-key</preferred-relation-mapping>

</defaults>

<enterprise-beans>

其他部分不做改变。至此,我们完成了所有的EJB开发工作。右健点击myEJB这个模块,选择lombozJ2EE...->DeployModule将这个模块装载到服务器中。然后,选择lombozJ2EE...->DebugServer运行服务器。万事俱备,只欠调用!

三、 EJB的调用-使用JSP显示数据

现在我们将使用JSP作为业务层和表示层来调用EJB,将一些数据存储到数据库中,并把数据库里已有的数据全部打印到客户端的浏览器上。

1. 如上文介绍过的,我们再建立一个名为"myEJB"的Web模块。targetServer还是选择我们配置好的Jboss3.2.x,确定后将生成一个myWeb的目录。

2. 打开myWeb的目录,将以下的代码替换掉index.jsp的原有代码。

<%@ page import="javax.ejb.*"%>

<%@ page import="javax.naming.*"%>

<%@ page import="javax.ejb.*"%>

<%@ page import="Rip.ejb.cmp.*"%>

<%@ page import="java.util.*"%>

<%@ page import="java.rmi.RemoteException"%>

<html>

<head>

<title>Welcome Every body,This is my firstEJB for qiqi</title>

</head>

<body>

<center><%

/*初始化系统的上下文,并查找jidi名为mytestBean的实体Bean*/

InitialContext Context = new InitialContext(System.getProperties());

mytestHome Home = (mytestHome) Context.lookup("mytestBean");

try {

/*调用EJB的Create()方法在在数据库中生成数据,如果你不需要调用EJB时在底层数据库中产生数据,则不需要调用Create()方法*/

mytest myBean = Home.create("18","Hello,I am Rip");

/*根据前面的定义,findAll()方法将返回myejb表中的所有数据;如果你想使用不同的find方法,比如要返回id<5的数据,你可以编写自己的finder方法。*/

Collection col = Home.findAll();

String outString = "";

/*使用循环的方式遍历所有的数据,并把它们打印出来*/

Iterator it = col.iterator();

while(it.hasNext()){

mytest element =(mytest)it.next();

outString = element.getId()+":"+element.getContext()+"<br>";

out.println(outString);

}

/*捕捉并抛出给中异常*/

} catch (RemoteException e) {

e.printStackTrace();

} catch (CreateException e) {

e.printStackTrace();

} catch (FinderException e){

e.printStackTrace();

}

%></center>

</body>

</html>

3. 右健点击myWEB这个模块,选择lombozJ2EE...->DeployModule将这个WEB模块装载到服务器中。

4. 打开浏览器,在地址栏中输入"http://localhost:8080/myWEB/index.jsp"。如果一切顺利的话,将可以看到如同图十六的页面输出。

(图十六)点击放大

至此,我们就结束了这次对J2EE的入门学习。

四、 结束语

全文来看,真正在EJB开发上面花的功夫比较少,仅仅几行代码而已,所以EJB很适合应用系统的快速开发。可是,EJB从诞生以来就是一项重量级的应用,尤其是使用远程调用(为了说明问题,本文使用的就是这种方法),大量的使用了系统的资源。所以在一般情况下,使用本地接口可以大大的减少对资源的使用。或者,你还可以使用其他O-R映射组件,比如说Hibernate等等。

由于篇幅有限,笔者不可能将所有可能出现的错误和解决办法一一列举出来,如有任何意见或问题,请发送email到我的邮箱kknd0669@sina.com。

上一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有