Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA连接超时_Java_Database_Jpa_Entitymanager_Jdbc Pool - Fatal编程技术网

Java JPA连接超时

Java JPA连接超时,java,database,jpa,entitymanager,jdbc-pool,Java,Database,Jpa,Entitymanager,Jdbc Pool,为什么会出现超时和无响应 日志: 在最坏的情况下,它应该重新建立到数据库的连接,即使这样做很慢 package legacy.database; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.logging.Logger; import javax.persistence.EntityManager; im

为什么会出现超时和无响应

日志:

在最坏的情况下,它应该重新建立到数据库的连接,即使这样做很慢

package legacy.database;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

public enum Queries {

    INSTANCE;
    private final Logger log = Logger.getLogger(Queries.class.getName());
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("LegacyDatabasePU");
    EntityManager em = emf.createEntityManager();

    private EntityManager reconnect() {
        emf = Persistence.createEntityManagerFactory("LegacyDatabasePU");
        em = emf.createEntityManager();
        log.info("em\t" + em.isOpen());
        return em;
    }

    private List<Clients> findAll() {
        reconnect();
        Query q = em.createQuery("select c from Clients c");
        List<Clients> clients = q.getResultList();
        em.close();
        emf.close();
        return clients;
    }

    public List<Clients> selectByCriteria(Criteria criteria) {
        log.info(criteria.toString());
        reconnect();
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Clients> clientCriteriaQuery = criteriaBuilder.createQuery(Clients.class);
        Root<Clients> clientRoot = clientCriteriaQuery.from(Clients.class);
        clientCriteriaQuery.select(clientRoot);
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.name), "%" + criteria.getName() + "%"));
        predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.phone1), "%" + criteria.getPhone1() + "%"));
        predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.email), "%" + criteria.getEmail() + "%"));
        if (!criteria.getOpener().equalsIgnoreCase("all")) {
            predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.opener), "%" + criteria.getOpener() + "%"));
        }
        if (!criteria.getCloser1().equalsIgnoreCase("all")) {
            predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.closer1), "%" + criteria.getCloser1() + "%"));
        }
        if (!criteria.getStatus().equalsIgnoreCase("all")) {
            predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.status), "%" + criteria.getStatus() + "%"));
        }
        clientCriteriaQuery.where(predicates.toArray(new Predicate[0]));
        List<Clients> clients = em.createQuery(clientCriteriaQuery).getResultList();
        em.close();
        emf.close();
        return clients;
    }

    public Clients findById(int id) {
        reconnect();
        Clients client = em.find(Clients.class, id);
        em.close();
        emf.close();
        return client;
    }

    public void send(int id) {
        reconnect();
        Clients c = em.find(Clients.class, id);
        java.util.Date date = new java.util.Date();
        Timestamp t = new Timestamp(date.getTime());
        em.getTransaction().begin();
        c.setDateUpdated(t.toString());
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    private Timestamp stamp() {
        Date d = new Date();
        return new Timestamp(d.getTime());
    }

    public int persistClient(Clients client) {
        reconnect();
        client.setDateCreated(stamp().toString());
        em.getTransaction().begin();
        em.persist(client);
        em.getTransaction().commit();
        log.fine(client.getTrim());
        em.close();
        emf.close();
        return client.getId();
    }

    public int update(Clients newClient) {
        reconnect();
        Clients oldClient = em.find(Clients.class, newClient.getId());
        em.getTransaction().begin();
        oldClient.setAddress(newClient.getAddress());
        oldClient.setCity(newClient.getCity());
        oldClient.setCloser1(newClient.getCloser1());
        oldClient.setCloser2(newClient.getCloser2());
        oldClient.setCountry(newClient.getCountry());
        oldClient.setCompany(newClient.getCompany());
        oldClient.setDateCancelled(newClient.getDateCancelled());
        oldClient.setDateSold(newClient.getDateSold());
        if ((oldClient.getDateCreated().length() < 3) || (oldClient.getDateCreated() == null)) {
            oldClient.setDateCreated(stamp().toString());
        }
        oldClient.setDateUpdated(stamp().toString());
        oldClient.setDescription(newClient.getDescription());
        oldClient.setEmail(newClient.getEmail());
        oldClient.setExteriorColor(newClient.getExteriorColor());
        oldClient.setFeatures(newClient.getFeatures());
        //no id set
        oldClient.setInteriorColor(newClient.getInteriorColor());
        oldClient.setInteriorType(newClient.getInteriorType());
        oldClient.setKilometres(newClient.getKilometres());
        oldClient.setMake(newClient.getMake());
        oldClient.setMileageType(newClient.getMileageType());
        oldClient.setModel(newClient.getModel());
        oldClient.setNotes(newClient.getNotes());
        oldClient.setOpener(newClient.getOpener());
        oldClient.setPaymentMethod(newClient.getPaymentMethod());
        oldClient.setPhone1(newClient.getPhone1());
        oldClient.setPhone2(newClient.getPhone2());
        oldClient.setPostal(newClient.getPostal());
        oldClient.setPrice(newClient.getPrice());
        oldClient.setProvince(newClient.getProvince());
        oldClient.setRecording(newClient.getRecording());
        oldClient.setRefunded(newClient.getRefunded());
        oldClient.setRegFee(newClient.getRegFee());
        oldClient.setStatus(newClient.getStatus());
        oldClient.setTaxRate(newClient.getTaxRate());
        oldClient.setTrim(newClient.getTrim());
        oldClient.setVerifier(newClient.getVerifier());
        oldClient.setYear(newClient.getYear());
        em.getTransaction().commit();
        em.close();
        emf.close();
        return newClient.getId();
    }
}
这是针对JavaSE的

