besoin d'aide pour comprendre mes erreurs [Hibernate] - Java - Programmation
Marsh Posté le 17-07-2008 à 17:01:39
iviath a écrit : |
Il semblerait que cette erreur apparée lors de l'exécution de méthodes propres à une session (par exemple: load, get), alors que la session est fermée.
Marsh Posté le 17-07-2008 à 17:49:07
iviath a écrit : |
Une fois se bug corriger toutes les erreurs ci-dessus ont disparu. Cependant, une nouvelle erreur est apparue
Maintenant le problème se situe au niveau du cache: il me retourne l'unique erreur, The org.hibernate.cache.UpdateTimestampsCache Cache is not alive. Quelqu'un pourrait me dire se que cela veut dire et se que je peux faire pour résoudre ca? (J'ai remarqué que si la session n'est pas fermer l'erreur n'apparait pas mais au bout d'un moment le nombre de connection à la base est saturée)
Marsh Posté le 17-07-2008 à 18:06:46
Je ne connais malheureusement pas Hibernate (pas bien en tout cas), mais ton usage de sémaphore m'interpelle. Son utilité me parait extrêmement discutable, et de toute façon, mettre un sémaphore pour locker tout ça, tu veux enterrer les perfs de ton appli ou quoi ?
Vire ton sémaphore (qui à mon avis est totalement inutile) et réessaye.
Ensuite, je pense qu'il faut utiliser l'attribut "lazy" avec précautions et savoir parfaitement ce que l'on fait quand on l'utilise.
Enfin, je serais toi, je mettrais ce code dans un try {...} catch() avec une gestion de rollback en cas de levée d'exception (lire la doc Hibernate avant ne me parait pas inutile).
Marsh Posté le 18-07-2008 à 11:10:22
Apres observation les sémaphore ne sont pas adaptées
Marsh Posté le 18-07-2008 à 11:14:42
el muchacho a écrit : Je ne connais malheureusement pas Hibernate (pas bien en tout cas), mais ton usage de sémaphore m'interpelle. Son utilité me parait extrêmement discutable, et de toute façon, mettre un sémaphore pour locker tout ça, tu veux enterrer les perfs de ton appli ou quoi ? |
J'avais des problèmes au niveau de l'accé concurrent de mes fonctions. Dés lors, j'ai essayer d'utiliser des sémaphore pour résoudre tout cela. Cependant, je suis entrain de regarder si je peux les virer donc cela n'est pas définitif. Mais je te rassure je compte les virer.
el muchacho a écrit : |
Je me suis déjà occupé du lazy loading, je ne charge que les objtes qui m'intéresse vraiment sans pour autant surcharger le cache.
el muchacho a écrit : |
J'ai déjà mit les try et catch, mais afin de ne pas surcharger le code je ne l'ai pas copier ici. Mais le rollback et tout se qui va avec est déjà géré.
Actuellement, je viens de résoudre une bonne partie de mes problèmes, cependant il demeure une erreur récurrente. Il me dit non stop cache is not alive. J'ai cru comprendre que cela venait du fait que je reconstruir non stop une sessionFactory, se qui écrase mon cache en cours d'utilisation et génère cette erreur. Je pense donc que ma fonction de connexion n'est pas bonne. Tu m'avais parlé du pattern open view session, pourrais tu me donner un exemple et me dire ces effets de bords car, j'ai pas vraiment compris sont fonctionnement?
voici ma fonction de connexion
Code :
|
J'ai l'impression qu'a chaque fois que j'appelle connexion.closeSession ça ne ferme pas correctement la session et si je remet le sessionFacory close j'ai le problème du cache is not alive
Marsh Posté le 18-07-2008 à 13:53:21
Houlala, je comprends rien à ton code.
1. l.4-14 ça compile, ça ??
2. à quoi sert ton thread ?
3. qu'est censé faire currentSession() ??
4. as-tu lu la doc d'Hibernate ? As-tu regardé des exemples d'utilisation ? Je n'en ai pas l'impression.
"Tu m'avais parlé du pattern open view session, pourrais tu me donner un exemple et me dire ces effets de bords car, j'ai pas vraiment compris sont fonctionnement"
Effets de bord ? Il n'y en a pas quand c'est correctement implémenté. C'est pourtant pas très dur.
Tu appelles une méthode qui ouvre la session, tu utilises la session ouverte, et à la fin tu la fermes, quoi qu'il arrive, en appelant le close dans un finally.
Et tu t'appuies sur les mécanismes déjà présents d'Hibernate pour la gestion de caches, de concurrence, etc. Autrement dit tu n'as pas à te soucier de ça.
Marsh Posté le 18-07-2008 à 14:26:06
el muchacho a écrit : Houlala, je comprends rien à ton code. |
J ai prit ca dans un tutorial pour hibernate donc je pourrais pas t'expliquer a quoi sert le currentSession dans les détails car ça m'echappe moi même.
Citation :
|
Je connaissais pas non plus mais ça marche sinon je pourrait même pas effectuer de requête
[quotemsg=]
4. as-tu lu la doc d'Hibernate ? As-tu regardé des exemples d'utilisation ? Je n'en ai pas l'impression.
[/quotemsg]
Ben je me suis tapé une bonne partie de la doc de hibernate mais pas l'intégralité, non. Les sessions j'ai rien compris , c'est pour ça que je demande de l'aide. J'ai juste vu le mécanisme de base, c'est tout.
Citation :
|
J'ai entendu parler plusieurs fois des effets de bords de cette méthode malheureusement, ils sont jamais rentrés dans les détails.
Citation :
|
En gros c'est :
Code :
|
Personnellement je suis tombé sur des trucs bien complexes ça me surprend que ça soit juste ça, c'est pour ca que je demandai de l'aide. Je vais tester et on verra se que ça donne.
Pour info cette classe se approche du pattern session per request (http://www.hibernate.org/207.html)
et le pattern open session per view c est (http://www.hibernate.org/43.html), mais ca ressemble pas à se que tu m'as dit et j'ai rien compris a la page.
Marsh Posté le 18-07-2008 à 15:35:47
Je viens de tester la connection classique:
private static final SessionFactory factory = new Configuration().configure().buildSessionFactory();
session = factory.openSession();
// traitement
}
catch (Exception ex)
{
new RapportErreur(ex,classe);
this.erreur=true;
}
finally
{
try{session.close();}
catch(Exception ex){}
}
et quand j'ai plus de 10 threads ça me met Cannot open connection
Quelqu'un a une idée?
Marsh Posté le 18-07-2008 à 15:46:51
Ton pool de connexions est limité à 10 ?
Pour la session/view, tu ne comprends pas parce que j'ai l'impression qu'il te manque des connaissances sur le fonctionnement des servlets. Demande de l'aide dans ton entourage parmis les gens qui connaissent la programmation web en Java ou lis le J2EE Tutorial de Sun (attention, grosse lecture).
Marsh Posté le 18-07-2008 à 16:06:31
Si tu parle du cycle de vie des servlets je connais le mécanisme et les principaux états. Après je suis d'accord avec toi que je manque de connaissance en J2EE.
Pour le pool de connection, je ne sais pas comment on fait pour voir et comment le régler (au niveau de TomCat?). Cependant, je me demandais si c'était pas au niveau de Postgres qu'il me limitait le nombre de connection ou si tout simplement je créer pas trop d'instance de session au niveau de postGres?
Marsh Posté le 18-07-2008 à 16:18:38
Je viens de regarder pour le pool de connexion, je vais tester c3p0 (donc regler dans hibernate.cfg.xml)
Marsh Posté le 17-07-2008 à 16:09:47
Bonjour tout le monde et plus particulièrement ceux qui si connaissent en Hibernate.
Je vous explique le problème, actuellement je suis entrain de développer une couche middeware avec Hibernate et je galère. Je suis entrain de tester la monté en charge et tout se qui va avec l'aide de Jmeter et je me suis appercu que mon service web ne tien pas pour le moment.
J'enchaine les erreurs de type :
- illegal access to loading collection
- Exception releasing cache locks
- Flush during cascade is dangerous
- java.util.ConcurrentModificationException
- Found shared references to a collection: com.modele.donnees.Departement.Postes
Si quelqu'un pourrait m'expliquer l'origine de ces erreurs ça pourrait m'aider à les résoudre.
Voici un exemple de code qui genere ce type d erreur avec son fichier de mappy:
le mappy:
le code d execution:
J'attend vous conseil et réponse, car ça fait 1 semaine que je cherche à resoudre mes problèmes mais je galère vraiment beaucoup.
---------------
En informatique, il n'y a pa de solution, que des problèmes :)