데모 애플리케이션을 만들었습니다. JSF & EJB 3.0 (Stateless session bean 및 JPA)을 사용하여 데모 애플리케이션을 만들었고, 내 지속성 공급자는 Hibernate 4이고 데이터베이스는 Apache Derby입니다. JSF, EJB 3.0을 사용하는 애플리케이션을위한 디자인 패턴을 제안합니다.
코드를 따르십시오
, 은 JSF가 빈 StudentMgBean.java 관리ManagedBean은이에 우리는 JPA의 통화를, 무 상태 세션 빈을 호출
, 즉 순차적 인 흐름은 다음과 같다내 클래스의 흐름,
@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 stateless 세션 빈 StudentServiceBean.java의 StudentServiceBean에서
@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{
........
}
}
, 내가 EntityManager를 주입, 그래서 내가 직접 세션 빈 작성 방법에 JPA 작업을한다.
가 아니, 난이 흐름에 어떤 디자인 패턴을 사용할 수 있습니다 내 질문에, 내가 EJB 3.0을 사용하고 같은 내가 ServiceLocator 패턴을 사용하지 않아도 별도의 DAO 층에 갈 수 있지만, 다른 패턴!보다 수 나는 JPA 호출로
한 가지 더, JSF에서 는 콩 나는 특성이 값 = {stMgBean.studentList처럼 EL에서 JSP의 componenets에 매핑되는 자사 게터의 setter 메소드를 가지고 관리를 bussiness 로직을 분리해서하는 데 사용 }
동일한 관리되는 bean에서 JSF의 액션 명령 호출에 의해 invocked 될 메소드가 있습니다. 이러한 메소드를 별도의 Managed Bean으로 작성해야합니까?
응답을 기다리는 JSF 2.0, EJB 3.0 및 JPA
이 프로젝트에 사용할 수있는 디자인 패턴을 제안하십시오
여러 다른 지속성 공급자가없는 경우 DAO를 사용하지 마십시오. 이것은 아키텍처를 지나치게 복잡하게 만듭니다. –
OK,하지만 클래스 플로우의 큰 세트는 큰 프로젝트를 위해 충분합니까? 아니면 getter와 setter에 매핑 된 속성에 대한 별도의 클래스, Bussiness 레이어의 클래스 계층 구조가되어야합니다. 나는 응답을 기다리는 EJB를 사용했다. –
컨트롤러 내부에 로직없이 데이터를 전송하는 컨트롤러 (ui 로직을 실행하고 비즈니스 레이어를 호출)와 엔티티 (jpa @Entities)의 두 가지 유형의 관리 빈이 있어야한다. 비즈니스 계층에는 계층 구조가 필요하지 않습니다. 재사용 할 항목이 있으면 별도의 구성 요소로 이동하여 여러 위치에서 사용할 수 있습니다. –