Как устранить ошибку выполнения начальной загрузки Grails "postProcessBeanDefinitionRegistry уже вызвана для этого постпроцессора"? - PullRequest
0 голосов
/ 01 октября 2010

Я создаю приложение Grails (1.3.4), настроенное с помощью плагина grails tomcat-1.3.4 и использующее Spring (3.0.3RELEASE), но использующее существующий файл Spring applicationContext.xml.Я скопировал соответствующие части старого файла в файл, сгенерированный Grails (чуть ниже bean-компонента characterEncodingFilter).Убедившись, что все необходимые файлы jar находятся на пути к классам, и что в именах компонентов нет конфликтов (я обнаружил, что dataSource уже использовался, если существует файл DataSource.groovy, поэтому я удалил его, чтобы разрешить это), ястолкнулся с IllegalStateException.Трассировка стека и часть журнала отладки приводят к следующему:

2010-09-30 15:29:36,131 [main] DEBUG xml.DefaultDocumentLoader  - Using JAXP provider [com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl]
2010-09-30 15:29:36,143 [main] DEBUG support.DefaultListableBeanFactory  - Returning cached instance of singleton bean 'grailsApplication'
2010-09-30 15:29:36,149 [main] ERROR context.GrailsContextLoader  - Error executing bootstraps: postProcessBeanDefinitionRegistry already called for this post-processor
    java.lang.IllegalStateException: postProcessBeanDefinitionRegistry already called for this post-processor
    at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:164)
    at grails.web.container.EmbeddableServer$start.call(Unknown Source)
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
    at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
    at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
    at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
    at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
    at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
    at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy)
    at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59)
    at RunApp$_run_closure1.doCall(RunApp.groovy:33)
    at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
    at gant.Gant.withBuildListeners(Gant.groovy:427)
    at gant.Gant.this$2$withBuildListeners(Gant.groovy)
    at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
    at gant.Gant.dispatch(Gant.groovy:415)
    at gant.Gant.this$2$dispatch(Gant.groovy)
    at gant.Gant.invokeMethod(Gant.groovy)
    at gant.Gant.executeTargets(Gant.groovy:590)
    at gant.Gant.executeTargets(Gant.groovy:589)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)

Обновление: если я закомментирую следующие строки в верхней части моего applicationContext.xml, он перейдет в бесконечный цикл.

<context:annotation-config/>
<context:property-placeholder location="WEB-INF/config.properties"/>

Если я также закомментирую свои строки импорта, он будет работать как ожидалось.Строки импорта:

<import resource="conf/membershipData.xml"/>
<import resource="conf/membershipServices.xml"/>

/ Update

Прослеживая через отладчик, я заметил, что это происходит во время обновления applicationContext во время запуска (DefaultRuntimeSpringConfiguration: 154).

В случае необходимости я использую IntelliJ IDEA 9, который обрабатывает все вставки jar перед командой run-app.

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 01 октября 2010

Вы не должны касаться applicationContext.xml - это для "родительского" контекста приложения. Скопируйте ваши bean-компоненты в resources.xml в grails-app / conf / spring. Этот файл больше не создается по умолчанию, так как предпочтительным подходом является использование DSL bean-компонента Spring в resources.groovy, но формат resources.xml - это просто стандартный xml-компонент Spring bean, поэтому вы, вероятно, можете просто скопировать туда свой xml-файл переименуйте его в resources.xml.

...