[WINNER INSIDE] Je suis fort en algo que j'arrive à planter ma bécane

Je suis fort en algo que j'arrive à planter ma bécane [WINNER INSIDE] - Java - Programmation

Marsh Posté le 07-05-2004 à 17:23:30    

Yop !
 
Je suis en train de créer un forum en Java.
 
Le principe est simple. Il y a des messages "parents" et des messages "enfants" (c-a-d des réponses aux messages parents).
 
Et j'ai réussi à le coder d'une façon tellement merdique que j'ai un joli plantage d'Eclipse et une petite fenêtre "out of memory" qui s'affiche.
 
J'ai une page jsp toute conne :
 

Code :
  1. <%@page import="miage.bean.*"%>
  2. <%@page import="java.util.*"%>
  3. <% Vector vec = Message.getMessages(); %>
  4. <table>
  5. <% for (int i = 0; i < vec.size(); i++) { %>
  6. <tr>
  7.  <td>
  8.   <%
  9.    Message msg = (Message) vec.get(i);
  10.    out.println(msg.getTitre());
  11.   %>
  12.  </td>
  13. </tr>
  14. <%}%>
  15. </table>


 
Et voilà mon bean :
 

Code :
  1. /*
  2. * Created on 7 mai 2004
  3. *
  4. */
  5. package miage.bean;
  6. import java.sql.*;
  7. import java.util.*;
  8. import javax.naming.*;
  9. import javax.sql.DataSource;
  10. /**
  11. * @author eric.ledonge@free.fr
  12. *
  13. */
  14. public class Message implements java.io.Serializable {
  15. private int identifiant;
  16. private int identifiantPere;
  17. private String visiteur;
  18. private String date;
  19. private String titre;
  20. private String corps;
  21. private static final String select = "SELECT identifiant, identifiantPere, visiteur, date, titre, corps  FROM MESSAGE";
  22. public Message() {
  23. }
  24. public Message(ResultSet rs) throws SQLException {
  25.  init(rs);
  26. }
  27. public void init(ResultSet rs) throws SQLException {
  28.  this.identifiant = rs.getInt("identifiant" );
  29.  this.identifiantPere = rs.getInt("identifiantPere" );
  30.  this.visiteur = rs.getString("visiteur" );
  31.  this.date = rs.getString("date" );
  32.  this.visiteur = rs.getString("titre" );
  33.  this.corps = rs.getString("corps" );
  34. }
  35. static Connection getConnection() {
  36.  try {
  37.   Context ctx = new InitialContext();
  38.   if(ctx == null ) throw new Exception("Erreur : pas de context" );
  39.   System.out.println(ctx);
  40.   DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/forum" );
  41.   return ds.getConnection();
  42.  }
  43.  catch (Exception e) {
  44.   System.out.println("Erreur : " + e);
  45.   return null;
  46.  }
  47. }
  48. public static Vector getMessages() throws SQLException {
  49.  Connection con = null;
  50.  Statement stm = null;
  51.  ResultSet rs = null;
  52.  Vector vec = new Vector();
  53.  try {
  54.   con = getConnection();
  55.   stm = con.createStatement();
  56.   rs = stm.executeQuery(select);
  57.   while (rs.next()) {
  58.    // Je récupère un message de la base de données
  59.    Message msg = new Message(rs);
  60.    // Je vérifie l'indentifiant père du message afin de savoir si c'est un message racine
  61.    if (msg.getIdentifiantPere() == 0) {
  62.     // Si oui, j'ajoute ce message à la fin du vecteur
  63.     vec.add(msg);
  64.     System.out.println(msg);
  65.    }
  66.    else {
  67.     // Sinon, je recherche la position du père successeur de son père dans le vecteur
  68.     boolean trouve = false;
  69.     int cpt = 0;
  70.     Enumeration en = vec.elements();
  71.     while (en.hasMoreElements() || trouve == false) {
  72.      Message buf = (Message) en.nextElement();
  73.      if ((buf.getIdentifiant() + 1) == msg.getIdentifiantPere()) {
  74.       vec.add(cpt, msg);
  75.       System.out.println(msg);
  76.      }
  77.      else {
  78.       vec.add(msg);
  79.       System.out.println(msg);
  80.      }
  81.      cpt++;
  82.     }
  83.    }
  84.   }
  85.  }
  86.  finally {
  87.   if (rs != null) rs.close();
  88.   if (stm != null) stm.close();
  89.   if (con != null) con.close();
  90.  }
  91.  return vec;
  92. }
  93. public int getIdentifiantPere() {
  94.  return this.identifiantPere;
  95. }
  96. public void setIdentifiantPere(int identifiantPere) {
  97.  this.identifiantPere = identifiantPere;
  98. }
  99. public int getIdentifiant() {
  100.  return this.identifiant;
  101. }
  102. public void setIdentifiant(int identifiant) {
  103.  this.identifiant = identifiant;
  104. }
  105. public String getTitre() {
  106.  return this.titre;
  107. }
  108. }


 
