2017-02-27 129 views
0

我得到了一个Spring Web应用程序与休眠。我几乎完成了开发工作,并且正在进行一些压力测试,以了解如果很多用户同时在同一页面上连接,会发生什么情况。休眠会话/ EntityManager关闭压力测试

我一定是做错了什么事在我的Hibernate的配置和/或代码,因为我得到这些错误:

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; 
} 

有人知道这个问题是在这里什么?

+1

也许您因连接限制而导致数据库连接不足? – Rjiuk

+0

另外你为什么使用EntityManagerFactory?你有很好的理由吗?如果没有,尝试@PersistanceContext它应该可以解决你的问题。 – Rjiuk

+0

我会检查你的答案,我会回来后,谢谢你的意见;) –

回答

1

也许你因为连接限制而无法连接数据库?

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

另外你为什么使用EntityManagerFactory?你有很好的理由吗?如果没有,尝试@PersistanceContext它应该可以解决你的问题。

您只能在Spring管理的类中使用@PersistanceContext。 (只能通过弹簧组件)。否则,您需要继续通过EntityManagerFactory获取实体管理器