2016-02-29 1 views
0

Je me demande si nous devrions utiliser session.close() lorsque j'utilise le regroupement de connexions c3p0 en hibernation? ou c3p0 se ferme automatiquement après un certain intervalle de temps? Ai-je besoin de simplement ouvrir la session pardoivent être fermées dans Hibernate lorsque nous utilisons le pooling de connexion c3p0?

SessionFactory factory = HibernateUtil.getSessionFactory(); 
Session session=factory.openSession(); 

Parce que dans le didacticiel suivant, il ne ferme pas la session.

http://examples.javacodegeeks.com/enterprise-java/hibernate/hibernate-connection-pool-configuration-with-c3p0-example/

Quelle est la bonne façon?

Edit:

Ce serait mon code

@SuppressWarnings("unchecked") 
@Override 
public JSONObject getUserDetails(int id) { 
    long lStartTime = new Date().getTime(); 
    JSONObject obj = new JSONObject(); 
    try(Session session=factory.openSession()) { 
     Employee emp=(Employee)session.load(Employee.class,id);  

     if(emp != null) { 
      obj.put("id", emp.getId()); 
      obj.put("name", emp.getName()); 
     }     
     long lEndTime = new Date().getTime(); 
     log.info("[ Personal Details ]Time elapsed For Fetching :"+(lEndTime - lStartTime)); 

    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

Répondre

2

Je recommande que vous close vos ressources dès que vous le pouvez, de cette façon, la connexion sera retournée à la piscine plus vite. Vous pouvez également utiliser le try-with-resources Statement pour vous assurer que cela se produit. Comme ELLIOT dit son meilleur

SessionFactory factory = HibernateUtil.getSessionFactory(); 
try (Session session = factory.openSession()) { 
    // ... 
} 
+0

Merci Elliott. Mais, ma question est que je devrais écrire "session.close()" explicitement dans le code? – Syed

+0

Si vous n'utilisez pas 'try-with-resources', alors ** yes ** vous devriez * explicitement écrire' session, close() 'dans un bloc *' 'finally' *. –

+0

Merci pour votre mise à jour. Mais qu'est-ce qui fait exactement le diff? – Syed

0

pour fermer les sessions manuellement sans compter sur quelque chose ou vous pouvez utiliser le bloc d'essai spécifié ci-dessus si vous utilisez java 7 ou au-dessus.

0

Oui, essayez try-with-resources est une meilleure option.

Mais voici quelques postulats à ce sujet:

  1. Toute exception levée des états-essai avec-ressources sont supprimées.
  2. Vous pouvez utiliser catch, enfin bloquer comme avec try-catch normal.
  3. Vous pouvez déclarer plusieurs ressources séparées par un point-virgule dans les essayer avec-ressources comme
try (
     java.util.zip.ZipFile zf = 
      new java.util.zip.ZipFile(zipFileName); 
     java.io.BufferedWriter writer = 
      java.nio.file.Files.newBufferedWriter(outputFilePath, charset) 
    ) 
  1. Il ferme les ressources après la fin de essayez de bloquer d'abord, c'est-à-dire si une exception vient d'essayer de bloquer ou non. Après cela, il exécute catch, enfin block.
  2. Votre ressource déclarée dans l'instruction try-with-resource doit implémenter l'interface AutoCloseable ou Closeable.