[RESOLVIDO]Erro: javax.faces.application.ViewExpiredException (JSF + Hibernate + JBoss 6.0 + MySql)

E aew, pessoar! Tudo jóia?
Seguinte… Eu to tentando desenvolver uma aplicação web usando as tecnologias descritas no título desse tópico.
Tudo funciona até um certo momento. O dado que eu coloco no campo “Nome” é persistido após eu dar um “ok”, mas depois de um tempo, a sessão é fechada e eu não sei como abrí-la de novo, nem sei como fazer p/ não perdê-la.
Deixa de ser possível persistir algum dado depois disso.

O erro é esse aqui:

20:07:21,739 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/ExerJPAWeb].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: javax.faces.application.ViewExpiredException: viewId:/index.jsp - A exibição de /index.jsp não pôde ser restaurada. at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212) [:2.0.2-FCS] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [:2.0.2-FCS] at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110) [:2.0.2-FCS] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [:2.0.2-FCS] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) [:2.0.2-FCS] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:336) [:6.0.0.20100429-M3] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.20100429-M3] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:293) [:6.0.0.20100429-M3] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.20100429-M3] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183) [:6.0.0.20100429-M3] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95) [:6.0.0.20100429-M3] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) [:6.0.0.20100429-M3] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) [:6.0.0.20100429-M3] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.20100429-M3] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.20100429-M3] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.20100429-M3] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.20100429-M3] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [:6.0.0.20100429-M3] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:872) [:6.0.0.20100429-M3] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [:6.0.0.20100429-M3] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.20100429-M3] at java.lang.Thread.run(Unknown Source) [:1.6.0_18]

Eu num sei se é um erro no persistence.xml, no hibernate.cfg.xml, ou no faces, web.xml… Poutz, já tentei alterações em todos e até agora nada. :o(
Alguém já teve esse problema e conseguiu resolver?

Como está a configuração do seu web.xml:

???

Você pode redirecionar quando ocorrer este “erro” para uma página de abertura de sessão. O problema é que pode mascarar outros erros.

javax.servlet.ServletException /index.jsp

Olá, Barbon. Primeiramente, gostaria de agradecer pela iniciativa de me ajudar.

Segue abaixo a minha configuração do 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>ExerJPAWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <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>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>-1</session-timeout> </session-config> </web-app>

Olá,

Considerando que a sua sessão expira em “-1”, que significa que não expira, observe a seguinte solução:

http://www.guj.com.br/posts/list/0/85236.java#460553

Até.

Valew, Barbon! Realmente aquele link me ajudou com relação a isso.
O problema agora é que os dados não estão mais sendo persistido no banco. Num sei porque, mas ao clicar em “ok”, o nome que eu digitei num aparece na tabela que eu criei. Continua vazia.
Vou postar alguns códigos aqui.

Cliente.java

[code]package br.com.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Cliente {

@Id
@Column(name="id")
@GeneratedValue
private int id;
@Column(name="nome")
private String nome;

public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

public String toString(){
	return this.nome;
}

}
[/code]

TestePersist.java

[code]package br.com.entities;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import br.com.entities.Cliente;

public class TestePersist {

public void persistCliente(Cliente cliente){
	AnnotationConfiguration configuration = new AnnotationConfiguration();
	configuration.configure();

	SessionFactory factory = configuration.buildSessionFactory();
	Session session = factory.openSession();

	Transaction tx = session.beginTransaction();
	session.save(cliente);
	tx.commit();
	session.close();
}

}
[/code]

hibernate.cfg.xml

[code]

org.hibernate.dialect.MySQLDialect" root mendesdb jdbc:mysql://localhost:3306/MendesDatabase com.mysql.jdbc.Driver org.hibernate.dialect.MySQL5InnoDBDialect update true true java:/DefaultDS 1000 [/code]

persistence.xml

[code]

<?xml version="1.0" encoding="UTF-8"?> org.hibernate.ejb.HibernatePersistence java:/DefaultDS br.com.entities.Cliente [/code]

Creio que o erro esteja entre esses códigos, mas é estranho… Num fiz alterações relevantes neles p/ parar de persistir no banco. Muito esquisito.

Qual o erro que é capturado?

Então! Num tá dando erro. Aparece no log os comandos sql e tudo mais…:

20:35:14,746 INFO [STDOUT] Hibernate: 20:35:14,746 INFO [STDOUT] insert 20:35:14,747 INFO [STDOUT] into 20:35:14,747 INFO [STDOUT] Cliente 20:35:14,747 INFO [STDOUT] (nome, id) 20:35:14,747 INFO [STDOUT] values 20:35:14,747 INFO [STDOUT] (?, ?)

Eu acho que até aí tá certo, mas os dados não estão indo p/o banco.

Tente o seguinte para capturar o possível erro:

 public void persistCliente(Cliente cliente){  
         AnnotationConfiguration configuration = new AnnotationConfiguration();  
         configuration.configure();  
   
         SessionFactory factory = configuration.buildSessionFactory();  
         Session session = factory.openSession();  
   
        try { 
            Transaction tx = session.beginTransaction();  
            session.save(cliente);  
            tx.commit();  
            session.close();
        }catch(Exception e){
            e.printStackTrace();
        }  
     }  

Então, cara. Num adiantou e eu acho que já sei o porquê. Num tá dando erro. Ele num tá persistindo deve ser porque ele tá fazendo tudo certo, mas aí ele joga os dedos “p/o além”, rs rs rs… Aí num tem como dar erro. Eu acho, né? Posso estar errado.
To achando que tá só faltando alguma configuração nesses xml’s aí.
Muito estranho isso estar acontecendo agora. PQP! Era só o problema do timeout que tava acontecendo. Agora que arrumei o timeout, fica esse.

Aew! Deu certo!!
Eu tirei os meus códigos do projeto web (.xml’s, .jsp’s e .java’s), excluí o projeto e o criei de novo, colocando os códigos nele novamente.
Após isso, eu dei uma revisada importante nos jars que estou usando no classpath da camada de persistência. São eles…:
hibernate3
hibernate-annotations
hibernate-jpa-2.0-api-1.0.0.Final
mysql-connector-java-5.1.7-bin

Ah, sem contar que antes eu tava usando o hibernate.cfg.xml e o Cliente.hbm.xml dentro do projeto que controla as entidades e a persitência, e não no projeto web. Coloquei no WEB-INF e deu tudo certo.

Vou ficar de olho nesse tópico. Qualquer coisa, se eu puder ajudar quem tiver o mesmo erro, eu tento ajudar com o que eu sei.

Valews mesmo, Barbon!