CMP2.0 relationships问题:

xietangz 2002-04-27 11:15:46
CMP2.0 relationships问题:

问题1:
custormer bean,address bean relationship 为1:n

在customer entity bean中创建customer bean与address bean 的关系代码如下:

public abstract Collection getAddresses();
public abstract void setAddresses(Collection addresses);

问:
1.getAddresses()反回的是什么!addresses bean 实例,addresses bean object,addresses remote interface or ...
也就是说 parameter "addresses" 表示的是什么??
2.customer bean 通过上面的代码及ejb-jar描述文件来表示customer bean 和address的1:n关系,那么bean发布后后台数
据库表的关系如何建立,customer bean 和address bean 如何关联?
如下是我的测试:
数据库 oracle8i 发布后自动建立的表关系如下:
customer bean ------ CustomerBeanTable(customerID,firstname,lastname)
addresses bean ------ AddressBeanTable(addressID,city,state,street,zip)
relationship table ----- CustomerBean_addresses_Addre(_AddressBean_addressID,_CustomerBean_customerID)
假如customer bean 是通过customerID和firstname两个域和address bean 关联,customer bean 中关联的代码如何写,
后台库的表又会如何创新呢?


问题2:
一个用户,添加多个地址的过程如下:
1.create address bean(向后台表中添加数据)
//code in address bean
public String ejbCreate (
String cid,
String id,
String street,
String city,
String zip,
String state)
throws CreateException {
return create (id, street, city, zip, state);
}

private String create(
String id,
String street,
String city,
String zip,
String state)
throws CreateException {
setAddressID(id);
setStreet(street);
setCity(city);
setZip(zip);
setState(state);
return id;
}

2.解决customer bean 和 address bean 的关系

//紧接上面代码
public void ejbPostCreate (
String cid,
String id,
String street,
String city,
String zip,
String state)
throws CreateException {
postCreate(cid);
}

private void postCreate (String cid) {
try {
Context ic = new InitialContext();
LocalCustomerHome home = (LocalCustomerHome)
ic.lookup("java:comp/env/ejb/CustomerRef");
LocalCustomer customer = home.findByPrimaryKey(cid);
customer.addAddress((LocalAddress)context.getEJBLocalObject());
} catch (Exception ex) {
context.setRollbackOnly();
ex.printStackTrace();
}
}


//customer bean addAddress()

public void addAddress (LocalAddress address) {
getAddresses().add(address);
}

//customer bean getAddresses()

public abstract Collection getAddresses();

上面代码中不明白的地方如下:
通过下面代码,customer bean 和 address bean 关联(向CustomerBean_addresses_Addre表中加入相应的customerID,addressID)
public void addAddress (LocalAddress address) {
getAddresses().add(address);
}

那么这段代码是如何运行的呢?如何神气的在表CustomerBean_addresses_Addre中加入相应的customerID,addressID。
传入的参数address代表了什么?
getAddresses().add(address)是如何运作的呢!是什么意思???


问题3:
如果一个表有100多个字段,是不是都需要持久化,如果一部分字段不持久化,可以吗?如何访问它!

问题4:
可以用j2ee,ejb(cmp)来开发象oracle applicaiton 11i一样的应用吗?

问题5:
客户端如果是application,那么vb,pb等开发的客户端程序如何调用bean??











...全文
56 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xietangz 2002-04-27
  • 打赏
  • 举报
回复

ArrowGe(科南):
thank you!

看了很久的cmp很多东西一直不是很理解!
相对来说bmp还容易些!
但我认为对j2ee来说真正要开发服务器端的组件cmp要好一些?
但container在ejb发布及运行时是如何运行的理解起来很困难!

谢谢您的鼓励!
ArrowGe 2002-04-27
  • 打赏
  • 举报
回复
问题1:
getAddress()返回的是实现了Collection接口的一个对象,引用类型是Collection接口类型,你可以用Collection 引用中的iterator方法返回一个Iterator对象,然后用
while(it.hasnext()){
XXXRemote xx=(XXXRemote) it.next();
}
next()返回的是EJBObject,你可以强制转换成Remote接口类型。
setAddress(Collection address)中的address参数,也是你要用Collection包装好的,可以用Collection中的add()方法加入你的AddressEJB
然后传给setAddress()方法

2、用CMP的时候,除了要配置ejb-jar.xml外,还要配置和中间件相关的CMP配置文件,比如在weblogic里面就是weblogic-cmp-rdbms-jar.xml。在这个文件中你要声明cmp中的每个field对应相应数据库表中的字段。
对于1:n是怎么实现的,在中间件相关的配置文件中有很多种声明方式,最简单的就是你在address表中加一个customId字段,然后声明
<cmr-field>customId</cmr-field>

我这只是给出了一个解决问题的道路,要具体解决你的问题,还要查阅很多文档,要具体问题具体分析。CMP还是很好用的。
加油!

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