Зачем использовать шаблон фасада для сеансового компонента EJB

Я хочу спросить, в чем причина использования шаблона фасада при доступе к сеансу EJB Фасоль. В моем Netbeans 6.9.1, если я использую New > Sessions Bean для классов сущностей , Допустим, я выбираю сущность User , тогда Netbeans сгенерирует этот код

AbstractFacade.java
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public T edit(T entity) {
        return getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        ...
    }

    public int count() {
        ...
    }

И

UserFacade.java    

package com.bridgeye.ejb;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class UserFacade extends AbstractFacade<User> {
    @PersistenceContext(unitName = "Bridgeye2-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public UserFacade() {
        super(User.class);
    }        
}

Я хочу спросить, в чем преимущество этого. Если у меня есть 10 сущностей, Netbeans сгенерирует 10 классов фасадов плюс AbstractFacade. Мне это кажется излишним. Скажем, где-то внутри моего управляемого bean-компонента я должен сохранить пользователя и School , тогда я должен сделать это

someManagedBean.java

...
@EJB
private UserFacade userEJB;

@EJB
private SchoolFacade schoolEJB;

...

public void someMethod(User user, School school){
    ...
    userEJB.create(user);
    schoolEJB.create(school);    
}

Это правильные действия?

14
задан BalusC 11 July 2015 в 15:48
поделиться