不理解ejb规范中关于cmr的一段话

04-10-26 wwlhp@jdon
ejb2.1规范的第172页有这样一段话,

It is the responsibility of the container to throw the 
java.lang.IllegalStateException if an attempt is made to modify 
a container-managed collection corresponding to a multivalued 
cmr-field using the java.util.Collection API outside of the 
transaction context in which the collection object was initially 
materialized.

我的理解就是如果在某个事务之外修改cmr集合,容器就会抛出IllegalStateException,但具体是什么事务我就不明白了。请高手指点,谢谢!

napoleonn
2004-10-26 22:05
我的理解是这样的:

比如有一个cmr

public java.util.Collection getPhoneNumbers( );

public void addPhoneNumber(String number, String type){
  …
  PhoneLocal phone = phoneHome.create(number,type);
  Collection phoneNumbers = java.util.Vector( );
  phoneNumers.add(phone);
  // this is illegal. An exception will be thrown
  this.setPhoneNumbers(phoneNumbers);
}
<p>

不能把一个自己创建的collection赋值给cmr。只能先获得cmr collection的一个引用,然后在这个引用上面操作collection数据的修改

不知道这是不是就是contex的意思

比如要添加一个phone就是 this.getPhoneNumbers().add(phone);

这个原因是由于,

Because the Collection is implemented and tightly coupled to the vendor’s EJB container, its illegal to use application defined Collection objects in relationship fields

以上都是我引用 ejb 3rd edition里面的,不知道是不是这个意思。

猜你喜欢