In EJB 2.0, CMP and BMP entity beans can
declare home methods
that perform operations related to the
EJB component but that are not specific to an entity bean instance. A
home method must have a matching implementation in the bean class
with the signature
ejbHome<
METHOD-NAME
>()
.
For example, the Cruise EJB might define a home method that calculates the total revenue in bookings for a specific Cruise:
public interface CruiseHomeLocal extends javax.ejb.EJBLocalHome {
public CruiseLocal create(String name, ShipLocal ship);
public double totalReservationRevenue(CruiseLocal cruise);
}
Every method in the home interfaces must have a corresponding
ejbHome<
METHOD-NAME
>()
in the bean class. For example, the CruiseBean
class would have an
ejbHomeTotalReservationRevenue()
method, as shown
in the following code:
public abstract class CruiseBean implements javax.ejb.EntityBean { public Integer ejbCreate(String name, ShipLocal ship) { setName(name); } ... public double ejbHomeTotalReservationRevenue(CruiseLocal cruise) { Set reservations = ejbSelectReservations(cruise); Iterator enum = reservations.iterator(); double total = 0; while(enum.hasNext()) { ReservationLocal res = (ReservationLocal)enum.next(); total += res.getAmount(); } return total; } public abstract ejbSelectReservations(CruiseLocal cruise); ... }
The ejbHome()
methods execute without an identity
within the instance pool. This is why
ejbHomeTotalReservationRevenue()
required that a
CruiseLocal
EJB object reference be passed in to
the method. This makes sense once you realize that the caller is
invoking the home method on the entity bean’s EJB home object
and not an entity bean reference directly. The EJB home (local or
remote) is not specific to any one entity instance.
The bean developer may implement home methods in both EJB 2.0 bean-managed and container-managed persistence implementations typically rely on select methods, while BMP implementations frequently use direct database access and find methods to query data and apply changes.