2015-01-21 16 views
6

I Wildfly 8.1 so JPA 2.1 und Hibernate bin mit 4.3.5JPA gemeinsamen Cache/Cache zweiter Ebene in Wildfly

I JPA Shared-Cache/Cache zweiter Ebene in Wildfly

ich das nutzen wollen folgen Wildfly Dokumentation: https://docs.jboss.org/author/display/WFLY8/JPA+Reference+Guide#JPAReferenceGuide-UsingtheInfinispansecondlevelcache

hier ist mein persitience.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="myAppPU" transaction-type="JTA"> 
    <jta-data-source>java:/jdbc/myAppDS</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
    <properties> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="org.hibernate.flushMode" value="MANUAL"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

ich die Eigenschaft hibernate.cache.use_second_level_cache auf true gesetzt und stellen Sie den Shared-Cache-Modus

und Organisationen (@Entity) Ich möchte gecached werden kommentierten mit @Cacheable (true), wie das ENABLE_SELECTIVE:

@Entity 
@Cacheable(true) 
public class Tooltip implements Serializable { 
    @Id 
    private String path ; 
    private String description ; 
    private Boolean rendered ; 
    //... 
} 

Aber jedes Mal, wenn ich Besuch ein website hibernate generiert eine Menge von select, um alle Entitäten zu erhalten, die ich als @Cacheable (true) angegeben habe, selbst wenn ich die Seite bereits besuche (in derselben Sitzung).

So scheint es, dass der gemeinsame Cache/Second Level Cache nicht

funktioniert

Habe ich etwas verpasst?


Danke hwellmann

I hibernate.cache.use_query_cache auf true in der persitence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="myAppPU" transaction-type="JTA"> 
    <jta-data-source>java:/jdbc/myAppDS</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
    <properties> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true"/> 
     <property name="hibernate.cache.use_query_cache" value="true" /> 
     <property name="org.hibernate.flushMode" value="MANUAL"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

und und den Hinweis in der Abfrage zu setzen versucht, ich verwende

@Entity 
@NamedQueries({ 
    @NamedQuery(name = "FieldInfos.findAll", query = "SELECT i FROM FieldInfos i", hints = {@QueryHint(name="org.hibernate.cacheable",value="true")}), 
    @NamedQuery(name = "FieldInfos.findByPath", query = "SELECT i FROM FieldInfos i WHERE i.path = :path", hints = {@QueryHint(name="org.hibernate.cacheable",value="true")}) 
}) 
@Cacheable(true) 
public class FieldInfos implements Serializable { 
    //... 
} 

aber das Problem bleibt

Ich versuche auch mit der neuen Version von Wildfly: 8.2 4.3.7 so Hibernate, aber das Problem bleibt auch

+0

Haben Sie Ihr Problem gelöst? –

+0

Haben Sie die Statistik aktiviert und die WildFly-Verwaltungskonsole> Runtime> JPA-Registerkarte überprüft? –

Antwort

2

Der zweite Level-Cache wirkt sich nur auf direkte Einheit Lookups, zu EntityManager.find() entspricht.

Wenn Sie alle Arten von SELECT Abfragen im Cache befindlichen Einheiten zu beeinflussen zu vermeiden sind versuchen, müssen Sie auch die Abfrage-Cache aktivieren:

<property name="hibernate.cache.use_query_cache" value="true" /> 

und Sie brauchen einen Abfrage-Hinweis org.hibernate.cacheable=true für jede Abfrage auf im Cache gespeichert werden.

+0

Danke, aber leider funktionierte es nicht für mich, ich bearbeite meinen Beitrag zu erklären – kwisatz

+0

Einstellung cachefähig in der Abfrage ist wichtig, vielleicht können Sie den Client-Code zeigen, um zu sehen, ob Sie es richtig machen? Alternativ aktivieren Sie die TRACE-Protokollierung für 'org.hibernate' und vielleicht auch' org.infinispan', um zu sehen, was genau läuft. Das Durchlaufen des Codes mit einem Remote-Debugger würde ebenfalls hilfreich sein. –