3

空の grails プロジェクトを作成しました

grails create-app foo

変更済みBuildConfig.groovy、コメントなし

inherits("global") {  
  // uncomment to disable ehcache                                                                                                                                                                                                        
  excludes 'ehcache'                                                                                                                                                                                                                       
}  

なので今ehcacheは除外。

これらの 5 つの jar をterracottaインストールからfoo/libディレクトリにコピーしました。

ehcache-core-ee-2.6.2.jar
ehcache-terracotta-ee-2.6.2.jar
slf4j-api-1.6.1.jar
slf4j-jdk14-1.6.1.jar
terracotta-toolkit-1.6-runtime-ee-5.2.0.jar

ディレクトリehcache.xmlに作成:grails-app/conf/

<ehcache>

  <terracottaConfig url="vm4:9510"/>

   <defaultCache
       maxElementsInMemory="50"
       eternal="false"
       timeToIdleSeconds="20"
       timeToLiveSeconds="20"
       overflowToDisk="false"
       diskPersistent="false"
       memoryStoreEvictionPolicy="LRU">

    <terracotta clustered="true" valueMode="serialization"/>
  </defaultCache>

</ehcache>

プロジェクトを実行grails run-appしてこの例外を取得します:

Message: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'transactionManager': 
Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.cache.CacheException: 
net.sf.ehcache.CacheException: Could not create ClusteredInstanceFactory due to missing class. Please verify that terracotta-toolkit is in your classpath.
4

1 に答える 1

2

ディレクトリからすべての jar を削除し、foo/libいくつかの依存関係を BuildConfig.groovy に挿入します。

    repositories {
        .....
        mavenRepo "http://www.terracotta.org/download/reflector/releases"
    }
    dependencies {
        runtime 'net.sf.ehcache:ehcache-core:2.6.2'
        runtime 'net.sf.ehcache:ehcache-terracotta:2.6.2'
        runtime 'org.terracotta:terracotta-toolkit-1.6-runtime:5.2.0'
    }

これにより、リポジトリとクラスパスのセットアップから他の必要な jar を自動的にダウンロードできます。

また、私のようにオープン ソースのテラコッタ サーバーをセットアップすると、エンタープライズ エディションの foo/lib/ehcache-terracotta-ee-2.6.2.jar でエラーが発生します。

エラー - エンタープライズ クライアントはオープンソース サーバーに接続できません。接続が拒否されました。

重要な部分:

リロード エージェントをバイパスするgrails -noreloading run-app代わりに、アプリを実行します。grails run-appその後、分散キャッシュ アプリが動作するはずです。

ps アプリを本番環境にデプロイするのに、追加の作業は必要ありません。

于 2013-01-07T16:17:34.180 に答える