Mutilpas bases com spring & hibernate

Oi pessoal!

estou com uma duvida… como eu posso fazer um menu onde o usuario possa escolher qual base de dados ele quer se conectar.

dando uma olhada no forum e na internet eu ja achei algo… mas não é exatamente o que eu necessito.

as bases são diferentas, mas possuem as mesmas classes de persistencia.

então eu só queria, por exemplo se desse … setar ou escolher a base quando estiver iniciando applicationContext e quando estier criando uma session.

obrigado =D

Bom tarde

Então renato, é possivel sim, pois quando utilizamos hibernate temos o arquivo de conexão, nele temos o usuario, senha, dialect e outras configurações, geralmente este arquivo é chamado: hibernate.cfg.xml.

Quando iniciamos o contexto do hibernate carregamos este arquivo para poder criar as sessions do hibernate, partir da sessionfactory, então oque aconteceria no seu caso é que você teria varios arquivo de conexão por exemplo:

cliente1.cfg.xml
cliente2.cfg.xml

Ai neste menu que você quer criar quando o usuario selecionar o cliente1 por exemplo, você irá carregar o cliente1.cfg.xml e criar a sua sessionfactory a partir desse arquivo de conexão.

Espero ter ajudado.

Caio.

Boa tarde Caio,

isos eu imaginava… mas só tem esse jeito?

é porque antes de abrir a session… eu carrego o spring que tambem tem url, username, etc;

eu preciso do spring…

eu qria um jeito de não ter que reescrever xml… um xml unico… tipo setar os parametros e carregar

é que tambem um dos requisitos é o sistema poder criar novas bases…

mas se só tiver esse jeito… eu vou ter que me virar né?

é que tambem é td na mesma maquina só vai mudar apenas o final da url e tambem tem as mesmas tabelas… não vjo porque ficar criando varios .cfg.xml …

será que nao teria um userSessionFactory xD

muito obrigado pela dica Caio! =D

Bom tarde

Um boa opção do hibernate é ele gerar a base de dados a partir do modelo de objetos, então oque você poderia fazer é o seguinte (isso é um exemplo você terá que adaptar a sua necessidade):

1º) Você tem um modelo de classes prontos tudo via Hibernate (JPA);
2º) Quando você por exemplo cadastrar um cliente, você manda o hibernate criar uma base dados a partir de seu modelo para este cliente, assim cada cliente terá sua base de dados;
3º) O grande lance seria você criar o hibernate.cfg.xml via runtime, ou seja, utilizar uma api para gerar xml para cada cliente assim você não precisaria ficar criando varios xml para cada base de dados criada.

Como você disse, com o spring integrado acho que fica até mais facil, porque você poderia centralizar essa chamada de criação do hibernate tudo no xml do spring.

Mas essa arquitetura ficaria legal dependendo da sua necessidade.

falou.

é gerar xml tambem pensei xD

ms to travado na parte de login …

por exemplo na tela de login eu tenho login senha e a base a ser utilizada

ms eu não sei como subir com login e senha informados… só com padrao… ms eu tenho que ter um login e senha… pq tem gente que não pode ver certas bases

valeeu!

Eu tenho uma aplicação que usa JPA e Hibernate com 06 bases de dados diferentes.

Para isso eu gero o EntityManagerFactory via código

Ejb3Configuration ejb3conf = new Ejb3Configuration();

// Insiro as propriedades na unha (Incluindo ai base de dados, etc)
ejb3conf.setProperty(key, prop);
....
....
// Adiciono as classes anotadas na unha
ejb3conf.addAnnotatedClass(aClass);
..
..
EntityManagerFactoryImpl emf = (EntityManagerFactoryImpl) ejb3conf
				.buildEntityManagerFactory();

então

no fim do dia eu consegui xD

eu vou abdicar do spring… e usar apenas o hibernate

e criar as sessions utilizando sessionfactory


            return new AnnotationConfiguration()
                    .configure()
                    .setProperty("connection.username", userName)
                    .setProperty("connection.password", password)
  

mas tem um leve problema … ele não consiste o usuario ‘-’

tento com usuario errado e ele abre sessao

valeeu