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 : 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 Bean.Methode telechargement:

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 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
 
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 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
 
<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