EJB inheritance
The EJB deployment descriptor editor can help you define inheritance relationships between enterprise beans.
You can use the tools to define two forms of inheritance:
- Standard class inheritance
- EJB inheritance
In standard class inheritance, the home interface, remote interface, or enterprise bean class inherits properties and methods from base classes that are not themselves enterprise bean classes or interfaces. You would specify the bean superclass using the superclass field of the enterprise bean wizard.
In EJB inheritance, by comparison, an enterprise bean inherits properties (such as CMP fields and relationship roles), methods, and method-level assembly descriptor attributes from another enterprise bean that resides in the same EJB module. To assist you in defining an EJB inheritance relationship, the New Enterprise Bean wizard allows you to create a new enterprise bean that inherits from an existing enterprise bean. The EJB editor allows you to change the inheritance structure of existing enterprise beans, which updates the generated Java code.
This product supports several other ways to change the parent using the wizard available from the Inheritance section of the EJB editor:
- Move a bean class in an inheritance structure (not the root) to a different inheritance structure (change the parent).
- Add a parent to an existing bean class that is not currently in an inheritance structure. The inherited bean, and all its subtypes, will now reference the key class of its supertype. The key shape of the inherited bean will change, and as a result, methods of its bean class and remote information may change or be removed. If the old key class is no longer referenced by another Java class, it can be safely deleted.
- Remove a bean from an inheritance structure, so that it becomes a root. You specify a key class. The EJB tools will create a key for you if you chose to do so. It will have the same attributes as the bean's previous key, so the class/bean is still valid. For example, suppose that you have Employee as the parent of PTEmployee. When you move PTEmployee out, PTEmployeeKey can be created as a new key class. When you click OK, the tools preserve, reflect, and automatically generate the same fields.
Some of the characteristics of EJB inheritance are:
- For CMP entity beans, there is support for single table and root-leaf table mapping. However, large hierarchies (wide or deep) might perform poorly because of the large size of the SQL statements. Root-leaf mapping is more susceptible to this issue because of the number of joins involved in the SQL statement.
- The deployment descriptor lists all of the CMP fields for each enterprise bean, including those fields that have been inherited. Method permissions and method transactions that are defined for a supertype EJB are created for each subtype enterprise bean. This is also true for EJB references.
- When an inheritance relationship is defined between enterprise beans, all home methods that are not part of an association are copied to the child bean. The child home interface does not extend the home interface of the supertype enterprise bean in order to have specific create methods on subtypes, without having to support the supertype create methods.
- The bean class of the new child enterprise bean extends the bean class of the parent enterprise bean. No parent bean class methods are defined in the child bean class.
- The local and remote interfaces extend the remote interface of the supertype enterprise bean.
- Key classes are common to all inherited enterprise beans. In other words, the key class in the child enterprise bean is identical to the key class in the parent enterprise bean.
- You can only add to the key at the root bean.
Source page and EJB inheritance
If you are modifying CMP entity beans in an inheritance hierarchy, you should use the wizards and interface portions of the EJB deployment descriptor editor, not the Source page. For example, if you want to add or remove CMP fields or change the primary key field of a CMP bean, these fields are synchronized by the tools for all inherited beans, in order to keep the beans in compliance with the EJB specification. Such synchronization may not occur if you change the source in the Source page.