2010-01-21 6 views
0

기존 Java 도메인 클래스 봄 프로젝트을 사용하여 Grails의 프로젝트를하고 난 typeDefinitions를 구성해야합니다. Spring 프로젝트에서는 LocalSessionFactoryBean의이 속성을 구성 할 수 있지만 grails 프로젝트에서 어떻게 할 수 있습니까?구성 속성

답변

2

LocalSessionFactoryBean의 Grails 버전은 서브 클래스 인 org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean입니다. 그래서 당신은 몇 가지 옵션이

sessionFactory(ConfigurableLocalSessionFactoryBean) { 
    ... 
} 

로 org.codehaus.groovy.grails.plugins.orm.hibernate.HibernatePluginSupport에서 스프링 빈으로 등록합니다.

class BootStrap { 

    def sessionFactory 

    def init = { servletContext -> 
     sessionFactory.foo = bar 
    } 

    def destroy = {} 
} 

그것은 같습니다 하나는 빈을 참조하고 부트 스트랩에서 수정할 수 있습니다 가능하면 또는 즉, Grails의 플러스 변경 사항을 구성 무엇

sessionFactory(MyCustomConfigurableLocalSessionFactoryBean) { 
    ... 
    typeDefinitions = ... 
} 

을 유지 resources.groovy에 콩을 재정의하는 것입니다 factoryBean이 SessionFactory를 구축하는 동안 typeDefinitions를 일찍 구성해야하므로 옵션 1이 가장 좋은 방법 일 것입니다.

+0

이것은 내가 원하는 것을 얻기위한 올바른 방법 인 것처럼 보이지만 내 grails 지식은 내 봄 지식만큼이나 좋지 않다는 것을 인정해야합니다. 그래서 자원에서 bean을 재정의하는 방법에 대한 팁을 제게 주시겠습니까? 그루비, Grails 구성 및 변경 내용 유지 "? –

1

다른 옵션은 스프링의 라이프 사이클 콜백을 사용하는 것입니다. BeanPostProcessor

public class CustomBeanPostProcessor implements BeanPostProcessor { 

// simply return the instantiated bean as-is 
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
    return bean; // we could potentially return any object reference here... 
} 

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
    if ("sessionFactory".equals(beanName) && bean instanceof ConfigurableLocalSessionFactoryBean) { 
     ConfigurableLocalSessionFactoryBean sessionFactory = (ConfigurableLocalSessionFactoryBean) bean; 
     sessionFactory.setTypeDefinitions(...); 
    } 
    return bean; 
} 

}

를 구현하고 resources.groovy

customProcessor(CustomBeanPostProcessor) 

이미 GORM 동적 측정기 등으로 유선 SessionFactory에 콩 먹으 렴을 다시 정의하지 않아도 이런 식으로 던져 .al.

+0

좋은 제안, 문제는 postProcessAfterInitialization은 sessionFactory 또는 ConfigurableLocalSessionFactoryBean 인스턴스에 호출되지 않는다는 것입니다 : –

+0

bean 정의를 resources.groovy에 추가 했습니까? 위의 코드를 테스트하고 TypeDefinitions가 작동했는지 확인했습니다. 그런 식으로. –

+0

왜 내 상황이 작동하지 않는 알게 : sessionFactory 매핑 된 정보를로드 할 때 - 때문에 구성된 UserType 알지 못한다 때문에 인스턴스화 할 수 없습니다. 그래서 이러한 TypeDefinitions 전에 구성해야합니다 sessionFactory가 인스턴스화된다 –

관련 문제