Я создал демонстрационное приложение, используя JSF & EJB 3.0 (сессионный компонент без сохранения состояния и JPA), мой поставщик персистентности - Hibernate 4, а база данных - Apache Derby.
Мой поток классов, т.е. последовательный поток выглядит следующим образом:
ManagedBean вызывает компонент без сохранения состояния, в этом у нас есть вызовы JPA,
пожалуйста, следуйте коду,
управляемый компонент JSF StudentMgBean.java,
@ManagedBean(name="stMgBean")
@ViewScoped
public class StudentMgBean implements Serializable{
private static final long serialVersionUID = 109117543434170143L;
...........
@EJB
private StudentService studentService;
.........
@PostConstruct
public void init(){
..........
........
this.totalStudentInDB = studentService.getMaxStudent();
}
}
Мой интерфейс EJB StudentService.java,
@Local
public interface StudentService {
List<StudentVO> fetchStudentListOrderByStudentId(boolean flag);
List<StudentVO> fetchStudentListOrderByStudentName(boolean flag);
void saveStudentEntity(StudentEntity studentEntity,Integer deptId) throws Exception;
List<DeptEntity> fetchAllDept();
List<StudentVO> fetchStudentByDept(Integer deptId);
void saveAllStudents(List<StudentVO> students) throws Exception;
void deleteAllStudents(List<StudentVO> students) throws Exception;
List<StudentVO> fetchStudentListPerPage(Integer minRow,Integer maxRow) throws Exception;
Integer getMaxStudent() throws Exception;
}
Мой EJB-компонент без сохранения состояния StudentServiceBean.java,
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class StudentServiceBean implements StudentService{
@PersistenceContext(unitName="forPractise")
private EntityManager entityMgr;
@Resource
private SessionContext sessionContext;
@EJB
private DeptService deptService;
@Override
public List<StudentVO> fetchStudentListOrderByStudentId(boolean flag){
.........
}
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void saveStudentEntity(StudentEntity studentEntity,Integer deptId) throws Exception{
........
}
}
В StudentServiceBean я ввел EntityManager, поэтому я непосредственно выполняю операции JPA в методах, написанных в этом сессионном компоненте.
Нет, мой вопрос: могу ли я использовать любой шаблон проектирования в этом потоке, могу ли я перейти на отдельный уровень DAO,
так как я использую EJB 3.0, мне не нужно использовать шаблон ServiceLocator, но я могу использовать любой другой шаблон для разделения логики Bussiness с помощью вызова JPA,
Еще одна вещь,
В управляемом JSF Бине у меня есть свойства и его методы установки геттеров, которые сопоставляются с компонентами JSP в EL следующим образом.
Значение = {stMgBean.studentList}
но в том же управляемом компоненте у меня также есть метод, который будет вызываться вызовом команды действия из JSF,
должен ли этот метод быть написан в отдельном управляемом компоненте?
Пожалуйста, предложите шаблон проектирования, который можно использовать для проектов с JSF 2.0, EJB 3.0 и JPA
Ожидание ответа