




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实体Bean教程教程实例环境nJbuilder 7 for WeicnBorland JDataStorenWeic7.01n一台速度比较快的电脑512M内存,赛羊1G)实体的作用n实体Bean是用来代表数据的。nSession Bean可以经过JDBC直接存取数据库。为什么还要多加一层实体bean呢?nJDBC直接存取:n各种数据库操作方法不同,不利移植n各种数据库事务、平安方法不同n假设能一致处置事务、平安岂不更好?实体Bean的位置DatabaseEntity BeanSessionBeanOther Clients实体实体bean添加了一个添加了一个中间层。客户不直接中间层。客户不直接
2、存取数据库,而是由存取数据库,而是由容器存取,从而获得容器存取,从而获得容易运用的平安和事务容易运用的平安和事务,并且跨平台易移植。,并且跨平台易移植。实体Bean和数据库表的关系IdNamebalance0001ZengHai-3000000002TengGang-200000数据表id0001/0002Namebalance某个实体Bean实体Bean和数据库之间的同步Entity beanDBloadstore数据库和bean同步由容器自动完成!容器容器ejbLoad(自动调ejbStore(自动调)实体bean的生成流程HomeremoteEntity Bean Instancedat
3、abaseContainerclient1 create2 ejbCreate3 取数据4前往前往pk值值5 EJBObject6前往前往 EJBObject制造一个实践的BMPn义务:帐号管理,提款,存款,查余额第一部份: 远程接口第二部份:Home接口AccountHome.java用于创建对象用于创建对象Interface AccountHome extends EJBHomeAccount create(帐号,用户名帐号,用户名)Account findByPrimaryKey(AccountPK key)Collection findByOwnerName(用户名用户名)第三部份:主
4、键类n主键类提供某bean的独一标识nAccountPk.javanPublic class AccountPK implements .nString idn构造方法+toString()+hashCode()+equals(Object ob)方法。第四部份:中心逻辑类nAccountBean.javan中心类分:n1 数据域部份n2 业务方法详细实现(在remote里指明)n3 容器自动调用方法实现n4 查找方法的实现(在Home里有的)4.1数据域部份nPublic EntityContext ctx;nPublic String id;nPublic string name;nPub
5、lic double balance;4.2业务方法部份nPublic void deposit(double amt)n balance+=amtnPublic void withdraw()nBalance-=amt;n大家看到,bean的业务方法不直接写数据库,写是由ejbLoad/Store自动进展的4.3容器自动调用的方法。nejbLoad()nAccountPk pk= ctx.getPrimaryKey();n“Select id,name,balance from xxx where id = pk.getid();nId=rs.getString(“id)nName=rs.g
6、etString(“name);nBalance=rs.getDouble(“balance);4.3nejbLoad中用户需求做以下事情:n运用jdbc直接翻开数据表n用select语句取出所需求的记录n将记录装入当前bean。n封锁数据库衔接4.3nejbStoren“Update xxx set name=? Balance= ? Where id=?n其中的id当然也是从pk中得到的。也就是把指定pk的记录写库4.3nsetEntityContext(EntityContext ctx)nThis.ctx=ctx;n从容器获得本bean的上下文,然后从外面调用内部方法而获得容器的平安性
7、4.3 nejbRemoven只需用delete 方法把主键相应的记录直接删除就行了。用户翻开衔接,执行delete,然后前往4.3nejbCreate(id,name)nn衔接数据表,运用insert语句插入数据库一条记录。n前往一个新的 pk值nnPublic AccountPk ejbFindByPrimaryKeyn直接运用select 语句前往值。nPublic Collection ejbFindByOwnerName(name)n直接运用vector前往pk的集合EJB字段:和数据库中字段对应业务方法deposit等,操作ejb字段,不直接存取DBejbRemove-用户调用,实
8、践上是delete数据ejbLoad容器调用,实践上是select数据装入beanejbStore容器调用,实践上是update数据更新ejbCreate,用户调用,向表中新插入数据insertejbFindBy方法,用户调用,select前往pk客户端nPublic class clientn Context ctx = new InitialContext(.)nObject obj=ctx.lookup(“AccountHome);nAccountHome home=(AccountHome) PortableRemoteObject.narrow(obj,AccountHome.cla
9、ss)nAccount= Home.create(“0001,zenghai);nAccount.getPrimarykeynAccount.getBalance,withdraw,remove部署客户端n略,差不多的。n BEAN阐明是bmpn .AccountPkn falseBMP的特性:n在用户和数据间加了一个中间层n用户看到某个bean,操作这个bean等于操作数据库,且平安可靠。n这个bean就是一个bmp的bean。实践的数据库操作由用户编写,容器调用。特别是ejbCreate,ejbRemove,ejbLoad,ejbStore。n比较烦人啊。CMP更简单笼统的实体bean本节
10、操作义务:n创建一个实体bean,它代表一个雇员数据表。n再创建一个会话bean,它调用这个实体bean,向实体bean要数据。n再创建一个客户端,它调用这个会话bean,从而显示雇员表中的某个数据。Step1预备任务nJbuilder7和weic预备好。Jbuider7必需曾经装好JDataStore。假设没有就用access,比较费事些。n启动jbuilder7,新建工程,比如叫eejb。然后在里面新建一个ejb模块。比如叫testEntModStep2 从外部倒入数据库n点击左侧窗口的testEntMod结点,在右窗口下选择ejbDesigner图形化编缉器。n在空白处右击,选择impo
11、rt schema from databasenDriver在下拉中选择com.borland.datastore.jdbc.DataStoreDrivernUrl选择local的,全称是jdbc:borland:dslocal:D:JBuilder7samplesJDataStoredatastoresemployee.jdsn用户名密码本人选,要记牢,等会用nJndi名字要记牢,等会用Step3 创建cmpn点击确定,jbuilder左下角出现DataSource窗口,里面有一堆的数据表,如今点中Employee,然后右击。n选择create cmp entity bean 2.0n等一会
12、儿,右边窗口出现图形化的CMP,n创建胜利。请察看这个bean。Step4 建立相应会话Beann在设计器上右键,选择sessionBean,把这个sessionBean起名为EmployeeSes。n再加一个方法名字叫getEmpName,前往String,带个参数是Short empNo。Step5 参与代码,在session中存取entity beannString empName = name not found;ntry njavax.naming.Context context = new javax.naming.InitialContext();nObject object =
13、 context.lookup(java:comp/env/ejb/Employee);nEmployeeHome empHome = (EmployeeHome) njavax.rmi.PortableRemoteObject.narrow(object,EmployeeHome.class);nEmployee emp = empHome.findByPrimaryKey(empNo);nempName = emp.getFirstName() + + emp.getLastName();nnreturn empName;Step6 在Sessionbean中参与对entitybean的援
14、用n双击左侧的EmployeeSes这个bean,在右窗口下面选择ejb Local Reference,选择add,新加一个援用。援用的名字取成ejb/Employee。假设不这么写,前面getEmpName方法就会出错。Step7 创建客户端测试程序n为EmployeeSes建立一个客户端。n建立后请先改动Main方法为:nEmployeeSesTestClient client = new EmployeeSesTestClient();ntry nclient.create();nString empName = client.getEmpName(new Short(2);nSyst
15、em.out.println(Employee Name from the Test Client is = + empName);nncatch (Exception ex) nex.printStackTrace();nStep8启动相应效力器n在工程运转属性里加两个配置nServer配置运转weicnClient配置运转客户端程序TestClientn在jbuilder里启动weicStep9 配置数据源的缓冲池n进7001/console的weic控制台n选择service的jdbc,配新的jdbc poolnUrl就是一开场的jdbc:borland:dslocal:D:JBuild
16、er7samplesJDataStoredatastoresemployee.jdsnDriver就是com.borland.datastore.jdbc.DataStoreDriverStep9 配置数据源的缓冲池n在properties里输入nUser=testnPassword=test。n这段和您开场import时候的选择对应。n点击applyStep 10调理缓冲性能n进旁边的connectionn初始设成2,最大设成5,添加设成1n启动jdatastore效力器n进旁边的targets,选择myserver到右边,点击apply。Step11 应对不测情况n上节apply必然失败,
17、由于jdatastore没有在weic里配置好。回到jbuilder。n在configserver里,在配置lib 里,weic启动时加上类库nD:/JBuilder7/lib/jdsserver.jarn重新启动weic,可以配置pool胜利。Step 12配置支持事务的数据源n进jdbc的txDataSourcen新建数据源,名字是demoDataSource。这个名字必需和import时起的jndiName一样,否那么等着出错。nPool名就是他刚建的pool,比如demoPooln在target里把它运用到效力器上。Step13测试数据源n回jbuilder,关掉weicn重新启动we
18、ic,控制台上没错的话n就okay。n有错就trouble shootingStep 14运转客户端n天哪。终于运转出来了!n看看输出的结果是什么?n想想调用的过程?CMPnBMP的特点:n 虽然ejbLoad,ejbStore是由容器自动调用的,但是一个实体bean怎样和数据库打交道还是需求“硬编码。nSelect update insert delete实践上都得写上。nBMP的东西实践上还是和详细数据库相关的。引入CMP的思索nBmp编码中,逻辑和耐久化表示混合nCmp试图分别逻辑和耐久化表示。n结论:n 在实体bean类中,不写任何的jdbc详细语句。详细存取数据库代码由容器替您生成好
19、。CMP图示实体bean超类,包含数据逻辑,本人写一个子类,由容器生成,实现详细的存取代码CMP的bean不包含字段定义n没有诸如String id,String Name之类的。这些东西在子类里由容器产生。n不包含字段的缘由是容器能够会外加一些辅助的字段,您并不需求关怀这些。一个bmp的类能够是这样的nClass xxx n public String idn public String getId()n return idnn在cmp中,get/set代码由容器生成。在父类里,不需求硬编码,定义个abstract类就可以了。Abstract的父类public abstract class
20、CartBean implements EntityBean public abstract float getXXX(); public abstract float getXXXX(); public float getTotal() return this.getXXX()+this.getXXXX()/这里也可以有abstract的set方法。实践代码从何而来?n类里用abstract方法描画set/getn实践代码由容器生成,容器怎样生成?n由您用部署文件进展描画n2.xn AccountBeann Idn id 解释部署文件n部署文件阐明了abstract的类和数据库字段的对应关系
21、。n每个cmp-field域就是耐久化域,每个域都要在子类中生成get/set方法,所以域名必需和get/set一致。nAbstract void setName()那么cmp-field就应该是name。这样容器就知道对应关系了Cmp中,查询怎样办?nSet/get方法由容器处置。自动调select/update方法,我们看不到。n查找方法怎样办?比如bmp中的nfindBigAccounts()。容器不能够知道bigAccounts的详细逻辑。这样您就不得不再写详细jdbc代码,回到bmp的老路上。处理方法:参与中间言语。n运用中间的,平台无关的EJB-QL言语,从而完成查询的通用性。nS
22、elect OBJECT(a) from Account as a where a.Id IS NOT NULLnSELECT OBJECT(a) FROM Account AS a WHERE a.balance?1开发者要做些什么?n构建CMP实体bean,设计abstract的耐久化模型,编写EJB-QL语句。n部署者:n设计数据库映射,运用容器工具编程,生成子类及编码。Cmp构造实例n概述:n一个产品的实体bean,包括Name,description,basePrice productId等字段nCMP的实体beanCmp的远程接口ProductnPublic interface P
23、roduct extends EJBObjectnPublic String getName()/setName()/getDescription/set/getBasePrice()/set/getProductId()nn用户看得到的一系列get/set 方法。Home接口ProductHome.javanHome接口只让远程客户程序运用接口只让远程客户程序运用nPublic interface ProductHome extends EJBHomen Product create(String productID)nPublic findByPrimaryKey/findByName/findByDescription.n这些这些find方法可以用方法可以用EJB-QL实现,或者由容实现,或者由容器工具来实现器工具来实现主键类ProductPk.javan提供独一的关键字nPublic class ProductPk implements java.io.Serializablen public String ID;nPublic ProductPK(St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025标准门面房租赁合同范本
- 2025年代理记账合同正式签订新政策助力企业发展
- 2025房屋租赁代理合同书样本
- 2025果园承包经营合同协议书
- 2025店铺租赁合同模板「详细版」
- 2025房产买卖合同补充协议
- 2025南昌市建筑材料买卖合同范本
- 2025农田租赁合同书样本
- 2025最权威的工程承包合同模板
- 2025违反商品房买卖合同的法律责任
- 创新物业服务管理的思路与方法
- 上市公司涉税风险分析报告
- 少数民族维吾尔族民俗文化介绍图文课件
- 引导接车监控装置操作办法
- 《中国马克思主义与当代》部分课后题-参考答案
- 读书分享交流会《外婆的道歉信》课件
- 科技论文写作与学术规范课件
- 医疗器械自查表【模板】
- 2023学年完整公开课版《2BM3U2Rules》教学
- 曼陀罗绘画疗法
- 四年级下册英语素材单元知识点总结 陕旅版
评论
0/150
提交评论