An accepted practice for improving EJB application performance and for separating client, business, and data layers is to make use of value objects for entity beans. Value objects create a decoupled view of entity beans and also shield clients from back-end code changes. This class can represent the bean in every way and be passed back to the client for a read-only snapshot of the entity data. Creating value objects for entity beans adds one more file to the list of multiple files that developers must create for each bean. As with other generated files, XDoclet will help you maintain this file with changes as your beans change.

Use the @ejb.value-object tag for entity beans needing a value object:

 /**
 * @ejb.bean type="CMP"
 *    name="PersonBean"
 *    jndi-name="ejb/PersonBean"
 *    view-type="both"
 *
 * @ejb.value-object
 */
public abstract class PersonBean implements EntityBean {
    
    ...
   
    /**
     * @ejb.create-method
     */
    public void ejbCreate(String firstName, String lastName) {
        setFirstName(firstName);
        setLastName(lastName);
    }
    
    /**
     * @ejb.interface-method
     */
    abstract public String getFirstName();
    
    /**
     * @ejb.interface-method
     */
    abstract public void setFirstName(String firstName);
    
    /**
     * @ejb.interface-method
     */
    abstract public String getLastName();
    
    /**
     * @ejb.interface-method
     */
    abstract public void setLastName(String lastName);
    
    ...
            
}