Ajuda Singleton de conexao

3 respostas
fabioebner

Pessoal desenvolvo em java para desktop, estou utilizando toplink como camada de persistencia.. porem estou com um problema.. cada vez q eu conecto meu programa principal no banco.. ele me da como se tivesse 46 usuarios no banco. logo se eu conectar 3 clientes no mesmo banco estora o numero de usuario e nao consigo

eu tenho a seguinte classe de conexao
public class ConexaoNotas {

    private static ConexaoNotas instancia;
    private static EntityManagerFactory emf;
    private static final String NOMEPU = "NotasPU";  
    public static  EntityManager SESSION;  
    
    
    public static synchronized void conectar(){
        Map propertiesMap = new HashMap();

        try {


            String ipServidor = VerificaIpConexao.getIpServidor();
           propertiesMap.put(TopLinkProperties.JDBC_URL, "jdbc:postgresql://" + ipServidor + ":5432/db_dnaso");

            emf = Persistence.createEntityManagerFactory(NOMEPU, propertiesMap);

            if (emf == null) {
              emf = Persistence.createEntityManagerFactory(NOMEPU, propertiesMap);
           }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static ConexaoNotas getInstance() {
        if (instancia == null) {
            instancia = new ConexaoNotas();
        }
        return instancia;
    }

          
    public static EntityManager getCurrentEM()  {
           if (SESSION == null) {    
               conectar();  
               SESSION = emf.createEntityManager();  
               SESSION.clear();
 
            SESSION.setFlushMode(FlushModeType.AUTO);
           }  
           return SESSION;  
       }  
         
    public static void fecharConexao() {   
        if (SESSION != null) {  
           SESSION.close();  
           SESSION = null;
        }    
    }  

        
    public static void beginTransacao(){
      SESSION.getTransaction().begin();
    }
    
    public static void commitTransacao(){
       SESSION.getTransaction().commit();

    }
    
    public static void rollbackTransacao(){
        SESSION.getTransaction().rollback();
    }

}

eu utilizo essa classe toda vez q vou fazer uma inclusao, alteracao ou exclusao

utilizo ela assim:
ConexaoNotas.getCurrentEM();
    ConexaoNotas.beginTransacao();
    try {
               new FuncionarioFacade().persist(objeto); // update ou remove

               ConexaoNotas.commitTransacao();
    } catch (Exception ex) {
        ex.printStackTrace();
        ConexaoNotas.rollbackTransacao();
    }finally{
        ConexaoNotas.fecharConexao();
    }
e qdo eu faco uma busca faco assim
Query query = ConexaoNotas.getCurrentEM().createNamedQuery("TbFuncionario.findAllFuncionario");
query.getResultList();

vale lembra q eu tenho varios subprojetos( todos utilizam esse mesmo esquema de conexao, para inserir, alterar, etc) e eles sao adicionadas no meu projeto principal..

alguem sabe como arrrumar isso???

3 Respostas

robinsonbsilva

jovem…o erro é realmente sobre “Quantidade de Conexões”, ou “Quantidade de Cursores Abertos”???

R

testa o seguinte, cria um construtor privado nesta sua classe ai e verifica se em outra parte do seu sistema tem outra classe instanciando atravez do construtor e se esta utilizando o singgleton que vc criou.

fabioebner

Entao e sobre usuarios conectados no banco… qdo tento conectar mais de 1 da que existe mtos usuarios conectados… o banco retorna esse erro… entendeu

Criado 29 de abril de 2009
Ultima resposta 29 de abr. de 2009
Respostas 3
Participantes 3