Ошибка с плагином Grails Executor, бин "persistenceInterceptor" не найден - PullRequest
3 голосов
/ 08 декабря 2011

Я установил плагин executor в свое приложение Grails, чтобы выполнить простую асинхронную обработку;Я не использую Hibernate или какую-либо необычную настойчивость.Основываясь на документации по плагину, которую можно найти здесь https://github.com/basejump/grails-executor,, установка очень проста, просто добавьте следующее к resources.groovy, и я должен идти ...

//resources.groovy
    executorService( PersistenceContextExecutorWrapper ) { bean->
        bean.destroyMethod = 'destroy'
        persistenceInterceptor = ref("persistenceInterceptor")
        executor = Executors.newCachedThreadPool()
    }

Я еще не пытался использовать какие-либо асинхронные конструкции в моем коде, но когда я запускаю приложение Grails, я вижу следующую ошибку ...

Cannot resolve reference to bean 'persistenceInterceptor' while setting bean property 'persistenceInterceptor';
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'persistenceInterceptor' is defined

Ошибка имеет смысл, так как в IЯ не подключил ни одного компонента с именем persistenceInterceptor в resources.groovy, но в соответствии с документацией к плагину мне это не нужно.Должен ли я написать класс Groovy, который реализует интерфейс PersistenceContextInterceptor, и связать его как bean-компонент «persistenceInterceptor»?В разделе «Настройка» документации об этом нет упоминания.

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Я понял это ....

На persistenceInterceptor ссылается конфигурация плагина executor, поэтому, как только вы добавите плагин в проект Grails, ваш код должен подключить экземпляр PersistenceContextInterceptor в resources.groovy. Я издевался над классом для реализации интерфейса, чтобы обойти это сейчас, и он работал нормально.

//resources.groovy
 persistenceInterceptor(  com.cache.DefaultCacheInterceptor){
}
0 голосов
/ 12 сентября 2016

Я считаю, что есть еще более подходящее решение. Попробуйте добавить следующую строку в resources.groovy file:

springConfig.addAlias 'persistenceInterceptor', 'mongoPersistenceInterceptor'
0 голосов
/ 20 февраля 2012

На самом деле установка не требует, чтобы вы вообще что-либо добавляли в resources.groovy - из документов этот блок кода уже используется по умолчанию.Я бы предложил удалить весь ваш пользовательский код из resources.groovy, если вам не нужно переопределить значения по умолчанию и создать собственный пул потоков.

Плагин настраивает служебный компонент Grails, называемый executorService, поэтому вам не нужно ничего делать на самом деле.Он делегирует реализацию интерфейса Java ExecutorService (не путать с сервисом Grails), так что читайте об этом для получения дополнительной информации о том, что вы можете сделать с executorService.Это в основном оборачивает другой пул потоков ExecutorService.По умолчанию он использует служебный класс java Executors для настройки реализации внедренного пула потоков ExecutorService.Конфигурация Grails executorService по умолчанию выглядит следующим образом

...