Quelqu'un aurait une petite idée ?

Reply

Marsh Posté le 07-05-2004 à 17:23:30   

Reply

Marsh Posté le 07-05-2004 à 17:46:41    

Ouais, Message.getMessages() charge tous les messages de ton forum ?
C'est pas un peu complètement bourrin ?

Reply

Marsh Posté le 07-05-2004 à 17:53:59    

Peut-être que oui en effet :pt1cable:  
 
Ce code est en fait issu d'un remodelage personnel d'un exemple se trouvant dans le bouquin Tomcat par la pratique chez Eyrolles.
 
L'exemple fonctionnait bien, j'ai donc pensé le réadapter à mon pb.
 
Mais comment puis-je alors m'y prendre pour faire le traitement qui consiste à afficher dans le bon ordre les messages racineset leurs réponses ?
 
C'est dommage que ça bouffe autant de mémoire car je trouvais cette méthode pas mal :)

Reply

Marsh Posté le 09-05-2004 à 21:15:00    

tu vas me faire le plaisir de virer ton code d'acces aux données en dehors du bean [:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-05-2004 à 21:16:11    

je parie sur un stack overflow typique du récursif

Reply

Marsh Posté le 10-05-2004 à 14:45:06    

C'est quoi un bean?
Je veux dire, pour de vrai. Parce que tout ce que j'ai lu c'était imcompréhensible. Pas la peine d'implémenter ou de dériver quoi que ce soit?
 
Suffi de faire n'importe quoi en JAVA et de dire "Mais qu'est-ce que c'est que ce bean ? "

Reply

Marsh Posté le 11-05-2004 à 09:05:00    

Citation :

<% Vector vec = Message.getMessages(); %>


Les vector c mal


Message édité par meumeul le 11-05-2004 à 09:05:23
Reply

Marsh Posté le 11-05-2004 à 09:05:35    

meumeul a écrit :

Citation :

<% Vector vec = Message.getMessages(); %>


Les vector c mal


:??: explique...

Reply

Marsh Posté le 11-05-2004 à 11:32:33    

JagStang a écrit :

:??: explique...

c'est un moyen courant de se la péter dans le milieu des semi-noobs qui viennent d'apprendre qu'il vaut mieux utiliser un ArrayList qui est un vector non synchronizés, meme milieu qui croit que la synchronization tue les performances.
Jusqu'a ce qu'ils se rendent compte qu'ils gagneraient autant à utiliser LinkedList dans les 3/4 des cas :ange:

Reply

Marsh Posté le 11-05-2004 à 11:41:38    

the real moins moins a écrit :

c'est un moyen courant de se la péter dans le milieu des semi-noobs qui viennent d'apprendre qu'il vaut mieux utiliser un ArrayList qui est un vector non synchronizés, meme milieu qui croit que la synchronization tue les performances.
Jusqu'a ce qu'ils se rendent compte qu'ils gagneraient autant à utiliser LinkedList dans les 3/4 des cas :ange:


 
LinkedList et ArrayList c'est pas du tout la même chose : le choix est purement algorithmique, on voit ça sur les bans de la fac ou autre (cout insertion/deletion, etc.), aucune raison qu'on fasse chier qqun avec ça ici?
 
Synchronized ou non, c'est une question technique sur le langage, c'est normal que l'on en parle plus souvent...  
 
De toute façon, les 3/4 du temps, la solution la plus performante reste les tableaux.

Reply

Marsh Posté le 11-05-2004 à 11:41:38   

Reply

Marsh Posté le 11-05-2004 à 11:48:54    

oui oui, je deconnais :o
(cela dit, il existe bcp de code ou le choix n'est pas fait entre LinkedList et ArrayList, et ArrayList est utilisé "à priori", du moins dans le code que je vois tous les jours c'est comme ça :D)

Reply

Marsh Posté le 11-05-2004 à 11:53:55    

the real moins moins a écrit :

oui oui, je deconnais :o
(cela dit, il existe bcp de code ou le choix n'est pas fait entre LinkedList et ArrayList, et ArrayList est utilisé "à priori", du moins dans le code que je vois tous les jours c'est comme ça :D)


 
pov meumeul, il risque de mal le prendre et on va plus jamais le revoir de par chez nous  :(  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed