2014-03-04 5 views
0

이 일반적인 DAO 정의프로그래밍 방식으로 EntityManager를 인스턴스화하는 방법은 무엇입니까?

@Repository 
public class GenericService<T> implements IGenericService<T> { 
    @PersistenceContext(unitName="mgrUnit", name="mgrEMF") 
    @Qualifier(value = "mgrEMF") 
    public void setEm(EntityManager em) {  
     this.em = em;  
     util = em.getEntityManagerFactory().getPersistenceUnitUtil();  
    } 
} 

을 갖는 엔티티의 큰 숫자를 가지고, 내가

를 들어 (... 지역, EmployeSpeciality), 실체화의 DAO를 automatiqualy 백엔드 콩을 기본 테이블처럼 할 bean 등록과 instantion은 쉽지만 DAO는 어떨까요? 필자의 경우 엔 EntityManager가 서비스에 의존한다는 것을 명심해야한다. 다중 데이터베이스 연결이있다.

내가이 글을 읽을 수 있지만 honnestly 그것을 할 수있는 간단한 방법이 있나요 훨씬 복잡

http://doanduyhai.wordpress.com/2011/11/20/spring-transactional-explained/

에 보이는?

AutowireCapableBeanFactory beanFactory = 
FacesUtils.getWebappContext().getAutowireCapableBeanFactory(); 
beanFactory.autowireBean(obj); 

그것은 문제의 절반은 해결 사용

확인,의 콩 EMF가 제대로 주입하지만 빈은 registred되지는 때문에 (내가 그것을 내가 필요로 할 때마다-실체화를 다시해야한다) beanFactory에는 Bean 정의가 포함되어 있지 않으므로 추가하는 방법은 무엇입니까?

NB : 나는 응용 프로그램 MAP에서 개체를 퍼 팅하는 접근 DAO를 유지하지만하지 심각한 솔루션 수 있다는 것을 알고

FacesContext.getCurrentInstance().getExternalContext(). 
      getApplicationMap().put(serviceName, service); 

답변

0
IGenericService service = (IGenericService) ContextManager.findBean(serviceName);  
if (service==null && !FacesUtils.getWebappContext().getBeanFactory(). 
      containsBeanDefinition(serviceName)){ 

    service = new ErpGenericService(clazz); 
    AutowireCapableBeanFactory beanFactory = FacesUtils.getWebappContext(). 
              getAutowireCapableBeanFactory(); 
    beanFactory.autowireBean(service); 
    //Applying transactional proxies 
    service = (IGenericService) beanFactory.applyBeanPostProcessorsAfterInitialization(service, serviceName); 
    FacesUtils.getWebappContext().getBeanFactory(). 
        registerSingleton(serviceName, service);      

}