Ich benutze JBoss 5.1.0 GA zusammen mit Hibernate und ich versuche nun den Second Level Cache zu aktivieren. Ich habe die folgenden Eigenschaften zu meiner Hibernate-Konfiguration hinzugefügt.Concurrent Creation Event
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.MultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.jbc2.query.localonly" value="true"/>
<property name="hibernate.cache.region_prefix" value="my_prefix" />
Und ich habe Entitäten kommentiert, dass ich mit dem folgenden selten zu ändern erwarten:
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
Dies basiert auf meinem Verständnis der documentation.
Die Anwendung wird erfolgreich ohne gruselig aussehende Nachrichten (z. B. WARN oder ERROR Nachrichten im Protokolldatenstrom) bereitgestellt. Für eine kurze Zeit sehe ich Caching funktioniert (ich benutze Hibernate-Statistiken, um dies zu sehen), aber nach kurzer Zeit bekomme ich Stack-Traces des Formulars (auch wenn als einzelner Benutzer ohne Remote-Zugriff wie auch immer angemeldet):
"Transaktion versucht erneut MYCLASS zu erstellen. Es wurde bereits erstellt worden, da diese Transaktion gestartet, durch ein anderes (möglicherweise remote) Transaktion. Wir haben eine gleichzeitige creation event"
Gefolgt von einer gigantischen Stack-Spur, die schließlich zu einem Nam zurückführt ed-Abfrage, die ich gemacht habe, die die folgende Form hat:
SELECT x FROM X WHERE x.deleted = false
Die benannte Abfrage hat keine zusätzlichen Anmerkungen zum Zwischenspeichern.
Jeder Rat, wie man dieses Problem löst, würde sehr geschätzt werden. Einige Fragen
Kein sicher, dass es helfen wird, aber ich würde versuchen, mit Sperren und Isolationseinstellungen des Cache zu spielen. – Stas
Das half - wechselte zu pessimistic-entity statt mvcc-entity und alles ist wieder gut. –