Предложить шаблон проектирования для приложения с использованием JSF, EJB 3.0 - PullRequest
3 голосов
/ 28 марта 2012

Я создал демонстрационное приложение, используя 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

Ожидание ответа

1 Ответ

0 голосов
/ 30 марта 2012

Вы можете разделить слой JSF, используя следующие концепции:

  • Поместите все данные, которые будут разделены между Java-стороной и представлением, в определенные управляемые bean-компоненты, называемые "Модели". Теперь вы можете управлять областью данных независимо от области действия остальных управляемых компонентов.
  • Используйте шаблон команды, который делегирует все действия, которые изменят модель, командам. Команды могут вызывать слой EJB или просто обновлять модели, не переходя на следующий уровень.
  • Сохраняйте в управляемых компонентах только логику, необходимую для инициализации компонентов JSF в представлениях или управления их поведением, ссылку на модель и ссылку на делегатор, который предоставит команду для запуска.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...