Hibernate Session/EntityManager在压力测试中被关闭



我在上面有一个带有Hibernate的Spring Web应用程序。我几乎完成了开发,并且正在进行一些压力测试,以找出如果很多用户同时在同一页面上连接会发生什么。

我在冬眠配置或/和代码上必须做错了什么,因为我会遇到这些错误:

formatedMessage : Session is closed!
Message : Session is closed!
Erreur : java.lang.IllegalStateException: EntityManager is closed
stacktrace : java.lang.IllegalStateException: EntityManager is closed
    [...]
formatedMessage : EntityManager is closed
Message : EntityManager is closed
SQL Error: 0, SQLState: 55000
Ce statement a été fermé.
Erreur : org.hibernate.exception.GenericJDBCException: could not extract ResultSet
stacktrace : org.hibernate.exception.GenericJDBCException: could not extract ResultSet
    [...]
Caused by: org.postgresql.util.PSQLException: Ce statement a été fermé.

这是代码:

public class Application
{
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "application_seq_gen")
    @SequenceGenerator(name = "application_seq_gen", sequenceName = "application_id_seq",initialValue = 1, allocationSize = 1)
    private int id;
    private String nom;
    private Boolean autorise; //Autorise la validation automatique de l'application
    private String domaineFonctionnel;
    @ElementCollection(fetch=FetchType.EAGER)
    @CollectionTable(name="applicationMail")
    @Column(name="mail")
    private Set<String> listMail;
    [...]
}
public ArrayList<Application> getListApplication() {
    entityManager = entityManagerFactory.createEntityManager();
    Session session = entityManager.unwrap(Session.class);
    Criteria criteria = session.createCriteria(Application.class);
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    ArrayList<Application> listApplication = new ArrayList<Application>();
    listApplication.addAll(criteria.list());
    entityManager.close();
    return listApplication;
}

有人知道这里有什么问题?

也许由于连接限制,您在数据份上没有连接?

如果连接用完了,则应在数据库上允许更多,或者检查是否关闭所有完成的连接。(我看到您控制了您的实体经理和会议,所以这可能是一种情况)

另外,为什么要使用EntityManagerFactory?你有充分的理由吗?如果没有,请尝试@persistanceContext,它应该解决您的问题。

您只能在Spring管理的类中使用@persistanceContext。(仅由春季组件)。否则,您需要留住EntityManagerFactory的实体经理

最新更新