另见:


呃,你在为每一个呼叫创建一个EMF?让我们慢下来?一个EM-per-call很好,但不是EMFI一开始没有这样做,但看到一些人这样做。我不在乎性能,只是它不会超时。连接需要5秒钟还是5分钟并不重要。我把EM作为场,结果是一样的。像豆子一样试过这门课,同样的结果……如果有人跳下悬崖,我不会照搬;只要有一个单一的电动势,并减少了特别的痛苦。至于为什么有些事情需要时间,你可以查看JPA提供商的日志,看看发生了什么事情Git不需要时间,有时它永远不会完成。通常,它工作正常,有时只是挂起。这是针对JavaSE的,您指的是哪个日志?上面写的是登录,按照这些思路。你的案例与链接问题中的NPE完全不同。你必须看日志才能理解它说的“忘记日志”是说我不能为这些事情烦恼。你是唯一知道你的JPA实现是什么的人,所以没有人可以冒险猜测可能的原因——我的水晶球现在不起作用了。您必须首先修复代码,使其具有单个EMF,并且每个调用具有一个EM,所有这些都需要在最终完成时关闭。
package legacy.database;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

public enum Queries {

    INSTANCE;
    private final Logger log = Logger.getLogger(Queries.class.getName());
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("LegacyDatabasePU");
    EntityManager em = emf.createEntityManager();

    private EntityManager reconnect() {
        emf = Persistence.createEntityManagerFactory("LegacyDatabasePU");
        em = emf.createEntityManager();
        log.info("em\t" + em.isOpen());
        return em;
    }

    private List<Clients> findAll() {
        reconnect();
        Query q = em.createQuery("select c from Clients c");
        List<Clients> clients = q.getResultList();
        em.close();
        emf.close();
        return clients;
    }

