Projeto com VRaptor - Hibernate não está atualizando os dados

Fala pessoal, tudo bem?

Eu estou com um pequeno problema:

quando insiro um registro pela minha aplicação Web, as consultas funcionam perfeitamente, porém, quando eu insiro um registro pelo prompt do mySql, este não aparece na consulta pela aplicação Web, para ele aparecer, eu preciso inserir, editar ou remover um outro registro pela aplicação ou resetar o server.

Então me surgiu uma dúvida: como meu sistema é Web, terei várias pessoas usando ao mesmo tempo, logo, o que uma pessoa inserir não será visivel para outras pessoas.

PS: o Felipe Gasparino (trabalha comigo) me sugeriu que eu deixasse que o VRaptor controlasse o meu hibernate, tentei fazer, mas sem sucesso…

PS2: o meu Criador de Session Factory é @SessionScoped e não @ApplicationScoped, pois os meus clientes querem os bancos de dados separados e em servidores separados, mas a validação de usuários (se não está bloqueado) é feita em um banco de dados único para todos… Então o sistema começa no meu BD e depois é redirecionado para o BD do cliente, sendo que cada cliente pode ter vários usuários, minha dúvida persiste.

Obrigado.

Cara, estranho isso.

Se eu fizer o mesmo teste aqui funciona. Será que não é cache? Ele vê que é a mesma consulta e retorna os mesmos dados? Você habilitou algo assim no seu hibernate?

Eu também acho que é cache… Fiz o teste também com 2 navegadores diferentes, quando eu incluo em um, não aparece no outro, só quando eu faço alguma coisa… Então, não configurei nada a respeito disso… Minha consulta está assim:

@SuppressWarnings("unchecked")
	public List<Aquisicao> listarTodos() throws Exception {
		return session.createCriteria(Aquisicao.class).list();
	}

-Edit-
Encontrei isso aqui num tópico antigo:

org.hibernate.cache.NoCacheProvider

Vou tentar implementar na configuração programática…

-Edit-
Não funcionou…

Apague as classes criador-de-session e afins, e use o que está escrito aqui: http://vraptor.caelum.com.br/documentacao/componentes-utilitarios-opcionais/

Procure onde diz: Hibernate Session e SessionFactory

Isso tem cara de um flush que não está sendo executado corretamente, sendo assim o entity-manager fica com o status anterior.

Então, eu poderia deixar que o VRaptor controle as minhas Sessions e Transactions, somente?

Pois eu preciso controlar as SessionFactories…

Obrigado.

-Edit-
Não consegui fazer o VRaptor controlar as minhas dependências, como diz no site. O erro que ele dá é este (bem resumido): No matching bean of type [org.hibernate.Session] found for dependency

Adicionou isso no web.xml?

<context-param> <param-name>br.com.caelum.vraptor.packages</param-name> <param-value>br.com.caelum.vraptor.util.hibernate</param-value> </context-param>

Rafael, pelo que eu entendi vc vai ter várias sessionFactories, certo?

não é recomendável ficar criando várias sessionFactories, é bom que tenha apenas uma por banco de dados.

o ideal é você ter um componente que controla as sessionFactories:

@Component
@ApplicationScoped
public class SessionFactories { //interface/implementação se vc preferir
    //List<SessionFactory>, ou Map<Banco, SessionFactory>

    //código para abrir cada uma das sessionFactories, num @PostConstruct

    public SessionFactory get(Banco banco) {...} // ou qqer coisa que vc usa pra diferenciar
    
    //código para fechar cada uma das SF num @PreDestroy
}

um componente para selecionar e retornar a SF correta:

@Component
@RequestScoped
public class SessionFactorySelector implements ComponentFactory<SessionFactory> {
     //recebe o sessionFactories no construtor
     // recebe o que vc precisa pra descobrir qual é a sessionFactory certa

     public SessionFactory getInstance() {
          Banco banco = descobreQualEhOCerto();
          return factories.get(banco);
     }

}

um componente para abrir a sessão, pode ser uma cópia do do VRaptor:
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/util/hibernate/SessionCreator.java

um interceptor para controlar a transação. Pode ser uma cópia do VRaptor tb:
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/util/hibernate/HibernateTransactionInterceptor.java

o problema dessa solução é se vc precisar de SF diferentes pra mesma requisição, daí vc vai precisar de outros recursos (como usar o @Qualifier)

Lucas, eu estava tentando fazer justamente isso, porém tive uns problemas com o application scoped, acho que é devido ao fato de qu implementar o ComponentFacory na SessionFactories, vou tentar desta forma como você me mostrou…