Problema com Processo na CPU

15 respostas
batista.gerson

Bom dia a todos.
Senhores estou com um problema, peço ajuda de
quem poder me dar uma direção

fiz uma aplicação desktop onde quando o usuario entra tem que fazer o login logicamente e depois informar onde ele
esta o andar por exemplo e depois abre a aplicação conforme o perfil dele. O problema esta que quando abre a tela do login e ele informa os dados e depois o andar esses dois processos continuam ativo e mais o do perfil o seja tem 3 X 200 usuario usando o sistema ficam em torno de 600 processos ativos na cpu e ai o processamento vai pro espaço o cliente ja quer devolver o sistema. Usei o profiler do netbeans e verifiquei que realmente fica ativo. Alguem tem alguma ideia do que eu posso fazer pra solucionar esse problema??? As consultas todas estam sendo fechadas, to dando dipose em todas as janelas etc. e nada.

Consulta do login

public List consultarUsuario(Usuario usuario) {
        EntityManager entityManager = factory.createEntityManager();
        entityManager.getTransaction().begin();
        String sql = "from Usuario where loginUsuario =" + usuario + " and senhaUsuario = " + usuario + " and situaUsuario = 'A' and exclusao is FALSE";
        Query q = entityManager.createQuery(sql);
        entityManager.close();
        return (List) q;
    }

Parte do treicho da janela de login

if (tipoUsuario.equalsIgnoreCase("guichê")) {
                        NovoGuicheView novoGuiche = new NovoGuicheView(tipoUsuario, idUsuario);
                        novoGuiche.setVisible(true);
                        this.dispose();
                    }

15 Respostas

TheKill

Tente dar um sysout na sua classe de conexão, para verificar a quantidade de conexões ativas, sessions abertas…

Acho que o problema não deve ser de banco… Acho que deve ser do processo lógico =)

batista.gerson

TheKill

fiz um teste aki… toda vez que eu entro no perfilo de Guichê demonstrado ai em cima se cria 4 conexoes com o banco, estranho verifiquei a conexao ele so vai uma vez no metodo e como vc pode ver a conexao ta sendo fechada. Estranho muito estranho.

TheKill

se mostra 4 é porque tem 4 né? uashusahusaha =)

Melhor dar uma analisada, com calma… é um ponto importante ^^

TheKill

Ps.: Pelo que eu vi, vc ta sempre dar um NEW … nao seria interessante já buscar um GetConexao GetSession ?

batista.gerson

Em que parte exatemante??? no EntityManager???

TheKill

Sim, e também no Guiche

batista.gerson

ms no Guiche nao da como eu vou chamar a outra janela
ai eu so to chamando a janela.

TheKill

ah ta, nao reparei…

batista.gerson

vou tentar fazer o q vc falou pra ver se resolve
vlw cara qlq resultado posto aki.

TheKill

acho que não eh problema do entity manager…

acho que deve ser no seu factory talvez… ou qndo vc pega as conexões

batista.gerson

TheKill

Debuguei o factory

private GuicheDAO() {
        urlBanco = "jdbc:postgresql://" + urlBanco + "/fila";
        configOverrides.put("hibernate.connection.url", urlBanco);
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("fila", configOverrides);
        factory = emf;
    }

e ele ta normal cria uma conexao o problema e que quando eu passo no

entityManager.close();

aquela conexao continua ativa… Agora nao sei se vc pode me ajudar, qndo eu faço o login a aplicação vai criar uma conexao no banco e qndo eu der o close aquela conexao tem q fechar, ou seja se eu conecto tem 1 conexao quando eu passar no close vai ter 0 conexao.

TheKill

Huum, tá estranho isso… tem algo falho na sua lógica…

Tem que analisar bem o código todo

TheKill

vc nao trabalha com Sessions??? Ta fechando suas Sessions do banco??

batista.gerson

Nao é aplicação desktop, eu faço assim

crio um EntityManagerFactory
String urlBanco = PropertyHelper.getInstance().getIpServidor();
    Map configOverrides = new HashMap();
    private EntityManagerFactory factory;
    private static UsuarioDAO instance = new UsuarioDAO();


private UsuarioDAO() {
        urlBanco = "jdbc:postgresql://" + urlBanco + "/fila";
        configOverrides.put("hibernate.connection.url", urlBanco);
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("fila", configOverrides);
        factory = emf;
    }


depois faço chamo a consulta normal
[code]
public List consultarUsuario(String login) {
        EntityManager entityManager = factory.createEntityManager();
        entityManager.getTransaction().begin();
        String sql = "from Usuario where loginUsuario = '" + login.trim() + "' and exclusao is false and situaUsuario = 'A'";
        List list = (List) entityManager.createQuery(sql).getResultList();
        entityManager.close();
        factory.close();
        boolean testeEntityManager = entityManager.isOpen();
        boolean testeFactory = factory.isOpen();
        return list;
    }

[/code]

batista.gerson

Putz nada certo, problema sem ser resolvido, alguem mais tem outra ideia, criar um pool de conexao sera que resolve o problema?? e outra como criar um pool de conexao com JPA?

Criado 8 de abril de 2010
Ultima resposta 9 de abr. de 2010
Respostas 15
Participantes 2