Я создал демонстрационное приложение. Использование JSF & EJB 3.0 (сеансовый компонент без состояния и JPA), мой провайдер постоянства - это Hibernate 4, а база данных - Apache Derby.Предложите шаблон дизайна для приложения с использованием JSF, EJB 3.0
Моего класс поток т.е. последовательный поток выглядит следующим образом,
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();
}
}
My EJB Interface 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 управляемых бинов я иметь свойства и его методы геттер сеттер, соотносимых с componenets JSP в EL как этот значение = {stMgBean.studentList }
но в том же управляемом bean-компоненте у меня также есть метод, который будет вызываться действием команды вызова от JSF, должен ли этот метод быть написан в отдельном управляемом компоненте?
Просьба предложить шаблон дизайна, который может быть использован для проектов, которые имеют JSF 2.0, EJB 3.0 и JPA
В ожидании ответа
Не используйте DAO, если у вас нет нескольких разных поставщиков стойкости. Это будет чрезмерно затруднять архитектуру. –
ОК, но мой набор потоков классов достаточен для большого проекта или должен разделять управляемый bean-компонент на два для методов команды действий и отдельный класс для свойств getter и setter, что должно быть иерархией классов в слое Bussiness, где Я использовал EJB, ожидая ответа –
У вас должно быть 2 типа управляемых компонентов - контроллеры (выполнить логику ui и бизнес-уровень вызова) и сущности (jpa @Entities), которые просто переносят данные без какой-либо логики внутри. В бизнес-слое нет необходимости в иерархии - если у вас есть что-то, чтобы повторно использовать перемещение в отдельном компоненте и использовать его в нескольких местах –