2015-07-20 17 views
7

Bei einer Standardinstallation von Grails 2.5 und einem sauberen Standard, config, gibt das Hinzufügen einer zweiten Datenquelle immer diese Ausnahme beim Startversuch an die App. Dies war früher kein Problem mit Grails 2.3.xGrils 2.5: "Ein weiterer unbenannter CacheManager existiert bereits in derselben VM" bei Verwendung mehrerer Datenquellen

DataSource.groovy arbeiten:

environments { 
    development { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://127.0.0.1:3306/myapp" 
     username = "myuser" 
     password = "mypass" 
    } 

    dataSource_report { 
     url = "jdbc:mysql://127.0.0.1:3306/myapp_reporting" 
     username = "someuser" 
     password = "somepass" 
    } 
} 

Beide Datenbanken existieren, und können angeschlossen werden, wenn nur eine Datenquelle definiert.

Im BuildConfig.groovy, ist das ganze Zeug, das als Standard kam (ich nehme an), einschließlich:

plugins { 
    build ":tomcat:7.0.55" 

    compile ":scaffolding:2.1.2" 
    compile ':cache:1.1.8' 
    compile ":asset-pipeline:2.1.1" 
    compile ":spring-security-core:2.0-RC4" 
    compile ":quartz:1.0.2" 

    runtime ":hibernate4:4.3.8.1" // or ":hibernate:3.6.10.18" 
    runtime ":database-migration:1.4.0" 
    runtime ":cors:1.1.6" 
} 

Es gibt viele Beiträge mit diesem Fehler, aber sie scheinen zu sein, weil der Autor zu verwenden versucht Nicht-Standard-Versionen oder Caching.

auch versucht, diese zu Config.groovy, gemäß diesem Beitrag: https://github.com/grails/grails-core/releases/tag/v2.5.0

beans { 
    cacheManager { 
     shared = true 
    } 
} 

dies nicht, leider helfen.

Hinweis, verwenden wir den Standard aus der Box konfiguriert caching

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = false 
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4 
    singleSession = true // configure OSIV singleSession mode 
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context 
} 

==== UPDATE ====

Ersetzen dieser Zeile (in DataSource.groovy unter hibernate Abschnitt):

cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' 

Mit dieser:

cache.region.factory_class = 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory' 

Scheint das Problem behoben zu haben, aber die Frage ist nun, gibt es irgendwelche Nachteile dieser "Reparatur"?

Antwort

3

gerade Strecke zu halten (wie die OP schon in der Frage selbst beantwortet hat):

Ändern der cache.region.factory_class in DataSource.groovy dies mögen: wie

hibernate { 
    cache.region.factory_class = "org.hibernate.cache.SingletonEhCacheRegionFactory" 
} 

Und für diejenigen, die immer Fehler: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM., fügen Sie Ihre Config.groovy

folgende
beans { 
    cacheManager { 
     shared = true 
    } 
} 

Changes in ehcache version in hibernate plugins Siehe

+1

sollte es sein - 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory' –