2016-06-10 15 views
3

Ich habe ein Problem mit Grails Feder-Sicherheits-Kern-Plugin/Spring-LDAP-Plugin. Hier ist mein erster Beitrag link, und volle stacktrace. Hier ist das Problem:Grails 3.1.8 mit Feder Sicherheitskern mit mehreren Datenquellen

Ich habe eine App mit multpile Datenquellen und Feder-security-Kern-Plugin hinzugefügt von

`build.gradle ` `compile "org.grails.plugins:spring-security-core:3.1.1"` 

diese App in Build in Tomcatbediener ausgeführt wird, funktioniert es gut, aber wenn ich versuche, deploy ware datei in meinem eigenen tomcat, es scheitert mit fehler (in der link), ich habe versucht zu finden, was es verursacht, erste lösung ist aus zweiter level cache, zweite lösung ist entfernen feder-sicherheits-core plugin aus projekt. Ich weiß nicht, ob es ein Bug ist oder vielleicht fehlt mir eine Konfiguration, vielleicht ist die Standardkonfiguration nicht genug? Project arbeitete in der vorherigen Version 3.0.x. Wenn Sie Fehler reproduzieren möchten, erstellen Sie einfach ein neues Grails-Projekt - mit Webprofil, fügen Sie mehr als eine Datenquelle hinzu (oracle, mssql) und versuchen Sie es auf tomcat zu deployen.

Ich dachte, es könnte ein Problem mit Plug-in-Abhängigkeiten sein, weil es auch ehcache verwendet, und ich habe Abhängigkeit zu hibernate-ehcache, aber ehcache-core ausgenommen hat nicht geholfen. Hier ist Repo mit Beispielprojekt, das fehlschlägt link

+0

Gute Arbeit, alles zusammen zu setzen. Wenn Sie es in einer Beispielanwendung haben, stellen Sie das auf Git-Hub und verweisen Sie es hier auf diese Frage. Das macht es dann für andere einfacher, Probleme lokal zu produzieren, ohne App neu erstellen zu müssen usw. – Vahid

Antwort

3

Nicht sicher, ob Sie es bemerkt haben, aber Ihr Stacktrace besagt eindeutig, dass Sie einen doppelten CacheManager erstellt haben. Möglicherweise möchten Sie überprüfen Ihre ehcache.xml oder ehcache-failsafe.xml

Caused by: org.hibernate.cache.CacheException: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the 
ame VM. Please provide unique names for each CacheManager in the config or do one of following: 
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessa 
y 
2. Shutdown the earlier cacheManager before creating new one with same name. 
The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcache-failsafe.xml ] 
     at org.hibernate.cache.ehcache.EhCacheRegionFactory.start(EhCacheRegionFactory.java:107) 
     at org.hibernate.internal.CacheImpl.<init>(CacheImpl.java:70) 
     at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:40) 
     at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:35) 
     at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.jav 
:91) 
     at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:251) 
     ... 74 common frames omitted 
Caused by: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please provide unique names 
for each CacheManager in the config or do one of following: 
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessa 
y 
2. Shutdown the earlier cacheManager before creating new one with same name. 
The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcache-failsafe.xml ] 

UPDATE: Sie können die Konfiguration dieses similar question zu berücksichtigen. Im Grunde sind sie mit einer gemeinsamen Singleton Bohne, so wäre es die Neuschöpfung des Cache vermeiden:

DataSource.Groovy:

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

und

Config.groovy:

cacheManager { 
     shared = true 
    } 

Ich bin mir nicht sicher, ob es in der Tat Ihr Fall ist oder nicht (wir sehen Ihre Konfiguration nicht Ration), aber es ist ein Anfang.

+0

Ich habe keine Konfigurationsdatei für den CacheManager erstellt, auch in früheren Versionen von Grails war dies nicht nötig. Ich habe keine Datei 'DataSource.Groovy' und' Config.groovy', da ich 3.1.8 Version verwende. Wie auch immer, ich habe standardmäßige factory_class und standard shared settings und es hat vorher funktioniert. Ich habe meine Stackstrace gelesen, aber ich habe geschrieben, dass dieses Problem verschwindet, wenn Spring-Sicherheits-Plugin nicht hinzugefügt wird, so dass es einige Konflikte in der Plugin-Konfiguration geben muss. – whd

+1

Diese Lösung funktioniert, das ist richtig, aber im Moment muss ich mit der Annahme warten. Seit seiner Beschreibung beschreibt das Problem von der Version 2.5. Und ich verwende Standardeinstellungen, die korrekt sein sollten. Danke trotzdem für die temporäre Lösung! – whd

+1

Hallo, kein Problem :). Ich glaube, dass die Version von Grails hier keine Rolle spielt. Von der Stack-Ablaufverfolgung und Ihrer Beschreibung ist es wahrscheinlich, dass das Spring-Security-Plugin etwas tut, das das Cache-Manager-Doppel-Cache-Objekt erstellt. Es ist schwer zu sagen, es sei denn, Sie melden die Spring-Sicherheit an.Diese Lösung bewirkt, dass EhCache immer nur einen CacheManager verwendet. Vermeiden Sie daher das Problem. –