Como trabalhar adequadamente com Session?

4 respostas
max.analista

Olá meus caros amigos e companheiros de estudo,

Bom, me coloco diante de algumas dúvidas. Irei explanar apenas o meu pontapé inicial para que eu possa dar continuidade após a ajuda de vocês.

Bom, tenho uma aplicação desktop que utiliza Hibernate e Jsf. E por sinal, uma aplicação grande.
Minha tarefa é passar essa aplicação para web.

Eis que me deparo na seguinte situação:
Essa minha aplicação possui vários bancos de dados, onde faço o controle de usuário e o controle de usuário por banco.
Supondo que tenhamos dois usuários para acessar o sistema. O usuario1 logará no banco de dados1 e o usuario2 irá logar no banco de dados2.
Quando irei persistir ou buscar informações solicitadas pelo usuario1, terei de buscar essas informações no banco1 e quando irei persistir ou buscar informações solicitadas pelo usuario2, terei que buscar essas informações no banco de dados2.

A questão é que, atualmente, na minha classe Persistencia, eu carrego as informações de conexão do banco em atributos de escopo static. No sistema web, eu terei de carregar essa persistência, de acordo com o banco que o usuário estará logado.

Para esta aplicação, pensei na solução de armazenar na sessão do usuário esses dados de conexão com banco e, sempre que for persistir, eu iria carregar a persistência de acordo com os dados da sessão do usuário. Assim eu conseguiria acessar o banco que cada usuário estaria conectado.

Essa é uma solução é correta? O desempenho será viável?
Alguém poderia aumentar o meu repertório de ideias para chegar em uma solução eficaz?

Abraço galera =]

4 Respostas

ThEDiegO

Bom. Não sei se entendi muito bem seu problema, mas, acho que voce poderia usar uma fabrica de conexoes. Por exemplo: Voce teria uma classe responsavel apenas por lhe entregar EntityManager. La no seu persistence.xml voce pode criar conexoes para quantos bancos quiser, cada um sera identificado pelo persistence-unit name que voce colocar. Quando voce for criar uma conexao com o banco bastaria voce passar o nome desta conexao na sua fabrica de conexoes. Vou citar exemplo praticos que uso. Aqui tenho uma classe JPAUtil:

package br.com.enterprisestoq.utils;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAUtil {

	private static EntityManagerFactory emf = Persistence
			.createEntityManagerFactory("conexao1"); //ou conexao2
	
	public EntityManager getEntityManager() {
		return emf.createEntityManager();
	}
	
}

Com esta classe posso passar qualquer conexao que esteja configurada no persistence.xml e ele me retornara uma conexao ativa para aquele banco. O persistence unit que me refiro é este:

<persistence-unit name="conexao1" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>suas classes</class>
               --demais informações
</persistence-unit>

<persistence-unit name="conexao2" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>suas classes</class>
               --demais informações
</persistence-unit>

Não sei se fui muito claro, mas sou iniciante, talvez os termos que usei não estejam 100% preciso, mas, esse é o exemplo que tentei passar.

Vlw

max.analista

Desculpa, mas nao compreendi muito bem a sua solução ThEDiegO

E como passaria a conexão que o usuário mensurou quando efetuou login no sistema?

luxu

qual sua necessidade de colocar na WEB? Pq creio q vai levar um certo tempo para colocar em ordem essa migracao pelo peso q eh trabalhar com os servidores…mais axismo do q ctz ok?

max.analista

luxo

Um dos motivos é a relação de custo e beneficio com relação a manutenção, suporte e instalação. Além do mais disponibilizará recursos humanos para outras atividades.

Criado 28 de março de 2012
Ultima resposta 28 de mar. de 2012
Respostas 4
Participantes 3