Example 8.28 Implementing the Value Object Assembler public class ProjectDetailsAssembler implements javax.ejb.SessionBean { ... public ProjectDetailsData getData(String projectId){ // Construct the composite value object ProjectDetailsData pData = new ProjectDetailsData(); //get the project details; ProjectHome projectHome = ServiceLocator.getInstance().getHome( "Project", ProjectEntityHome.class); ProjectEntity project = projectHome.findByPrimaryKey(projectId); ProjectVO projVO = project.getData(); // Add Project Info to ProjectDetailsData pData.projectData = projVO; //get the project manager details; ProjectManagerHome projectManagerHome = ServiceLocator.getInstance().getHome( "ProjectManager", ProjectEntityHome.class); ProjectManagerEntity projectManager = projectManagerHome.findByPrimaryKey( projVO.managerId); ProjectManagerVO projMgrVO = projectManager.getData(); // Add ProjectManager info to ProjectDetailsData pData.projectManagerData = projMgrVO; // Get list of TaskVOs from the Project Collection projTaskList = project.getTasksList(); // construct a list of TaskResourceVOs ArrayList listOfTasks = new ArrayList(); Iterator taskIter = projTaskList.iterator(); while (taskIter.hasNext()) { TaskVO task = (TaskVO) taskIter.next(); //get the Resource details; ResourceHome resourceHome = ServiceLocator.getInstance().getHome( "Resource", ResourceEntityHome.class); ResourceEntity resource = resourceHome.findByPrimaryKey( task.assignedResourceId); ResourceVO resVO = resource.getResourceData(); // construct a new TaskResourceVO using Task // and Resource data TaskResourceVO trVO = new TaskResourceVO( task.projectId, task.taskId, task.name, task.description, task.startDate, task.endDate, resVO); // add TaskResourceVO to the list listOfTasks.add(trVO); } // add list of tasks to ProjectDetailsData pData.listOfTasks = listOfTasks; // add any other data to the value object ... // return the composite value object return pData; } ... }