pattern open session in view / pattern command [Hibernate] - Java - Programmation
Marsh Posté le 24-07-2008 à 21:08:11
Houla, t'es encore la-dessus ? Tu m'as l'air de ramer un peu, j'ai l'impression, ou je me trompe ?
Marsh Posté le 25-07-2008 à 09:45:21
el muchacho a écrit : Houla, t'es encore la-dessus ? Tu m'as l'air de ramer un peu, j'ai l'impression, ou je me trompe ? |
Je rame la dessus oui, j'arrive pas a résoudre mon problème de pool de connections. Je sais pas si c'est parce que j'ai mal compris le pattern open session in view ou si il faut que j'utilise le pattern commande ou si mon pool de connections est mal réglé (utilisation de l'API c3p0) ou si c est tout simplement PostgreSQL qui est mal régler, je teste un peu tout mais je galère depuis plus d'une semaine et ça me gave.
J'aimerai bien que quelqu'un puisse me donner un coup de boost la dessus, mais j'ai pas l'impression qu'il y ai de vrai expert d'hibernate ici ou sinon c'est moi qui poste mal
Marsh Posté le 25-07-2008 à 10:52:34
brisssou a écrit : c'est quoi ton soucis ? |
En gros dés que je dépasse les 10 threads en simultanées (avec Jmeter) il me sors, Cannot open connection. Donc je me demande si ça viens de mon pool de connexion, des paramétrés de PostGres ou de la gestion de mes sessions (mauvaise utilisation des open et close de la sessionFactory).
Marsh Posté le 25-07-2008 à 11:29:09
tu veux voir un exemple d'insert? le fichier de configuration d'hibernate? le fichier de connexion?
Marsh Posté le 25-07-2008 à 14:25:07
brisssou a écrit : ouai, pourquoi pas |
ok, voila le code source.
le fichier de config :
Code :
|
le fichier de connexion:
Code :
|
un exemple de insert:
Code :
|
dis moi se que tu en pense.
Au fait, on ma suggérer de verifier que PostGres accepte plus de 10 connexion du même client. Donc je vais voir ça, mais j'aimerais savoir si je suis dans les bonnes pratiques ou non?
Marsh Posté le 25-07-2008 à 14:34:50
bonnes pratiques, je sais pas. J'ai été bombardé expert dans ma boite parce que j'étais le seul à avoir un peu d'expérience sur hibernate.
Le coup de PostGres qui ne veut pas plus de 10 comm simultanées m'a l'air pas mal vu de là. mais d'après la doc, c'est 100 par défaut.
Marsh Posté le 25-07-2008 à 15:09:18
brisssou a écrit : bonnes pratiques, je sais pas. J'ai été bombardé expert dans ma boite parce que j'étais le seul à avoir un peu d'expérience sur hibernate. |
C'est se que j'ai lu aussi, cependant, il est marqué également que cela depend des ressources systèmes et ça ne précise pas si les connexions son limites a partir du moment ou elles viennent du même client.
Tu pourrais juste me donner ton avis sur se que j'ai fait, si ça te semble correct ou pas, car si y a quelque de pas terrible j'aimerais bien le reprendre tout de suite.
Marsh Posté le 25-07-2008 à 15:13:54
Au fait j'utilise PostGres 8.3, mais c'est pareil dans la doc du 8.3 et j 'utilise hibernate 3.2
Marsh Posté le 25-07-2008 à 15:30:49
brisssou a écrit : tu pourrais nous montrer ta stacktrace aussi ? ça pourrait (éventuellement) être parlant |
C'est vrai.lol Faut que je modifie ma classe RapportErreur et je te donne ca. Au fait, je pense que c'est peut être un indice mais au bout d'un moment même mon outils d'administration de postgres ne peut plus se connecter à la base, il me dit too many connection. Donc ca veut dire que ca a depasser le quota, ca c'est sur. Reste a savoir combien de connexion son établies. Tu sais si je peux recuperer le nombre de connexion en cours sur PostGres ou le nombre de session connecté sous hibernate? ca me donnera un bonne indice déjà.
Marsh Posté le 25-07-2008 à 15:33:16
brisssou a écrit : tu pourrais nous montrer ta stacktrace aussi ? ça pourrait (éventuellement) être parlant |
voici la trace:
Code :
|
Marsh Posté le 25-07-2008 à 15:39:22
http://www.scalix.com/forums/viewtopic.php?p=31462
il parle de "local ip address", j'imagine que c'est dans les properties, essaye donc de mettre l'ip de la machine plutôt que localhost... (j'y crois bof bof mais bon)
Marsh Posté le 25-07-2008 à 16:16:58
brisssou a écrit : http://www.scalix.com/forums/viewtopic.php?p=31462 il parle de "local ip address", j'imagine que c'est dans les properties, essaye donc de mettre l'ip de la machine plutôt que localhost... (j'y crois bof bof mais bon) |
Merci du conseil, mais je travail pas en localhost, je passe par le réseau local de ma boite pour jmeter. Si tu parle des paramétrés de la connexion pour hibernate, je peux toujours tester
Marsh Posté le 25-07-2008 à 17:08:48
A ta place, je m'inspirerais de code existant. Il doit y avoir des exemples dans la doc ou dans des petits projets Hibernate, voire des exemples livrés avec Hibernate.
Par ex:
http://www.laliluna.de/first-hiber [...] orial.html
http://www.java2s.com/Code/Java/Hi [...] ernate.htm
Après, peut-être que c'est le réseau qui limite les connexions ouvertes ? Essaye avec un Postgres en local sur ton PC, pour voir ce que ça donne.
Marsh Posté le 25-07-2008 à 17:30:13
el muchacho a écrit : A ta place, je m'inspirerais de code existant. Il doit y avoir des exemples dans la doc ou dans des petits projets Hibernate, voire des exemples livrés avec Hibernate. |
Ben quand je compare a se que j'ai fait, c'est identique au niveau de la méthode. Ca me rassure un peut de voir que les exemples sont en accord avec se que j'ai fait. Je pense que le problème se situe au niveau du dialogue avec postGres.
Dans le cadre de l'élaboration de mon middelware je me suis basé sur un tutorial sur developpez.com, après j'ai optimiser et résolu mes bug tout seul. La grosse .... que j'ai fait c'est de faire les tester unitaire à la fin.
Marsh Posté le 28-07-2008 à 16:27:32
Je viens de regarder plus précisément ou ça planté. En fait mes transactions sont sans fin dans le cadre d'un insert avec une clé étrangère. Je comprend pas trop pourquoi. Prenons l'exemple cité ci dessus. Un simple insert d'un departement dans la base de données et l'ajout de la clé étrangère et ben il a besoin de 480 secondes rien que pour ça??? Je me dis qu'il doit bien avoir un problème quelque part. quelqu'un a une idée?
Marsh Posté le 29-07-2008 à 11:03:00
brisssou a écrit : bha ça peut-être tes mappings qui sentent le mouflon |
Je viens de résoudre le problème est hibernate marche, enfin et semble prêt pour la période de mise en teste réel.
En fait, j'ai cumulé deux chose:
- dans un premier temps j'ai installer une version brider de Postgres (je pouvais rien régler dessus, je m'en suis rendu compte au moment du réglage du pool de connexion)
- dans un second temps, apres avoir activer la vision des requêtes dans hibernate, je me suis rendu-compte que pour créer un objet il me faisait des milliers de sélect, ceci est dut à une mauvaise gestion de mon fetch plan.
Maintenant tout est résolut , reste plus qu'a régler le log4j qui déconne et mon parser XML .
Je touche enfin à la fin de cette partie de mon projet. Il y a pas a dire hibernate faut mettre les mains dans le cambouis quand même.lol
Merci pour votre aide précieuse à tous. Je pense que j'ai pas fini de vous poser des questions.lol
Marsh Posté le 30-07-2008 à 22:33:52
Tu peux y aller, vu que tu as l'air de te démerder tout seul comme un grand.
Pour info, où as-tu trouvé ce Postgres bridé ? Je n'ai jamais entendu parler d'une version bridée de ce SGBD.
Pour XML, si tu ne fais que de l'écriture/lecture d'objets en XML, je te conseille fortement de lâcher DOM/SAX et d'utiliser la lib xstream, qui est simplissime.
Marsh Posté le 01-08-2008 à 11:32:26
el muchacho a écrit : Tu peux y aller, vu que tu as l'air de te démerder tout seul comme un grand. |
Ok merci du conseil, j'ai trouver des infos dessus, je suis entrain de me documenté.
Par contre je viens de remarquer un truc plutôt chiant, je suis en lazy="true" et je me demander comment demander à hibernate de charger dans certains cas une liste d'objet.
Je m'explique:
Imaginons que j'ai deux tables, membre et statut. Lors de la connexion j'aimerais que le chargement du membre entraine le chargement du statut (afin d'avoir son statut en cache). Mais quand quelqu'un fait une recherche sur un utilisateur (je précise qu'il n'utilise pas la même requête), il n'a pas besoin de connaitre le statut.
Comment faire?
Marsh Posté le 01-08-2008 à 11:44:58
Je retire ma question, il suffit de faire Hibernate.initialize(Object); dans la session ouverte.
Marsh Posté le 24-07-2008 à 10:47:06
Bonjour tout le monde, j'amerai savoir si quelqu'un peut m'expliquer l'utilisation de ces deux pattern ("open session in view" / "command" ) dans le cadre d'un middelware hibernate. Donner un exemple de gestion de la sessionFactory et de son utilisation avec des deux pattern. Je voudrai savoir également les avantages et inconvénients de chacun.
Merci de votre aide. (tout lien est bon a prendre donc vous gênez pas si vous avez des liens intéressant en rapport)
---------------
En informatique, il n'y a pa de solution, que des problèmes :)