Problemas com Classe Static + Autenticação do usuário

2 respostas
RodrigoValentim

Pessoal,

Estou enfrentando um problema que para mim, não seria um problema!

Nos temos um sistema ERP e tenho uma auditoria feita por trigger de banco (oracle). Comecei a fazer alguns sistemas em paralelo a esse ERP e por necessidade de estar usando esse esquema de auditoria por trigger, fiz uma estrutura de autenticação por usuário com o hibernate sem usar o pool de conexão. (o login e senha do usuário é que abre a conexão com o banco). precisa ser desta forma pois na auditoria, uso o USER para auditar as informações e se usar o pool, vou ter sempre o usuário generico...

Minha estrutra está da seguinte forma.

Ao efetuar o login, eu guardo o usuário e a senha em uma static class e sempre que vou fazer alguma transação no banco, dou um usuario.getUser / usuario.getPwd e faço a autenticação atraves do EntityManagerProvider

package hsr.lib.dao.emf;

import hsr.lib.dao.generic.PersistenceUnit;
import hsr.lib.entidade.Usuario;

import java.util.Hashtable;
import java.util.Map;

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

public class EntityManagerProvider {
	
	private Hashtable<String, EntityManagerFactory> emf;
	
    public EntityManagerProvider(){
    	 emf = new  Hashtable<String, EntityManagerFactory>();
    }  
     
    public EntityManager getEntityManager(String persistenceUnit){  
        if (emf.get(persistenceUnit) == null){            
            emf.put(persistenceUnit, Persistence.createEntityManagerFactory(persistenceUnit, PersistenceUnit.build(Usuario.getLoginVO())));  
        }        
        return emf.get(persistenceUnit).createEntityManager();  
    }

    public EntityManagerFactory getEntityManagerFactory(String persistenceUnit){  
        if (emf.get(persistenceUnit) == null){            
            emf.put(persistenceUnit, Persistence.createEntityManagerFactory(persistenceUnit, PersistenceUnit.build(Usuario.getLoginVO())));  
        }        
        return emf.get(persistenceUnit);  
    }
    
    public EntityManager getEntityManagerFactory(String persistenceUnit, Map<?, ?> properties){  
            if (emf.get(persistenceUnit) == null){
            emf.put(persistenceUnit, Persistence.createEntityManagerFactory(persistenceUnit));  
        }        
        return emf.get(persistenceUnit).createEntityManager(properties);      
    }
}

Classe Usuario

public class Usuario {
	private static LoginVO loginVO = new LoginVO();

	private LoginVO loginVO;
	
	public Usuario() {
		loginVO = new LoginVO();
	}
	
	/**
	 * @param loginVO the loginVO to set
	 */
	public void setLoginVO(LoginVO loginVO) {
		this.loginVO = loginVO;
	}

	/**
	 * @return the loginVO
	 */
	public LoginVO getLoginVO() {
		return this.loginVO;
	}
}

O problema é que, quando o usuário1 loga, as informações são gravadas com o usuario1. quando o usuario2 loga, ele sobrepoen a informação existente na static class e então, todas as alterações passam a ser gravadas com o usuario2

Alguém consegue imaginar uma solução para esta situação, deixando a forma de autenticação como está, sem mudança muito drastica?

Obs: estou usando Flex

2 Respostas

R

mostra a classe que esta guardando o usuario

RodrigoValentim

resolvido com FlexContext.

Criado 22 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 2
Participantes 2