Jpa/Hibernate causing connection Leak

Asked

Viewed 74 times

2

I have a large project with several classes.There is a connection Leak, every time I make a request, it creates connections coming an hour to hang because of the max of the connection pool.

Pojo class of Invoices

package br.nicholas.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
//@Table(name = "ph161169_fatura_pagar", schema = "ph161169_auditoria_edi")
@Table(name = "fatura_pagar", schema = "auditoria_edi")
public class FaturaPagar {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "identificador_registro", length = 3, nullable = false)
    private String identificadorRegistro;

    @Column(name = "identificacao_remetente", length = 35, nullable = false)
    private String identificacaoRemetente;

    @Column(name = "identificacao_destinatario", length = 35, nullable = false)
    private String identificacaoDestinatario;

    @Column(name = "data", length = 6, nullable = false)
    private String data;

    @Column(name = "hora", length = 4, nullable = false)
    private String hora;

    @Column(name = "identificacao_intercambio", length = 12, nullable = false)
    private String identificacaoIntercambio;

    @Column(name = "identificacao_documento", length = 14, nullable = false)
    private String identificacaoDocumento;

    @Column(name = "cnpj", length = 14, nullable = false)
    private String cnpj;

    @Column(name = "filial_emissora_documento", length = 10, nullable = false)
    private String filialEmissoraDocumento;

    @Column(name = "tipo_documento_cobranca", length = 10, nullable = false)
    private String tipoDocumentoCobranca;

    @Column(name = "numero_documento_cobranca", length = 10, nullable = false)
    private String numeroDocumentoCobranca;

    @Column(name = "data_emissao_fatura", length = 8, nullable = false)
    private String dataEmissaoFatura;

    @Column(name = "data_vencimento_fatura", length = 8, nullable = false)
    private String dataVencimentoFatura;

    @Column(name = "valor_total_documento_cobranca", length = 15, nullable = false)
    private String valorTotalDocumentoCobranca;

    @Column(name = "tipo_cobranca", length = 10, nullable = false)
    private String tipoCobranca;

    @Column(name = "numero_conhecimento", length = 12, nullable = false)
    private String numeroConhecimento;

    @Column(name = "conhecimento_devolucao", length = 1, nullable = false)
    private String conhecimentoDevolucao;

    @Column(name = "qtdade_total_doctos", length = 4, nullable = false)
    private String qtdadeTotalDoctos;

    @Column(name = "valor_frete", nullable = false)
    private String valorFrete;

    @Column(name = "serie_conhecimento", length = 5, nullable = false)
    private String serieConhecimento;

    public FaturaPagar() {
        // TODO Auto-generated constructor stub
    }

    public FaturaPagar(Long id, String identificadorRegistro, String identificadorRemetente,
            String identificadorDestinatario, String data, String hora, String identificacaoIntercambio,
            String identificacaoDocumento, String cnpj, String tipoDocumentoCobranca, String numeroDocumentoCobranca,
            String dataEmissaoFatura, String dataVencimentoFatura, String valorTotalDocumentoCobranca,
            String tipoCobranca, String filialEmissoraDocumento, String serieConhecimento, String numeroConhecimento,
            String valorFrete, String conhecimentoDevolucao, String qtdadeTotalDoctos) {
        this.id = id;
        this.identificadorRegistro = identificadorRegistro;
        this.identificacaoRemetente = identificadorRemetente;
        this.identificacaoDestinatario = identificadorDestinatario;
        this.data = data;
        this.hora = hora;
        this.identificacaoIntercambio = identificacaoIntercambio;
        this.identificacaoDocumento = identificacaoDocumento;
        this.cnpj = cnpj;
        this.filialEmissoraDocumento = filialEmissoraDocumento;
        this.tipoDocumentoCobranca = tipoDocumentoCobranca;
        this.numeroDocumentoCobranca = numeroDocumentoCobranca;
        this.dataEmissaoFatura = dataEmissaoFatura;
        this.dataVencimentoFatura = dataVencimentoFatura;
        this.valorTotalDocumentoCobranca = valorTotalDocumentoCobranca;
        this.tipoCobranca = tipoCobranca;
        this.numeroConhecimento = numeroConhecimento;
        this.conhecimentoDevolucao = conhecimentoDevolucao;
        this.qtdadeTotalDoctos = qtdadeTotalDoctos;
        this.valorFrete = valorFrete;
        this.conhecimentoDevolucao = conhecimentoDevolucao;
        this.serieConhecimento = serieConhecimento;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getIdentificadorRegistro() {
        return identificadorRegistro;
    }

    public void setIdentificadorRegistro(String identificadorRegistro) {
        this.identificadorRegistro = identificadorRegistro;
    }

    public String getIdentificacaoRemetente() {
        return identificacaoRemetente;
    }

    public void setIdentificacaoRemetente(String identificacaoRemetente) {
        this.identificacaoRemetente = identificacaoRemetente;
    }

    public String getIdentificacaoDestinatario() {
        return identificacaoDestinatario;
    }

    public void setIdentificacaoDestinatario(String identificacaoDestinatario) {
        this.identificacaoDestinatario = identificacaoDestinatario;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getHora() {
        return hora;
    }

    public void setHora(String hora) {
        this.hora = hora;
    }

    public String getIdentificacaoIntercambio() {
        return identificacaoIntercambio;
    }

    public void setIdentificacaoIntercambio(String identificacaoIntercambio) {
        this.identificacaoIntercambio = identificacaoIntercambio;
    }

    public String getIdentificacaoDocumento() {
        return identificacaoDocumento;
    }

    public void setIdentificacaoDocumento(String identificacaoDocumento) {
        this.identificacaoDocumento = identificacaoDocumento;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getFilialEmissoraDocumento() {
        return filialEmissoraDocumento;
    }

    public void setFilialEmissoraDocumento(String filialEmissoraDocumento) {
        this.filialEmissoraDocumento = filialEmissoraDocumento;
    }

    public String getTipoDocumentoCobranca() {
        return tipoDocumentoCobranca;
    }

    public void setTipoDocumentoCobranca(String tipoDocumentoCobranca) {
        this.tipoDocumentoCobranca = tipoDocumentoCobranca;
    }

    public String getNumeroDocumentoCobranca() {
        return numeroDocumentoCobranca;
    }

    public void setNumeroDocumentoCobranca(String numeroDocumentoCobranca) {
        this.numeroDocumentoCobranca = numeroDocumentoCobranca;
    }

    public String getDataEmissaoFatura() {
        return dataEmissaoFatura;
    }

    public void setDataEmissaoFatura(String dataEmissaoFatura) {
        this.dataEmissaoFatura = dataEmissaoFatura;
    }

    public String getDataVencimentoFatura() {
        return dataVencimentoFatura;
    }

    public void setDataVencimentoFatura(String dataVencimentoFatura) {
        this.dataVencimentoFatura = dataVencimentoFatura;
    }

    public String getValorTotalDocumentoCobranca() {
        return valorTotalDocumentoCobranca;
    }

    public void setValorTotalDocumentoCobranca(String valorTotalDocumentoCobranca) {
        this.valorTotalDocumentoCobranca = valorTotalDocumentoCobranca;
    }

    public String getTipoCobranca() {
        return tipoCobranca;
    }

    public void setTipoCobranca(String tipoCobranca) {
        this.tipoCobranca = tipoCobranca;
    }

    public String getNumeroConhecimento() {
        return numeroConhecimento;
    }

    public void setNumeroConhecimento(String numeroConhecimento) {
        this.numeroConhecimento = numeroConhecimento;
    }

    public String getConhecimentoDevolucao() {
        return conhecimentoDevolucao;
    }

    public void setConhecimentoDevolucao(String conhecimentoDevolucao) {
        this.conhecimentoDevolucao = conhecimentoDevolucao;
    }

    public String getQtdadeTotalDoctos() {
        return qtdadeTotalDoctos;
    }

    public void setQtdadeTotalDoctos(String qtdadeTotalDoctos) {
        this.qtdadeTotalDoctos = qtdadeTotalDoctos;
    }

    public String getValorFrete() {
        return valorFrete;
    }

    public void setValorFrete(String valorFrete) {
        this.valorFrete = valorFrete;
    }

    public String getSerieConhecimento() {
        return serieConhecimento;
    }

    public void setSerieConhecimento(String serieConhecimento) {
        this.serieConhecimento = serieConhecimento;
    }

}

Jpautil class

public class JpaUtil {

    private static EntityManagerFactory emf;

    public static EntityManager criaEM() {

        if (emf == null) {
            emf = Persistence.createEntityManagerFactory("auditoria-edi");
        }

        return emf.createEntityManager();
    }

    public static void close() {
        emf.close();
    }
}

Invoice class

public class FaturaPagarDAO {

    private EntityManager em;

    public FaturaPagarDAO() {
        em = JpaUtil.criaEM();
    }

    public List<FaturaPagar> listaTodos() {

        TypedQuery<FaturaPagar> query = em.createQuery("FROM FaturaPagar GROUP BY cnpj", FaturaPagar.class);
        return query.getResultList();

    }

    public List<FaturaPagar> listaGroupBy(String numeroDocumentoCobranca) {

        return em.createQuery(
                "FROM FaturaPagar f WHERE numeroDocumentoCobranca = :numeroDocumentoCobranca GROUP BY f.cnpj,f.numeroDocumentoCobranca,f."
                        + "identificacaoRemetente",
                FaturaPagar.class).setParameter("numeroDocumentoCobranca", numeroDocumentoCobranca).getResultList();

    }

    public boolean inserir(FaturaPagar faturaPagar) {
        try {
            em.getTransaction().begin();
            em.persist(faturaPagar);
            em.getTransaction().commit();

        } catch (Exception e) {
            e.printStackTrace();
            return false;

        }
        return true;

    }

    public List<FaturaPagar> listaConhecimentosInconsistentes(String cnpj) {

        TypedQuery<FaturaPagar> query = em
                .createQuery("FROM FaturaPagar f where f.numeroConhecimento not in(select c.numeroConhecimento"
                        + " from ConhecimentoFrete c) AND cnpj = :cnpj", FaturaPagar.class)
                .setParameter("cnpj", cnpj);
        return query.getResultList();

    }

    public List<FaturaPagar> listaDataCnpj(String dataMenor, String dataMaior, String cnpj) {

        return em.createQuery(
                "FROM FaturaPagar o WHERE  dataEmissaoFatura <= :dataMaior OR dataEmissaoFatura >=:dataMenor"
                        + " AND dataEmissaoFatura >= :dataMenor OR dataEmissaoFatura <= :dataMaior AND cnpj =:cnpj",
                FaturaPagar.class).setParameter("dataMaior", dataMaior).setParameter("cnpj", cnpj)
                .setParameter("dataMenor", dataMenor).getResultList();

    }

    public List<FaturaPagar> comboCnpj() {

        TypedQuery<FaturaPagar> query = em.createQuery("FROM FaturaPagar c GROUP BY cnpj", FaturaPagar.class);
        return query.getResultList();

    }

    public List<FaturaPagar> comboData() {

        TypedQuery<FaturaPagar> query = em.createQuery("From FaturaPagar p GROUP BY dataEmissaoFatura",
                FaturaPagar.class);
        return query.getResultList();
    }

}

Persistence.xml as all pool configuration and database connection (Mysql)

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="auditoria-edi">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <properties>
            <property name="javax.persistence.jdbc.driver"
                value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:mysql://localhost:3388/auditoria_edi" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password"
                value="Mentor$16" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />


            <!-- C3P0 -->


            <property name="hibernate.dialect"
                value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.connection.provider_class"
                value="org.hibernate.connection.C3P0ConnectionProvider" />
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.MySQL5InnoDBDialect" />

            <property name="hibernate.c3p0.max_size" value="10" />
            <property name="hibernate.c3p0.min_size" value="2" />

            <!--Tempo de inatividade,0=nunca expira -->
            <property name="hibernate.c3p0.timeout" value="3000" />

            <!-- tempo ocioso em segundos antes que uma conexão seja validada automaticamente. 
                Padrão de hibernação: 0 -->
            <property name="hibernate.c3p0.idle_test_period" value="300" />
            <!-- Número de conexões adicionais que serão criadas a cada requisição 
                de conexão -->
            <property name="hibernate.c3p0.acquireIncrement" value="1" />

            <!-- Tempo em milisegundos que o c3p0 irá esperar entre tentivas de aquisição. -->
            <!-- <property name="hibernate.c3p0.acquireRetryDelay" value="1000" /> --> <!-- O número em milisegundos que um cliente chamando getConnection() irá 
                esperar por uma Conexão, via check-in ou uma nova conexão adquirida quando 
                o pool estiver esgotado. Zero siginifica esperar indefinidademento. Setar 
                qualquer valor positivo causará um time-out com uma SQLException depois de 
                passada a quantidade especificada de milisegundos. -->
            <property name="hibernate.c3p0.checkoutTimeout" value="3000" />
        </properties>
    </persistence-unit>
</persistence>
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.