Bonjour j'ai un problème dans une requete sur table avec hibernate quand je lance par exemple "from utilisateur" tout plonte et je suis obligé de redemarrer la machine sachant que ma table contient 100 enregistrement
Bonjour j'ai un problème dans une requete sur table avec hibernate quand je lance par exemple "from utilisateur" tout plonte et je suis obligé de redemarrer la machine sachant que ma table contient 100 enregistrement
si "tout plonge" inclu ce qui se trouve en dehors de java, je dirais que ta machine a un sérieux problème Avec du code java, tout ce que tu risque c'est de saturer la JVM ou éventuellement de bouffer tout le CPU, mais dans ce cas la, killer la jvm suffit à rétablir ta machine. Peux tu nous montrer ce qui sort quand tu met show_sql à true ainsi que tes fichiers de mapping?
le test je le fais dans une page jsp où j'appel ma méthode quand je lance la page tout plonte et j'ai pas la main de voir la console
ton conteneur devrais rediriger les logs vers un fichier de log, tu n'a qu'à le lire après arrêt. Peux-tu estre plus précis sur "Tout plonge" ? On peux voir ton code?
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 public List<RTable> findAll() { try { org.hibernate.Transaction tx = session.beginTransaction(); List<RTable> table = (List<RTable>)session.createQuery("from RTable ").list(); return table; } catch (RuntimeException re) { re.printStackTrace(); return new ArrayList<RTable>(); } } dans ma page jsp : <% TableDaoImp usi=new TableDaoImp(); try{ List t=usi.findAll(); int tsize=utilisateur.size(); out.print("<tr><th><b>Nom</b></th><th><b>Libelle</b></th></tr>"); for (int i = 0; i < tsize; i++) { RTable qs = (RTable) t.get(i); out.print("<tr>"); out.print("<td><b>" + qs.getNom() + "</b></td>"); out.print("<td><b>" + qs.getLibelle() + "</b></td>"); out.print("</tr>"); } }catch(Exception e){ out.print(e.getMessage()); }*/ %>
il manque toujours le mapping demandé au premier post. Aussi, tu ne nous dit toujours pas ce que tu entends par "plonge" , le jsp n'est pas complet et le bout que tu montre est manifestement en commentaire (présence du */ à la fin)
Pour le mapping de la table R_table :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 16 juil. 2009 16:50:58 by Hibernate Tools 3.2.1.GA --> <hibernate-mapping> <class name="com.test.model.RTable" table="R_tables" catalog="SourceMagest"> <id name="tableId" type="int"> <column name="TableID" /> <generator class="assigned" /> </id> <property name="tableNom" type="string"> <column name="TableNom" length="50" not-null="true" /> </property> <property name="tableLibelle" type="string"> <column name="TableLibelle" length="70" not-null="true" /> </property> <set name="RChpses" inverse="true"> <key> <column name="TableID" not-null="true" /> </key> <one-to-many class="com.test.model.RChps" /> </set> <set name="RUtilisateurs" inverse="true" table="R_utiltables"> <key> <column name="TableID" not-null="true" /> </key> <many-to-many entity-name="com.test.model.RUtilisateur"> <column name="UtilCode" length="30" not-null="true" /> </many-to-many> </set> </class> </hibernate-mapping>J'ai testé sur une autre methode getTable(int id) la meme chose la machine se plonte et j'ai po la main pour faire aucune chose :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Hello World!</h1> <table> <% //UtilisateurDaoImp usi=new UtilisateurDaoImp(); TableDaoImp tdi=new TableDaoImp(); int i=5; try{ RTable t=tdi.getTable(i); out.print("<tr><th><b>Nom</b></th><th><b>Libelle</b></th></tr>"); out.print("<tr>"); out.print("<td><b>" + t.getTableNom() + "</b></td>"); out.print("<td><b>" + t.getTableLibelle() + "</b></td>"); out.print("</tr>"); }catch(Exception e){ out.print(e.getMessage()); } %> </table> </body> </html>
la méthode :
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 public RTable getTable(int id) { try { org.hibernate.Transaction tx = session.beginTransaction(); RTable table =(RTable) session.createQuery("from RTable as t where t.tableId=:id").setParameter("id",id).uniqueResult(); return table; } catch(Exception e) { e.printStackTrace(); return null; } }
il y a a priori combien d'élément en moyen dans le set pointé par le table? Le serveur de base de données et sur la meme machine que le serveur J2EE et que le borwser? Essaie de séparer sur des machines différent pour voir laquelle plante, mais java ne fait jamais planter une machine. T'aurais pas de la RAM defectueuse par hasard?
la base de données et conteneur j2ee sont sur la meme machine et j'ai 1 Go de RAM ta table contient environ 100 enregistrement
Je parlais du set "<set name="RUtilisateurs">" pas de la premier table. As-tu essayé de changer de machine pour tes test. encore une fois, meme avec les pire crasse dans une jvm difficile de mettre la machine physique à genoux.
a e moment j'ai pas une autre machine de test mais le problème que si je test avec la table utilisateur tout marche b1 sauf la table r_table qui pose problème
comment lance tu ta jvm, quelle est la taille de la table R_utiltables, on peut voir le mapping de R_utiltables? Si tu fais du pas à pas, ca foire quand?
DANS LE FICHIER R_table.hbm
dans le fichier r_utilisateur.hbm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <set name="RUtilisateurs" inverse="true" table="R_utiltables"> <key> <column name="TableID" not-null="true" /> </key> <many-to-many entity-name="com.test.model.RUtilisateur"> <column name="UtilCode" length="30" not-null="true" /> </many-to-many> </set>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <set name="RTables" inverse="false" table="R_utiltables"> <key> <column name="UtilCode" length="30" not-null="true" /> </key> <many-to-many entity-name="com.test.model.RTable"> <column name="TableID" not-null="true" /> </many-to-many> </set>
on peut voir le mapping de R_utiltables "complet"? Toujours pas répondu à cette question: "quelle est la taille de la table R_utiltables" ni à "Si tu fais du pas à pas, ca foire quand? "....
Et pense à rajouter lazy="true" sur tes collections pour limiter la quantité de données à pomper en une seule fois de la db.
la R_UTILTABLES EST VIDE , j ai po compris "Si tu fais du pas à pas, ca foire quand? " comment je peux faire du pas à pas .
j'ai pas un fichier qui s'appel r_utiltables.hbm cette table est mappée dans les 2 autre fichier de r_table et r_utilisateur
Et j'ai pas demandé ce fichier, j'ai demandé le mapping dans la table, tu aura compris qu'il s'agit donc dans ton cas du fichier r_utilisateur.hbmj'ai pas un fichier qui s'appel r_utiltables.hbm
Note que je suis meme pas sur qu'il s'agisse d'un problème d'hibernate. Il faudrait tester sur une autre machine avant et séparer le serveur du browser et de la database pour voir lequel met ta machine à genoux.
Aussi remplace les
out.print(e.getMessage());
par des e.printStackTrace(), histoire d'avoir une trace dans les logs de l'exception et pouvoir la lire au démarrage suivant.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager