3

「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

persistenceInterceptorで名前が付けられたBeanを配線していないので、エラーは理にかなっていますresources.groovyが、プラグインのドキュメントによると、配線する必要はありません。PersistenceContextInterceptorインターフェースを実装するGroovyクラスを作成し、それを「persistenceInterceptor」Beanとして接続する必要がありますか?ドキュメントのセットアップセクションには、これについての言及はありません。

4

3 に答える 3

1

私はこれを理解しました...

persistenceInterceptorは、executorプラグイン構成によって参照されるため、プラグインをGrailsプロジェクトに追加したら、コードは、resources.groovy内のPersistenceContextInterceptorのインスタンスを接続する必要があります。今のところ、これを回避するためだけにインターフェイスを実装するためにクラスをモックしましたが、正常に機能しました。

//resources.groovy
 persistenceInterceptor(  com.cache.DefaultCacheInterceptor){
}
于 2011-12-13T15:26:59.700 に答える
0

実際、セットアップでは、resources.groovyに何も追加する必要はありません。ドキュメントから、そのコードブロックはすでにデフォルトになっています。デフォルトをオーバーライドしてカスタムスレッドプールを作成する必要がない限り、resources.groovyからすべてのカスタムコードを削除することをお勧めします。

プラグインはexecutorServiceと呼ばれるGrailsサービスBeanを設定するため、実際には何もする必要はありません。Java ExecutorService(Grailsサービスと混同しないでください)インターフェースの実装に委任するので、executorServiceで何ができるかについての詳細はそれを読んでください。基本的に、別のスレッドプールExecutorServiceをラップします。デフォルトでは、java Executorsユーティリティクラスを使用して、挿入されたスレッドプールExecutorService実装をセットアップします。デフォルトのGrailsexecutorService構成は次のようになります

于 2012-02-20T19:30:34.823 に答える
-1

さらに適切な解決策があると思います。resources.groovyファイルに次の行を追加してみてください。

springConfig.addAlias 'persistenceInterceptor', 'mongoPersistenceInterceptor'
于 2016-09-12T13:36:35.257 に答える