Bonjours
sur une page JSF, je veux télécharger des fichiers volumineux, dans mon bean je me connecte sur un server FTP (FileZilla Server) à l'aide de l'API commons net, pour les fichiers de petite taille ca marche bien, mais pour les fichier dont la taille dépasse 40Mo j'ai un "java.lang.OutOfMemoryError: Java heap space"
j'ai chercher sur net, mais malheureusement, j'ai rien trouvé
Merci d'avance
codes :
page JSF :
code Bean.Methode telechargement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <h:commandLink actionListener="#{explorer.downloadListener}" immediate="true" style="text-decoration : none;"> <h:panelGrid columns="2"> <h:graphicImage id="download" value="/img/menu/download.png" style="border:0; text-decoration : none;" height="25" width="25" title="Télécharger"/> <h:outputLabel value="Télécharger" for="download" style="border:0"/> </h:panelGrid> <a4j:support oncomplete="if (#{!empty facesContext.maximumSeverity}){Richfaces.showModalPanel('Alerte1');}"/> </h:commandLink>
code Erreur :
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
39 public void downloadListener(ActionEvent evt){ FacesContext context = FacesContext.getCurrentInstance(); ExternalContext ec = context.getExternalContext(); HttpServletResponse response = (HttpServletResponse) ec.getResponse(); response.reset(); response.setHeader("Content-Transfer-Encoding", "binary"); //response.setContentType("application/download"); response.setHeader("Content-disposition", "attachment;filename=\""+ this.selectedRow.getNom() + "\""); try{ client.connect("127.0.0.1"); client.login("compteFTP", "pwdFTP"); client.setFileType(FTP.BINARY_FILE_TYPE); ServletOutputStream sop = response.getOutputStream(); InputStream ins=client.retrieveFileStream(this.selectedRow.getPath()+"/"+selectedRow.getNom()); int read=0; byte[] bytes = new byte[1024]; while((read = ins.read(bytes)) != -1){ sop.write(bytes,0,read); } sop.flush(); sop.close(); context.responseComplete(); }catch(IOException e) { e.printStackTrace(); } finally { try { client.disconnect(); } catch (IOException e) { e.printStackTrace(); } } }
code filter a4j sur le web.xml
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 GRAVE: Received 'java.lang.OutOfMemoryError' when invoking action listener '#{explorer.downloadListener}' for component 'j_id_jsp_527137651_54' 23 juil. 2010 12:46:14 javax.faces.event.MethodExpressionActionListener processAction GRAVE: java.lang.OutOfMemoryError: Java heap space at org.ajax4jsf.io.ByteBuffer.<init>(ByteBuffer.java:54) at org.ajax4jsf.io.ByteBuffer.append(ByteBuffer.java:112) at org.ajax4jsf.io.FastBufferOutputStream.write(FastBufferOutputStream.java:107) at org.ajax4jsf.webapp.FilterServletResponseWrapper$ByteArrayServletOutputStream.write(FilterServletResponseWrapper.java:277) at still.ftp.beans.ExplorerManager.downloadListener(ExplorerManager.java:1543) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.el.parser.AstValue.invoke(AstValue.java:191) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:99) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:759) at javax.faces.component.UICommand.broadcast(UICommand.java:372) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296) at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253) at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:409) at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
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 <filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> <init-param> <param-name>createTempFiles</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>maxRequestSize</param-name> <param-value>1024000000</param-value> </init-param> <init-param> <param-name>force-parser</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>enable-cache</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>regex-url-pattern</param-name> <param-value>^(?:[^/]|/(?!file/))*$</param-value> </init-param> </filter>
j'utilise
JSF1.2, RichFaces3.3.3, Tomcat6
Partager