Eu tenho uma aplicação que pode conectar na base de dados do servidor ou na base de dados do cliente, esta seleção é feita na tela de login logo após startar a aplicação. A minha pergunta é posso alterar a minha configuração dentro do XML(hibernate.cfg.xml)?
Segue a minha classe de conexão:
public class ConexaoHibernate {
private static SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
private static final ThreadLocal threadlocal = new ThreadLocal();
static{
try{
sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
}catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}
@SuppressWarnings("unchecked")
public static Session getInstance(){
if(sessionFactory == null || sessionFactory.isClosed()) {
sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
}
Session session = (Session) threadlocal.get();
session = sessionFactory.openSession();
threadlocal.set(session);
return session;
}
}
A aplicação será colocada no servidor que estará dentro da rede da empresa, ao abrir a aplicação na tela de login, seleciono a opção de servidor ou cliente, se seleciono cliente coloco o IP ou nome da máquina e me logo no BD da aplicação local do cliente, sendo esta aplicação desktop standlone.
Você tem duas alternativas para fazer estas conexões:
Você criar 2 arquivos xml (o nome não precisa ser exatamente “hibernate.cfg.xml”), com isso, hora você utiliza um arquivo de conexão, hora você utiliza outro arquivo de conexão.
Você pode configurar a sua conexão no código. Ex.:
Configuration conf = new AnnotationConfiguration().configure();
conf.setProperty("hibernate.connection.url", "jdbc:mysql://" + server + ":" + port + "/" + db);
conf.setProperty("hibernate.connection.username", user);
conf.setProperty("hibernate.connection.password", password);
sessionFactory = conf.buildSessionFactory();
Se preferir, você pode configurar dinamicamente somente algumas partes do arquivo “hibernate.cfg.xml”.
Fiz um exemplinho rápido. Criei 2 bancos iguais, somente para testar, com 2 tabelas, pessoa e dependente.
Primeiro eu acesso o banco javatest, fecho a conexão, e depois acesso o banco javatest2.
Dá uma olhada no exemplo que fiz…
Arqvuivo hibernate.cfg.xml (não contém nome do servidor, nome do banco, nem login e nem senha, tudo configurado dinamicamente)