Srs, bom dia.
Tenho um sistema que utiliza hibernate no lado do servidor, ele esta desenvolvido sobre a seguinte arquitetura:
MYSQL < - > SERVER JAVA <--------- (rede) -----------> APP Swing
Sendo que como ja disse, o server java utiliza hibernate para persistencia. A camada de rede é via RMI.
Surgiu agora a necessidade do server java trabalhar com mais de um banco de dados, ou seja, um banco de dados para cada empresa, assim, na app swing no momento que o cara for acessar ele deve indicar qual empresa esta abrindo.
Resolvemos então que o que melhor enquadraria em nossa arquitetura seria:
Fazer 2 bancos de dados, um para cada empresa. Esses bancos seriam idênticos quanto a estrutura;
A cada chamada via RMI, hoje é passado um objeto UserSession (que indica a sessao que o usuario abriu) esse objeto usersession passaria a conter a propriedade databaseName, o que faria com que o servidor soube-se em qual banco executar a operacao, exemplo:
//HOJE EH ASSIM:
public void salvaCliente(UserSession userSession, Cliente cliente) throws RemoteException, RegistroDuplicadoException, CPFInvalidoException (....){
Session sessao = super.getSession();
Transaction tx = sessao.beginTransaction();
//(.....)
sessao.saveOrUpdate(cliente);
tx.commit();
}
O super.getSession() obtem uma sessao do hibernate, ja que essa classe extend a minha classe DBUtils.
Entao creio que o modo mais facil de obter a sessao com o banco correto seria passar o nome do banco para essa getSession(), assim:
//Ficaria assim:
public void salvaCliente(UserSession userSession, Cliente cliente) throws RemoteException, RegistroDuplicadoException, CPFInvalidoException (....){
Session sessao = super.getSession(userSession.getDBName());
Transaction tx = sessao.beginTransaction();
//(.....)
sessao.saveOrUpdate(cliente);
tx.commit();
}
//funcao getsession da classe dbUtils:
public Session getSession() {
return this.hibernate.getSession();
}
//e no construtor da classe esta assim:
this.hibernate = new HibernateUtils();
Alguem poderia me dar uma luz?