2012-03-28 3 views
3

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

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

+0

Не используйте DAO, если у вас нет нескольких разных поставщиков стойкости. Это будет чрезмерно затруднять архитектуру. –

+0

ОК, но мой набор потоков классов достаточен для большого проекта или должен разделять управляемый bean-компонент на два для методов команды действий и отдельный класс для свойств getter и setter, что должно быть иерархией классов в слое Bussiness, где Я использовал EJB, ожидая ответа –

+0

У вас должно быть 2 типа управляемых компонентов - контроллеры (выполнить логику ui и бизнес-уровень вызова) и сущности (jpa @Entities), которые просто переносят данные без какой-либо логики внутри. В бизнес-слое нет необходимости в иерархии - если у вас есть что-то, чтобы повторно использовать перемещение в отдельном компоненте и использовать его в нескольких местах –

ответ

0

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

  • Поместите все данные, которые будут совместно использоваться стороной java и представлением в определенные управляемые компоненты, называемые «Модели». Теперь вы можете управлять объемом данных независимо от объема остальных управляемых компонентов.
  • Используйте шаблон команды, который делегирует все действия, которые будут модифицировать модель для команд. Команды могут вызывать уровень EJB или просто обновлять модели, не переходя на следующий уровень.
  • Храните в управляемых компонентах только логику, необходимую для инициализации компонентов JSF в представлениях или управления их поведением, ссылкой на модель и ссылкой на делегата, который предоставит команду для запуска.
Смежные вопросы