2017-02-27 4 views
0

Ich habe eine Spring Web Application mit Hibernate darauf. Ich bin fast mit der Entwicklung fertig und führe einen Stresstest durch, um herauszufinden, was passiert, wenn sich viele Benutzer gleichzeitig auf derselben Seite anmelden.Hibernate Sitzung/EntityManager ist bei Stresstest geschlossen

ich etwas falsch in meiner Hibernate-Konfiguration oder/und Code, weil ich diese Fehler erhalten getan haben muss:

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é. 

Hier ist der Code:

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

Jemand wissen, was das Problem hier ist, ?

+1

Vielleicht haben Sie keine Verbindung mehr in Ihrer Datenbank wegen Verbindungslimit? – Rjiuk

+0

Warum verwenden Sie auch EntityManagerFactory? Hast du einen guten Grund? Falls nicht, versuchen Sie es mit @PersistanceContext, um Ihre Probleme zu lösen. – Rjiuk

+0

Ich werde auf Ihre Antworten überprüfen und ich komme später zurück, danke für Kommentare;) –

Antwort

1

Vielleicht haben Sie keine Verbindung mehr in Ihrer Datenbank wegen Verbindungslimit?

Wenn Sie keine Verbindungen mehr haben, sollten Sie entweder mehr Datenbank erlauben oder prüfen, ob Sie alle fertigen Verbindungen geschlossen haben. (Ich sehe, dass Sie Ihren Entity Manager und Sitzungen so steuern, dass dies ein Fall sein könnte)

Auch warum verwenden Sie EntityManagerFactory? Hast du einen guten Grund? Falls nicht, versuchen Sie es mit @PersistanceContext, um Ihre Probleme zu lösen.

Sie können @PersistanceContext nur in von Spring verwalteten Klassen verwenden. (nur durch Federkomponenten). Sonst müssen Sie mit EntityManagerFactory beim Abrufen von EntityManagern bleiben.

Verwandte Themen