Erro Upload Vraptor

15 respostas
M

Pessoal,

No log está aparecendo esse erro toda hora:
11:33:52,118 WARN [CommonsUploadMultipartInterceptor] There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.
org.apache.commons.fileupload.FileUploadException: Read timed out

Estou usando o Vraptor, alguem pode ajudar?

Obrigado.

15 Respostas

M

O form estou usando assim:

<form action="<c:url value="/midia/add"/>" enctype="multipart/form-data" id="cadastrar_midia" method="post">

Ele faz o upload, mas fica dando esse erro no log…e depois de horas a aplicação não responde mais e nem gera qualquer tipo de log depois.

Vraptor3
tomcat 7

Lucas_Cavalcanti

isso acontece em alguma situação específica? tipo arquivo grande, servidor sobrecarregada ou algo do tipo?

M

Opaa…em arquivos maiores que 50MB, criei uma classe para colocar o limite no vraptor para 200MB, ou seja, o limite não é o problema.

o sistema é acessado por 2 pessoas, não tem sobrecarga… procurei no google uma solução e não achei até agora.

Obrigado.

Lucas_Cavalcanti

tem que ver se não é pq demora muito fazer o upload… isso acontece se vc fizer num servidor local?

M

Opaaa...acontece tb local, mas não todas as vezes...é muito estranho pois não acontece todas as vezes, o pior de tudo é que a aplicação depois de um tempo(umas 6h) para de responder e não mostra nada no log.

Ele entra na pagina de login, quando eu logo que vai direcionar no vraptor ele não responde...

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>xxxx</display-name>
  
  
  <context-param>
        <param-name>br.com.caelum.vraptor.packages</param-name>
        <param-value>br.com.caelum.vraptor.util.hibernate</param-value>
    
        <!-- you can add optional component packages here -->
    </context-param>
  
 
  
  
  <filter>
    <filter-name>vraptor</filter-name>
    <filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
  </filter>
  
  
  <filter-mapping>
    <filter-name>vraptor</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

  
  
  <session-config>  
   <session-timeout>30</session-timeout>    
  </session-config>  
  
  
</web-app>

Controller:

public void add(Midia midia, UploadedFile file){
		if(file != null){
			
			String nameFile = Math.abs(new Random().nextLong())+"_"+userCurrent.getUser().getLogin()+file.getFileName().substring(file.getFileName().lastIndexOf("."), file.getFileName().length());
			midia.setFile(nameFile);
			midia.setUser(userCurrent.getUser());
			midia.setDate(new Date());
			this.midiaDAO.save(midia);
			
			result.include("msg","O arquivo foi enviado com sucesso!"); // coloquei aqui a mensagem por causa do delay.
			
			Util.inputStreamToFile(file.getFile(),FILE_DIRECTORY+nameFile);
			
			sendEmail(midia);
		}
		
		result.redirectTo(MidiaController.class).form();
	}
@Component
public class MidiaDAO extends GenericDAO<Midia> {

	public MidiaDAO(Session session) {
		super(session);

	}

	public List<Midia> find(Midia midia, Date dataBegin, Date dataEnd) {
		Criteria criteria = session.createCriteria(Midia.class);
		
		criteria.createAlias("user", "u");
		criteria.add(Restrictions.between("date",dataBegin, Util.addDayDate(dataEnd, 1)));
		
	
		if (!midia.getUser().getCity().getId().equals(0L)) {		
			criteria.createAlias("u.city", "c");
			criteria.add(Restrictions.eq("c.id", midia.getUser().getCity()
					.getId()));
		}
		
		return criteria.list();

	}

}
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
	
<hibernate-configuration>

	<session-factory>
	
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xxxDB</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.username">xxx</property>
		<property name="hibernate.connection.password">xxx</property>
		
             <property name="hibernate.connection.pool_size">30</property>

		<property name="hibernate.show_sql">false</property>
		<property name="hibernate.hbm2ddl.auto">update</property> 
		

 		<mapping class="br.com.xxx.midia.model.User" />
 		<mapping class="br.com.xxx.midia.model.Midia" />
 		<mapping class="br.com.xxx.midia.model.City" />


	</session-factory>

</hibernate-configuration>
Lucas_Cavalcanti

tenta fechar os inputStreams e ver o porque da aplicação estar travando… talvez seja alguma coisa ficando na memória mais do que deveria.

às vezes mexer nos parâmetros do java no servidor (-Xmx -Xms, etc) resolve

M

Tá fechando…
e o Xms500m e o Xmx700m

public static void inputStreamToFile(InputStream byteStream, String pathFileName) {

		InputStream bStream = null;
		FileOutputStream fileOutStream = null;
		try {

			bStream = byteStream;

			fileOutStream = new FileOutputStream(pathFileName);

			byte[] buffer = new byte[10];
			int nbytes = 0; // Number of bytes read

			// file output stream
			while ((nbytes = bStream.read(buffer)) != -1) { // Read from

				fileOutStream.write(buffer, 0, nbytes); // Write to file stream
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bStream.close();
			} catch (Exception e) {
			}
			try {
				fileOutStream.close();
			} catch (Exception e) {
			}

		}

	}
M

Primeiro projeto em Vraptor, estou quase voltando para o JSF. Nunca tive esse problema.

Até pensei que fosse alguma configuração que tivesse esquecido… por isso enviei todos os arquivos…para ver se alguem ver algum problema que não estou enxergando…

ahhh…muito obrigado por responder…

Lucas_Cavalcanti

sugiro que vc use códigos já prontos pra fazer isso… no Guava tem o ByteStreams que já faz isso pra vc… tem alguns no Apache commons tb…

tente não reinventar a roda, esse tipo de coisa geralmente tá pronto pra vc…

no mais vc deveria tentar entender o que está acontecendo na aplicação que faz com que ela trave… Monitore as conexões ao banco de dados, veja se todas estão sendo fechadas, veja se a memoria do servidor está crescendo descontroladamente, etc

M

Surgiu uma duvida…o Vraptor já não fecha as conexões do hibernate?

Obrigado novamente…

Lucas_Cavalcanti

depende… só se vc está usando o componente dele pra isso (pacote do hibernate ou da jpa no web.xml)…

M

Isso aqui…perfeito?

<context-param>  
        <param-name>br.com.caelum.vraptor.packages</param-name>  
        <param-value>br.com.caelum.vraptor.util.hibernate</param-value>  
      
        <!-- you can add optional component packages here -->  
    </context-param>

Cara muito obrigado pelas respostas numa sexta-feira…valeu mesmo!!!

Lucas_Cavalcanti

isso… as conexões deveriam ser fechadas sim… só uma dúvida: vc está usando spring, guice ou pico?

M

Não configurei em nenhum lugar, baixei a app(blank) de exemplo do vraptor. Precisa configurar em algum lugar?

Meu web.xml é esse que enviei acima…

Lucas_Cavalcanti

bom, acho que vc precisa fazer um profile da sua aplicação pra tentar descobrir pq ela tá travando. Tente usar algum como o lambda probe ou o JProfiler e ver o que tá fazendo ela travar.

Criado 31 de maio de 2012
Ultima resposta 1 de jun. de 2012
Respostas 15
Participantes 2