EJB 세션 빈에 액세스 할 때 Facade Pattern을 사용하는 이유를 묻고 싶습니다. 나는>Sessions Bean for Entity Classes
New
을, 나는 User
엔티티를 선택하는 것이 가정 해 봅시다 경우 내 넷빈즈 6.9.1에서, 다음 넷빈즈EJB 세션 빈에 Facade 패턴을 사용하는 이유
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 개의 Facade 클래스와 AbstractFacade를 생성합니다. 이것은 나에게 잔인한 것 같다. 내 관리 빈 내부 어딘가에 말을하자, 내가 persist
User
및 School
에있는 나는이
someManagedBean.java
...
@EJB
private UserFacade userEJB;
@EJB
private SchoolFacade schoolEJB;
...
public void someMethod(User user, School school){
...
userEJB.create(user);
schoolEJB.create(school);
}
이 옳은 일입니까 할 수있다?
나는 아직도 약간 혼란 스럽다. 내가 EJB를 생성하는 이유는'persist' 나'merge' 나'Query # getResultList'와 같이 CRUD를 수행하기 위해 JPA와 상호 작용할 필요가 있기 때문입니다. 그래서이 경우 EJB를 사용해야합니다. 나는'@ Statsless' EJB btw를 사용합니다. 당신의 두 번째 단락, 어쩌면 몇 가지 샘플 코드에 대해 좀 더 자세히 설명 할 수있어서 실제 구조를 볼 수있어서 크게 감사하겠습니다. –
@Harry : EJB를 사용하여 JPA를 사용할 필요가 없으며 직접 EntityManager에 액세스 할 수 있습니다. 그러나 트랜잭션을 얻기 위해 EJB를 사용하는 것이 여전히 합리적 일 수 있습니다. 예제를 추가하겠습니다. –
감사합니다. 가능하다면, EJB에 대한 외관 패턴을 올바르게 구현하는 방법에 대한 예제를 추가 할 것인가? 나는 그것을 매우 높이 평가할 것이다. D –