[Resolvido] - PrimeFaces X Jelastic X p:fileUpload

10 respostas
leo.alvesneuwald

Boa noite Pessoal,

Estou com um problema com o p:fileUpload do PrimeFaces em Produção no Jelastic. (No localhost funciona)

Eu tento faze um upload de um arquivo, e ele fica carregando e nunca termina. Depois apresenta o seguinte erro no console:
Jan 8, 2013 3:28:05 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/timbre] threw exception
java.io.IOException: Processing of multipart/form-data request failed. Read timed out
	at org.primefaces.webapp.MultipartRequest.parseRequest(MultipartRequest.java:69)
	at org.primefaces.webapp.MultipartRequest.<init>(MultipartRequest.java:51)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.timbre.filter.FilterLogin.doFilter(FilterLogin.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

Já tentei fazer várias coisas: Segue o log do Catalina:
Jan 8, 2013 3:28:05 AM org.primefaces.webapp.MultipartRequest parseRequest
SEVERE: Error in parsing fileupload request

web.xml:
<servlet>
    	<servlet-name>Faces Servlet</servlet-name>
    	<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    	<load-on-startup>1</load-on-startup>
  	</servlet>
  	<servlet-mapping>
	    <servlet-name>Faces Servlet</servlet-name>
    	<url-pattern>*.jsf</url-pattern>
  	</servlet-mapping>
  	<filter>
    	<filter-name>PrimeFaces FileUpload Filter</filter-name>
    	<filter-class> org.primefaces.webapp.filter.FileUploadFilter</filter-class>
  	</filter>
  	<filter-mapping>
    	<filter-name>PrimeFaces FileUpload Filter</filter-name>
    	<servlet-name>Faces Servlet</servlet-name>
  	</filter-mapping>
página:
<div class="controls controls-row">
							<h:outputLabel for="foto" value="Foto:" style="font-weight:bold" />						
							<p:fileUpload id="foto" fileUploadListener="#{instrumentoBean.handleFileUpload}" styleClass="span6" dragDropSupport="true" auto="true" mode="advanced" label="Selecione" update="growlDetail" sizeLimit="1000000" allowTypes="/(\.|\/)(jpe?g|png)$/"/>
						</div>
MB:
public void handleFileUpload(FileUploadEvent event) {
		System.out.println("Vai 1");
		
		instrumento.setiFotoInstrumento(arquivo.upload(event));
		if (instrumento.getiFotoInstrumento() == null) {
			System.out.println("Vai 2");
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage("Erro! ", event.getFile().getFileName()
							+ " não foi enviada."));
		} else {
			System.out.println("Vai 3");
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage("Sucesso! ", event.getFile().getFileName()
							+ " foi enviada."));
		}
	}

Não sei mais o que pode estar com problema. Se alguém puder ajudar.

10 Respostas

tmvolpato

você tem isso adicionado no seu form

enctype="multipart/form-data"

no seu método não vi onde está sendo salvo esse arquivo

leo.alvesneuwald

Dae tmvolpato!

Então. Isso tm no meu form sim.

Mas o problema eh que ele nem chama a 1 linha do listener handleFileUpload

leo.alvesneuwald

Alguém?

M

Olá amigo leo.alves, tente colocar o codigo abaixo:

<filter>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
   <init-param>
       <param-name>uploadDirectory</param-name>
      <param-value>D:/temp</param-value>
   </init-param>
   <init-param>
     <param-name>thresholdSize</param-name>
     <param-value>10000</param-value>
   </init-param>
</filter>

<filter-mapping>
   <filter-name>PrimeFaces FileUpload Filter</filter-name> 
   <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

Pelo que percebi você não adicionou o local e nem a classe responsável por realizar o upload…

Espero ter ajudado…

Abraços,
Felipe Mozena

leo.alvesneuwald

mozena:
Olá amigo leo.alves, tente colocar o codigo abaixo:

<filter>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
   <init-param>
       <param-name>uploadDirectory</param-name>
      <param-value>D:/temp</param-value>
   </init-param>
   <init-param>
     <param-name>thresholdSize</param-name>
     <param-value>10000</param-value>
   </init-param>
</filter>

<filter-mapping>
   <filter-name>PrimeFaces FileUpload Filter</filter-name> 
   <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

Pelo que percebi você não adicionou o local e nem a classe responsável por realizar o upload…

Espero ter ajudado…

Abraços,
Felipe Mozena

Opa, vou testar agora!

Somente não coloquei a classe que faz o upload pq ele nem chama o listener do MB (fileUploadListener="#{instrumentoBean.handleFileUpload}") não executa o método public void handleFileUpload(FileUploadEvent event) { … Lembrando que so acontece em produção, no local funciona perfeito =/
Ele fica ‘travado’ no PrimeFaces parece.

M

Como ocorre em produção, verifique se o usuário do servidor web possui acesso de criar,editar,excluir pastas/arquivos do diretório informado.

leo.alvesneuwald

Então. Mas “eu” não crio arquivos em nenhum diretório. O meu arquivo é salvo diretamente no MySql. So se o primefaces faz isso automaticamente.

M

ahhh e uma coisa importante…

Isso se sua aplicação tiver um volume grande de informações e não precisar guardar o arquivo físico, crie uma classe (HttpSessionListener) que apague os arquivos salvos no servidor…Caso contrario, poderá ter problemas com espaços.

leo.alvesneuwald

Pessoal, consegui resolver. O problema estava no nginx do Jelastic. Enfim, se alguém tiver esse problema experimenta configurar ele corretamente ou retirar o mesmo. Obrigado ai mozena!

M

Tanto o primefaces, como o icefaces precisam de um diretório para realizar o upload do arquivo. Mesmo que seja temporário…

Criado 8 de janeiro de 2013
Ultima resposta 9 de jan. de 2013
Respostas 10
Participantes 3