Bonjour,
je travail avec Tomcat 5.5, Java et JSP.
J'ai une page JSP contenant une table:
Cette table est "remplie" avec son bean Java:
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 <h:dataTable id="logDetails" var="item" value="#{logDetails.items}" styleClass="standardTable" headerClass="standardTable_Header" footerClass="standardTable_Header" rowClasses="standardTable_Row1,standardTable_Row2" columnClasses="standardTable_Column,standardTable_Column,standardTable_ColumnCentered,standardTable_ColumnCentered,standardTable_ColumnCentered,standardTable_Column"> <h:column> <f:facet name="header"> <h:outputText value="Time" /> </f:facet> <h:outputText value="#{item.CreationTime}" style="font-size: 10px" > <f:convertDateTime pattern="HH:mm:ss" /> </h:outputText> </h:column> .......
et ma fonction Java, toVector:
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 Vector getItems() throws SQLException { Connection connection = DBHelper.getDBConnection(); try { PreparedStatement stmt = connection.prepareStatement(SQL_SELECT_LOG_DETAILS); stmt.setString(1, sessionID); ResultSet rs = stmt.executeQuery(); return ResultSupport.toVector(rs); } finally { connection.close(); } }
Pour accéder à cette page j'ai un lien depuis une autre page. J'ai remarqué que chaque fois que je clique sur ce lien, la mémoire utilisé pas Tomcat (gestionnaire de taches) augment à chaque fois, elle ne rédiminue plus quand je change de page. Je crois que c'est ça la cause mon problème.
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 public static Vector toVector(ResultSet rs) throws SQLException { ResultSetMetaData rsmd = rs.getMetaData(); int noOfColumns = rsmd.getColumnCount(); String[] columnNames = new String[noOfColumns]; for (int i = 1; i <= noOfColumns; i++) { columnNames[i-1] = rsmd.getColumnName(i); } Vector result = new Vector(); while (rs.next()) { SortedMap<String, Object> columnMap = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER); for (int i = 0; i < noOfColumns; i++) { Object value = null; if (rsmd.getColumnType(i) == Types.CLOB) { value = rs.getString(i); // workaround for TEXT datatype } else { value = rs.getObject(i); } if (rs.wasNull()) { value = null; } columnMap.put(columnNames[i-1], value); } result.add(columnMap); } return result; }
Si je clique sur ce lien plusieurs fois (genre utilisateur stressé qui veut vite ouvrir et qui ne sais pas que cliquer plusieurs fois ne sert à rien ) et que la table est grosse (~60 lignes) j'ai une erreur de "Java heap space".
à partir de ce moment la, je ne peux presque plus rien ouvrir de mon site web, j'ai toujours cette erreur. A part des toutes petites tables (2lignes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 javax.servlet.ServletException: Java heap space javax.faces.webapp.FacesServlet.service(FacesServlet.java:125) org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:112) javax.faces.FacesException: Java heap space org.apache.jasper.JasperException: Java heap space javax.servlet.ServletException: Java heap space java.lang.OutOfMemoryError: Java heap space
J'ai remarqué que si j'ouvre des pages contenant des tables plus petites (~40 lignes), j'ai une autre erreur:
Je peux vous donner la trace complète de la cause mère de cette erreur, si nécessaire. Et d'autres parties de code?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 javax.servlet.ServletException: org.apache.jasper.JasperException javax.faces.webapp.FacesServlet.service(FacesServlet.java:125) org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:112) javax.faces.FacesException: org.apache.jasper.JasperException org.apache.jasper.JasperException java.lang.ArrayIndexOutOfBoundsException
Ma question est: comment gérer ça? Comment éviter l'erreur, ou au moins éviter de devoir redémarrer Tomcat si cela arrive??
Je ne veux pas augmenter la taille de la mémoire alloué, en cas normal c'est suffisant...et le mieux serais que la mémoire utilisé par Tomcat n'augmente sans cesse...
J'espère que quelqu'un ici puisse m'éclairer un peut...
Partager