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
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
marula
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
marula
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-appxmlns: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:
publicvoidadd(Midiamidia,UploadedFilefile){if(file!=null){StringnameFile=Math.abs(newRandom().nextLong())+"_"+userCurrent.getUser().getLogin()+file.getFileName().substring(file.getFileName().lastIndexOf("."),file.getFileName().length());midia.setFile(nameFile);midia.setUser(userCurrent.getUser());midia.setDate(newDate());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();}
<?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><propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/xxxDB</property><propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><propertyname="hibernate.connection.username">xxx</property><propertyname="hibernate.connection.password">xxx</property><propertyname="hibernate.connection.pool_size">30</property><propertyname="hibernate.show_sql">false</property><propertyname="hibernate.hbm2ddl.auto">update</property><mappingclass="br.com.xxx.midia.model.User"/><mappingclass="br.com.xxx.midia.model.Midia"/><mappingclass="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
marula
Tá fechando…
e o Xms500m e o Xmx700m
publicstaticvoidinputStreamToFile(InputStreambyteStream,StringpathFileName){InputStreambStream=null;FileOutputStreamfileOutStream=null;try{bStream=byteStream;fileOutStream=newFileOutputStream(pathFileName);byte[]buffer=newbyte[10];intnbytes=0;// Number of bytes read// file output streamwhile((nbytes=bStream.read(buffer))!=-1){// Read fromfileOutStream.write(buffer,0,nbytes);// Write to file stream}}catch(Exceptione){e.printStackTrace();}finally{try{bStream.close();}catch(Exceptione){}try{fileOutStream.close();}catch(Exceptione){}}}
M
marula
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
marula
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
marula
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
marula
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.