Hello,
Je patauge sur un problème que je soupçonne venir du cache...
J'utilise:
JDK 6
Mysql 5.0
Hibernate
Mon but:
J'ai un programme mutli-thread. Un thread va peupler la base de donnée, un second reprendre ces infos stockées pour les utiliser. La base de donnée est utilisée comme intermédiaire, car ces threads pourraient ne pas s'executer en même temps...
Bref, ces threads fonctionnent très bien séparéments (j'en lance un, il se termine, je lance le second). Mais dès qu'ils tournent ensemble, voilà ce qui se passe.
Mon premier thread insère des données dans la base (je les vois avec SQL Manager 2007).
Mon secon lit la base, mais ne voit pas ces données. C'est comme si elles n'existaient pas!
J'ai voulu désactiver le cache, j'ai procédé comme suit:
hibernate.cfg.xml:
1 2 3
| <property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_structured_cache">false</property> |
Mon code JAVA qui lit dans la base:
1 2 3 4 5 6 7 8
| Session session = HibernateUtil.currentSession();
session.clear();
Query query = session.createQuery("from RawMessage as raw");
query.setCacheMode(CacheMode.IGNORE);
query.setCacheable(false);
List<RawMessage> rawMessages;
rawMessages = query.list(); |
et cette list est toujours vide.
Il faut comprendre que ce code s'exécute une fois quand il n'y a pas encore les données, ensuite les données sont insérées, puis ce code s'exécute à nouveau. Mais lors de cette seconde exécution, il doit chercher dans un cache quelconque, vu qu'il ne trouve pas de données...
Je présume que mon problème est lié à la lecture et non à l'écriture, car sinon je ne verrais pas mes données dans la base avec SQL Manager?!?
J'ai aussi essayé, sur le serveur MySql:
set global query_cache_size=0;
Bref, je suis vraiement coincé...
Une idée??
Partager