Abstract Methods and Relationships
Relationships are also managed through abstract accessor methods. In the case of a relationship where the
multiplicity of the associated object is many, the abstract accessor's parameter or return value type is a
collection class representing the relationship. This collection class implements the java.util.Set or
java.util.Collection interface. (A future version of the specification may add java.util.Map and
java.util.List as return types.) In the case of a relationship where the multiplicity of the collection class
is one, the abstract accessor's parameter or return value type is a single instance of the related object.
For example, consider the case where an order is related to one shipment address and multiple line
items. The relationship accessors might look like this:
public abstract Collection getLineItems();
public abstract void setLineItems(Collection lineItems);
public abstract AddressLocalEJB getShipAddress();
public abstract void setShipAddress(AddressLocalEJB shipAddress);
The collection classes used with relationship accessor methods are implemented and instantiated by the
EJB container. You can use those collection classes to modify the relationship directly. In the example
above, you could use the java.util.Collection object returned from getLineItems() to find,
add, or remove line items from the order-line item relationship. You would not need to subsequently
call the setLineItems() method. In fact, setter methods for many-valued relationships have special
semantics that will be explained in the following chapter.
Just as the container-managed state fields for an EJB 2.0 CMP entity are declared as <cmp-field>
elements in the deployment descriptor, relationship state fields are declared in the deployment
descriptor as <cmr-field> elements. These <cmr-field> declarations are made in a special section
of the deployment descriptor that contains all the relationship information. A <cmr-field> element
has a name and a description, just like a <cmp-field>. For the case where the target object
relationship has a multiplicity of many, the type of collection object (either java.util.Collection
or java.util.Set) must also be specified.
Abstract ejbSelect() Methods
Along with these abstract accessor methods for the object's persistent state and its relationships, there is
one other type of abstract method that the programmer may declare: zero or more instances of the
ejbSelect() method. These ejbSelect() methods are similar to finder methods in that they use the
EJB query language to retrieve information. However, there are two important differences:
-
First, they are never exposed to a client. They are used only in the EJB's implementation.
-
Second, they can return entities and the values of cmp fields, whereas finder methods just
return entities.
Here is an example ejbSelect() method whose behavior would be specified by a query in the
deployment descriptor:
public abstract Collection ejbSelectAllLineItems();
Stop by in one week for the next installment!
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|