IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

JPA / Hibernate et cache


Sujet :

JPA Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 9
    Points
    9
    Par défaut JPA / Hibernate et cache
    Bonjour,

    je cherche qq explications sur le fonctionnement du cache d'hibernate.

    Mon problème est le suivant : je voudrais avoir un cache qui conserve l'ensemble de mes entitiés durant une requete server de mon site (pour un seul thread donc), de manière à ce que si je demande 1000X la même entité (même id), la requete prenne à peine plus de temps que si je la demande 1X.

    Voici ma requête-test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PersonsService personsService = (PersonsService) PersistenceManager.getApplicationContext().getBean("PersonsService");
     
    		long date = new Date().getTime();
    		int loopNumber = 1000;
    		PersonsEntity personsEntity = null;
    		for (int i = 0; i < loopNumber; i++) {
    			personsEntity = personsService.getByPrimaryKey(3);
    		}
     
    		System.out.println("TIME : " +(new Date().getTime() - date));
    avec loopNumber = 1000, j'ai 6sec, avec loopNumber = 1, 0,071 ...

    Donc, est-ce que le cache d'hibernate peut m'aider là dessus? Et comment puis-je l'activé?

    Voici mon persistence.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
        <persistence-unit name="jpa_unit" transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <properties>
    		   <!-- 2nd level cache -->
    		   <property name="hibernate.cache.provider_class"			    value="org.hibernate.cache.EhCacheProvider" />
    			--> 
     
                <!-- You can change this to create at the first time -->
                <property name="hibernate.hbm2ddl.auto" value="validate" />
     
                <!-- Set this to 0 otherwise you sometimes get errors -->
                <property name="hibernate.connection.pool_size" value="1" />
    	  </properties>
        </persistence-unit>
    </persistence>
    Et j'ai ajouté @Cacheable à mon entity.

    Merci pour vos lumières !

  2. #2
    Membre éclairé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 200
    Points : 792
    Points
    792
    Par défaut
    Si tu veux sauvegarder toutes les entités en cache, avec JPA tu peux utiliser la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <shared-cache-mode >ALL</shared-cache-mode>
    dans le persistence.xml et là tu n'aura plus besoin des annoations @Cacheable. Une fois les entités en cache, les prochaines requêtes vont simplement lire en mémoire au lieu d'aller en base de données.
    Cependant, pour comparer les temps de traitement d'une opération, on se sert généralement de la moyen après plusieurs exécutions. Car, entre deux exécutions, les temps de réponses peuvent doubler suite à l'occupation du processeur.
    Ingénieur Recherche et Développement en informatique à Sopra

    Page perso developpez : http://armel-ndjobo.developpez.com/
    Suivez moi sur twitter : ndjobo

Discussions similaires

  1. JPA + Hibernate + ehCache : Mise en cache redondant ?!..
    Par zanteskuken dans le forum Hibernate
    Réponses: 0
    Dernier message: 10/01/2012, 20h31
  2. [Data] Spring hibernate JPA : second level cache
    Par nahtanojb dans le forum Spring
    Réponses: 0
    Dernier message: 11/04/2010, 18h32
  3. JPA / Hibernate.
    Par Ho(c)ine. dans le forum Persistance des données
    Réponses: 2
    Dernier message: 23/08/2007, 15h39
  4. hibernate, le cache
    Par tidar dans le forum Hibernate
    Réponses: 12
    Dernier message: 14/02/2007, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo