настроить свойства LocalSessionFactoryBean в граалях - PullRequest
0 голосов
/ 21 января 2010

У меня есть проект grails, использующий мои существующие классы домена Java из весеннего проекта , и мне нужно настроить typeDefinitions . В весеннем проекте можно настроить это свойство LocalSessionFactoryBean - но как это сделать в проекте grails?

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Версия Grails LocalSessionFactoryBean является подклассом org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean. Он зарегистрирован как Spring bean в org.codehaus.groovy.grails.plugins.orm.hibernate.HibernatePluginSupport как

sessionFactory(ConfigurableLocalSessionFactoryBean) {
   ...
}

так что у вас есть несколько вариантов. Один из них - переопределить bean-компонент в resources.groovy, следуя настройкам Grails и вашим изменениям, т. Е.

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

или, если возможно, вы можете ссылаться на bean-компонент и изменить его в BootStrap:

class BootStrap {

   def sessionFactory

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

   def destroy = {}
}

Похоже, что typeDefinitions необходимо настроить заранее, в то время как фабричный компонент строит SessionFactory, поэтому вариант 1, вероятно, является лучшим выбором.

1 голос
/ 21 января 2010

другой вариант - использовать обратные вызовы жизненного цикла пружины, например, реализация 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;
}

}

и брось его на свои ресурсы.гроовы

customProcessor(CustomBeanPostProcessor)

таким образом, вам не нужно переопределять bean-компонент sessionFactory, уже подключенный к динамическим поисковым системам GORM и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...