    public List<Clients> selectByCriteria(Criteria criteria) {
        log.info(criteria.toString());
        reconnect();
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Clients> clientCriteriaQuery = criteriaBuilder.createQuery(Clients.class);
        Root<Clients> clientRoot = clientCriteriaQuery.from(Clients.class);
        clientCriteriaQuery.select(clientRoot);
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.name), "%" + criteria.getName() + "%"));
        predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.phone1), "%" + criteria.getPhone1() + "%"));
        predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.email), "%" + criteria.getEmail() + "%"));
        if (!criteria.getOpener().equalsIgnoreCase("all")) {
            predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.opener), "%" + criteria.getOpener() + "%"));
        }
        if (!criteria.getCloser1().equalsIgnoreCase("all")) {
            predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.closer1), "%" + criteria.getCloser1() + "%"));
        }
        if (!criteria.getStatus().equalsIgnoreCase("all")) {
            predicates.add(criteriaBuilder.like(clientRoot.get(Clients_.status), "%" + criteria.getStatus() + "%"));
        }
        clientCriteriaQuery.where(predicates.toArray(new Predicate[0]));
        List<Clients> clients = em.createQuery(clientCriteriaQuery).getResultList();
        em.close();
        emf.close();
        return clients;
    }

    public Clients findById(int id) {
        reconnect();
        Clients client = em.find(Clients.class, id);
        em.close();
        emf.close();
        return client;
    }

    public void send(int id) {
        reconnect();
        Clients c = em.find(Clients.class, id);
        java.util.Date date = new java.util.Date();
        Timestamp t = new Timestamp(date.getTime());
        em.getTransaction().begin();
        c.setDateUpdated(t.toString());
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    private Timestamp stamp() {
        Date d = new Date();
        return new Timestamp(d.getTime());
    }

    public int persistClient(Clients client) {
        reconnect();
        client.setDateCreated(stamp().toString());
        em.getTransaction().begin();
        em.persist(client);
        em.getTransaction().commit();
        log.fine(client.getTrim());
        em.close();
        emf.close();
        return client.getId();
    }

    public int update(Clients newClient) {
        reconnect();
        Clients oldClient = em.find(Clients.class, newClient.getId());
        em.getTransaction().begin();
        oldClient.setAddress(newClient.getAddress());
        oldClient.setCity(newClient.getCity());
        oldClient.setCloser1(newClient.getCloser1());
        oldClient.setCloser2(newClient.getCloser2());
        oldClient.setCountry(newClient.getCountry());
        oldClient.setCompany(newClient.getCompany());
        oldClient.setDateCancelled(newClient.getDateCancelled());
        oldClient.setDateSold(newClient.getDateSold());
        if ((oldClient.getDateCreated().length() < 3) || (oldClient.getDateCreated() == null)) {
            oldClient.setDateCreated(stamp().toString());
        }
        oldClient.setDateUpdated(stamp().toString());
        oldClient.setDescription(newClient.getDescription());
        oldClient.setEmail(newClient.getEmail());
        oldClient.setExteriorColor(newClient.getExteriorColor());
        oldClient.setFeatures(newClient.getFeatures());
        //no id set
        oldClient.setInteriorColor(newClient.getInteriorColor());
        oldClient.setInteriorType(newClient.getInteriorType());
        oldClient.setKilometres(newClient.getKilometres());
        oldClient.setMake(newClient.getMake());
        oldClient.setMileageType(newClient.getMileageType());
        oldClient.setModel(newClient.getModel());
        oldClient.setNotes(newClient.getNotes());
        oldClient.setOpener(newClient.getOpener());
        oldClient.setPaymentMethod(newClient.getPaymentMethod());
        oldClient.setPhone1(newClient.getPhone1());
        oldClient.setPhone2(newClient.getPhone2());
        oldClient.setPostal(newClient.getPostal());
        oldClient.setPrice(newClient.getPrice());
        oldClient.setProvince(newClient.getProvince());
        oldClient.setRecording(newClient.getRecording());
        oldClient.setRefunded(newClient.getRefunded());
        oldClient.setRegFee(newClient.getRegFee());
        oldClient.setStatus(newClient.getStatus());
        oldClient.setTaxRate(newClient.getTaxRate());
        oldClient.setTrim(newClient.getTrim());
        oldClient.setVerifier(newClient.getVerifier());
        oldClient.setYear(newClient.getYear());
        em.getTransaction().commit();
        em.close();
        emf.close();
        return newClient.getId();
    }
}