Exemple de fonctionnement d'Hibernate 3.6.2 2ème niveau de la mise en cache avec JPA2?

Le titre évidemment états : je ne peux pas faire le cache de second niveau de travail pour JPA2/Hibernate 3.6.3.

J'ai essayé beaucoup de un hack pour le faire fonctionner. Mais je suis le seul à réussir à avoir le cache de requêtes de travail. Bien que Hibernate crée les caches (nom de l'instance), ils sont ignorés. Même manque ne sont pas enregistrés. C'est peut-être une version d'une incompatibilité. J'ai essayé quelques autres, sans résultat. Et je ne me sens pas à la hauteur de la plus à essayer toutes les permutations. 😛

Je pose la question ici que certaines personnes semblent avoir de travail (dont les exemples que j'ai essayé aussi). Peut-être qu'ils peuvent repérer l'erreur évidente, je suis en train de faire.

Merci d'avance pour tout le monde de m'aider ! 🙂

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">

<persistence-unit name="foo" transaction-type="RESOURCE_LOCAL">
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:derby:/opt/db/foo;create=true"/>
        <property name="javax.persistence.jdbc.user" value="foo"/>
        <property name="javax.persistence.jdbc.password" value="bar"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>
        <property name="hibernate.cache.use_second_level_cache" value="true"/>
        <property name="hibernate.cache.use_query_cache" value="true"/>
    </properties>
</persistence-unit>

pom.xml

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.6.3.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
    <version>2.4.2</version>

JMX installation

Cette façon, je peux vérifier l'utilisation des caches. Les caches sont créés (un pour chaque entité) et les deux requêtes caches sont là aussi. Ce dernier se remplir assez vite. Mais aucun des caches afficher tout manque ou de frappe. Pas même la requête caches.

 ManagementService.registerMBeans( CacheManager.getInstance(), ManagementFactory.getPlatformMBeanServer(), true, true, true, true, true )

L'entité caches sont ignorés. Ils doivent contenir au moins les entités qui sont enregistrés dans la base de données. Ou être récupéré avec des requêtes. Rien ne bouge.

Exemple de code Java

EntityManager entityManager = Persistence.createEntityManagerFactory("foo").createEntityManager();
entityManager.getTransaction.begin();
entityManager.merge(bar);
entityManager.getTransaction.commit();   

Query query = entityManager.createQuery("select b from Bar p where b.name = :name");
query.setParameter("name", "fooBar");
query.setHint("org.hibernate.cacheable","true");
query.getSingleResult();

La fusion fonctionne - parce qu'il y a des données dans la base de données. Et les œuvres, parce que je suis à obtenir des objets avec celle générée.

La requête de entités sont indexés sur la base de données.

WHODUNNIT ?

Avez-vous réellement marqué votre entités @Cacheable?
Yep. Et le droit des caches popup dans JMX. Seules les entités ne sont pas mis en cache lorsqu'il est interrogé. Pas lors de la persistance/fusion.

OriginalL'auteur Jan Goyvaerts | 2011-06-08