Estou desenvolvendo uma aplicação que vai conectar em diversos bancos de acordo com um ID informado junto com o login e senha.
Bom, o gerenciamento dessas conexões ja esta funcionando. Porem em alguns testes, percebi que se conecto em bancos diferentes ao mesmo tempo, o Hibernate esta se perdendo entre as conexões (Banco1 e Banco2 por exemplo …)
Estou recuperando a conexão com ThreadLocal e tenho duas classes de gerenciamento de conexões. Uma faz o controle conectando em um banco principal e recuperando as informações de conexão com o banco do cliente e outra classe gerencia a conexão com o cliente.
Crie um arquivo de configuração para cada banco, assim ao se autenticar, você direciona ele pra qual conexao vai ser utilizado.
Para configurar à um distinto, basta fazer o Configure pra ele:
SessionFactory sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();SessionFactory sf2 = new Configuration().configure("/hibernate2.cfg.xml").buildSessionFactory();
J
jlunge
Oi andre.froes,
Não utilizo hibernate.cfg.xml e sim recupera as configurações dentro da minha classe mesmo …
E as configurações de conexão com os banco do cliente, estão armazenas no banco principal …
Segue a classe que gerencia a conexão com os clientes:
publicclassConexaoManager{privatestaticSessionFactoryfactory=null;privatestaticThreadLocal<Session>threadLocal=newThreadLocal<Session>();privateConexaoManager(){AnnotationConfigurationconfiguration=newAnnotationConfiguration();SysClientecliente=SingletonSistema.getInstance().getCliente();if(cliente!=null){System.out.println("setando cliente para conexão: "+cliente.getBancoDados());Stringconn="jdbc:postgresql://"+cliente.getIpServidor().trim()+":"+cliente.getPortServidor().trim()+"/"+cliente.getBancoDados().trim();Stringuser=cliente.getLogin().trim();Stringsenha=cliente.getSenha().trim();//Conexão com o bancoconfiguration.setProperty("hibernate.connection.driver_class","org.postgresql.Driver");configuration.setProperty("hibernate.connection.url",conn);configuration.setProperty("hibernate.connection.username",user);configuration.setProperty("hibernate.connection.password",senha);// mapeamentoconfiguration.addAnnotatedClass(br.com.erp.modelo.Bairro.class);configuration.addAnnotatedClass(br.com.erp.modelo.Cep.class);factory=configuration.buildSessionFactory();}}publicstaticSessiongetSession()throwsHibernateException{if(factory==null){newConexaoManager();}Sessionsession=(Session)threadLocal.get();if((session==null)||(!session.isOpen()))session=factory.openSession();threadLocal.set(session);returnsession;}}
Essa classe SingletonSistema que utilizo na linha 9, é setada apos a conexão com o banco principal (outra classe de gerenciamento)… Pode estar ai o problema … mas nao consegui encontrar.
Agradeço sua ajuda.
J
jlunge
O problema esta com minha classe Singleton mesmo, pois quando realizo um novo login, ela atualiza o novo ID do cliente, perdendo o antigo. Logo a conexão esta sendo mantina de acordo com o ultimo login realizado!
Alguma ideia de como poderia controlar isso?!
J
jlunge
Realmente meu codigo esta com problema para oq quero fazer …