Vraptor + SessionFactory: Alterar user de conexão

2 respostas
R

Boa Tarde.

Estamos desenvolvendo um ERP, onde preciso que a configuração do Hibernate xml. seje alterado apos pedir o login do usuario., ou seja, preciso alterar o user que vai conectar no banco de dados, na SessionFactory.

Consigo fazer esta alteração via Configuration, usando setProperty, mas o problema é que esta criando esta SessionFactory, ao levantar meu projeto.. o vraptor ao levantar a aplicação já esta criando. como faço para alterar..

Tem como alterar as configurações de uma SessionFactory, apos ela criada?

Ou como fazer para o vraptor não criar esta sessionfactory na hora de levantar a aplicação?

@ApplicationScoped
@Component
public class CriadorDeSessionFactory implements ComponentFactory<SessionFactory> {

	private SessionFactory factory;

	@PostConstruct
	public void abre() {
		Configuration configuration = new Configuration();
		configuration.configure();
		configuration.setInterceptor(new DB2Interceptor());
		
		configuration.setProperty(Environment.USER, "inst1");
		configuration.setProperty(Environment.PASS, "inst1");
		
		this.factory = configuration.buildSessionFactory();
	}
	
	public SessionFactory getInstance() {
		return this.factory;
	}
	
	@PreDestroy
	public void fecha() {
		this.factory.close();
	}

2 Respostas

Rafael_Guerreiro

Ixi cara, isso vai complicar um pouco.

Você primeiro vai precisar criar a SessionFactory a cada sessão de usuário. Para isso, basta anotar o ComponentFactory de SessionFactory com @SessionScoped

Eu sugiro você tirar aquele @PostConstruct e fazer tudo que está dentro dele em um construtor de classe (nesse caso, o @PostConstruct funciona como um construtor).

Depois eu sugiro você criar um método nessa classe que vai destruir a session factory atual e vai abrir uma nova nela, com o novo user e a nova senha.

Só um aviso: Esse negocio de destruir e abrir session factory vai deixar o seu sistema lento em alguns pontos.

Lucas_Cavalcanti

se a idéia é só trocar a conexão dependendo do usuário, vc pode sobrescrever o ConnectionFactory do hibernate… problema é que vai ferrar um pouco o pool de conexões, mas vc pode simplesmente abrir e fechar a conexão toda hora, pelo menos por enquanto.

Criado 27 de abril de 2012
Ultima resposta 27 de abr. de 2012
Respostas 2
Participantes 3