Estou ficando doidão com vraptor, na apostila fj28 (pg. 78) da Caelum, diz que um CriadorDeSessionFactory deve ter um escopo de aplicação “@ApplicationScoped”, até aí blz…
Mas quando faço um INSERT no BD e volto na minha aplicação e dou um F5 ele não mostra o novo registro, até mesmo fechando o browser ao retornar ele continua listando os mesmos registros, reinicio o TOMCAT aí sim o novo registro é exibido… Ou seja, o @ApplicationScoped está fazendo a parte dele, para fazer um teste, retirei ele e aí funciona tudo beleza…
Então fiquei na dúvida se devo tirar o @ApplicationScoped e deixar o padrão “@RequestScoped”, não sei o quanto isso é prejudicial, pois na apostila é dito que é muito custoso criar um “CriadorDeSessionFactory” a cada requisição…
Acho melhor você postar seu CriadorDeSessionFactory.
Att,
M
mribeiro
É verdade cara, tem razão…
Essas são as classes sugeridas na apostila:
// Classe responsável pela criação de sessions ////////////////////@ComponentpublicclassCriadorDeSessionimplementsComponentFactory<Session>{privatefinalSessionFactoryfactory;privateSessionsession;publicCriadorDeSession(SessionFactoryfactory){this.factory=factory;}@PostConstructpublicvoidabre(){this.session=factory.openSession();}publicSessiongetInstance(){returnthis.session;}@PreDestroypublicvoidfecha(){this.session.close();}}// Classe responsável pela criação da fábrica de sessions ////////////////////////////////////// Aqui se eu retiro o escopo de sessão funciona, mas deixando dessa forma não. ////////@Component@ApplicationScopedpublicclassCriadorDeSessionFactoryimplementsComponentFactory<SessionFactory>{privateSessionFactoryfactory;privateConfigurationconfig;publicCriadorDeSessionFactory(Configurationconfig){this.config=config;}@PostConstructpublicvoidabre(){ServiceRegistryserviceRegistry;serviceRegistry=newServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();this.factory=config.buildSessionFactory(serviceRegistry);}publicSessionFactorygetInstance(){returnthis.factory;}@PreDestroypublicvoidfecha(){this.factory.close();}}
Abs.
Marcelo
Lucas_Cavalcanti
vc fez o interceptor de transações?
M
mribeiro
Olá Lucas…
Cara, interceptor de transações???
Seria o beginTransaction e o commit???
Existe isso na apostila? Poderia dar umas dicas?
Valeu!
Abs.
Marcelo
Lucas_Cavalcanti
tem isso na apostila sim, um pouquinho depois dos criadores de session e sessionFactory
M
mribeiro
Olá Lucas,
Cara, já li toda a apostila novamente, mas não encontro nada sobre Interceptor de Transações, você se refere ao @PostConstruct e @PreDestroy???
Desculpe ainda estou me familiarizando com os nomes das coisas…
Abs.
Marcelo
Lucas_Cavalcanti
Tem razão, não tem o interceptor na apostila, mas em todos os daos ele faz session.beginTransaction() e depois commit(), vc está fazendo isso?
Já coloquei um system.out.println() antes do commit para ter certeza e ela está passando por ali normal… Só quero ter certeza de que eu não estaria prejudicando meu projeto por conta de deixar meu CriadorDeSessionFactory como @RequestScoped.
ALguém saberia me dizer quais são os impactos?
Abs.
Marcelo
Lucas_Cavalcanti
o criadorDeSessionFactory precisa ser @ApplicationScoped
senão o hibernate vai ler as configurações todas a cada request, e não há necessidade pra isso.