Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Vraptor + OpenSessionInView

Olá,

Em vários lugares na internet, inclusive no GUJ, pesquisando por Open Session In View muitas pessoas referem-se a esse padrão como sendo um anti-pattern e recomendam atualmente evitar o uso do padrão ` ex:http://pt.stackoverflow.com/questions/22215/por-que-o-pattern-open-session-in-view-%C3%A9-considerado-um-anti-pattern

No entanto no curso de Controle de horas com Java temos a implementação do EntityManagerProducer:

@ApplicationScoped
public class EntityManagerProducer{
    private static EntityManagerFactory factory = 
        Persistence.createEntityManagerFactory("default");
    @Produces @RequestScoped   
    public EntityManager getEntityManager(){
        return factory.createEntityManager();
    }
    public void close(@Disposes EntityManager manager){
        manager.close();
    }
}

oque pra mim não deixa de ser um OSV, pois o entitymanager vaificar aberto por toda a vida do request, eu poderia inclusive tratar as transações nessa classe produtora, e toda implementação de classe produtora de entitymanager que vc pesquisa em livros ou na internet estão implementados mais ou menos dessa forma, falando em Vraptor, os próprios plugind do jpa e hibernate implementam o OSV

A questão é: o OSV é realmente nocivo à aplicação dessa forma como dizem? em caso afirmativo porque os frameworks o implementa, e se não for para usar OSV, oque devemos usar?

3 respostas
solução!

Oi Ricardo,

Sim, o que temos aí no curso é um Open Session in View. No entanto, não acho ele tão problemático assim.

O autor do post no Stack Overflow tem razão nos seus vários pontos. Mas o que ele esqueceu de mencionar é a simplicidade do padrão. Ele nos tira a necessidade de escrever um monte de código.

Na maioria das aplicações que fazemos, não precisamos nos preocupar em fechar a transação alguns milissegundos antes, por exemplo. O Facebook precisa se preocupar com isso... Mas o resto, talvez não. Entende meu ponto?

Então, sempre leve o contexto do seu software em consideração.

Um abraço!

Obrigado pela resposta. Então usando este padrão (OSV) durante a renderização da página as entidades vão estar sincronizadas com o banco de dados ?

Oi Ricardo,

Sincronizados não é bem a palavra. O padrão vai te ajudar a não pensar muito em transações (pois tudo será comitado ao final), ou mesmo evitar problemas com o Hibernate quando usar lazy loading na camada de visualização.

Entende?