/ / Comment initialiser une session d'hibernation à partir d'un servlet? - java, hibernation, servlets

Comment initialiser une session d'hibernation à partir d'un servlet? - java, hibernation, servlets

J'apprends les servlets java et l'hibernation. J'ai des exemples de travail distincts pour chacune et j'essaie maintenant de fusionner l'exemple d'hibernation dans un servlet http.

Mon exemple d'hibernation simple commence par ce code

factory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = factory.openSession();

Lorsque la servlet http est appelée via un http get, je comprends qu’elle appelle d’abord le constructeur, puis la méthode doGet.

Maintenant ma question (s'il vous plaît soyez tranquille avec moi car je mnewbie here): quel est le moyen accepté d’appeler le code d’initialisation hibernate à partir du servlet? Est-ce que je mets le code d'initialisation ci-dessus dans la méthode constructeur?

Réponses:

7 pour la réponse № 1

Il y a beaucoup de façons de gérer une session de veille prolongée. L’un des moyens les plus courants consiste à utiliser HibernateUtil classe. La mise en œuvre habituelle est la SessionFactory est initialisé statiquement, ce qui signifie que l’initialisation ne sera effectuée qu’une fois (lorsque la classe est chargée). Ensuite, il expose une méthode statique pour obtenir le construit SessionFactory exemple. Voici un exemple d'implémentation de dzone.

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure()
.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

Pour l'ouverture et la fermeture de la session, il est généralement traité comme une unité avec le traitement de la demande, vous appelez donc HibernateUtil.getSessionFactory().openSession() au début de doGet ou doPost et assurez-vous de fermer la session avant la fin de la méthode.


3 pour la réponse № 2

Créez une classe distincte pour la connexion Hibernet.

    package com.abc.xyz.dao;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;


public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

@SuppressWarnings("deprecation")
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from Annotation
return new AnnotationConfiguration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

Du côté du serveur, obtenez une connexion pour cela

        Session session=null;

try {
session =HibernateUtil.getSessionFactory().openSession();



} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
session.close();
}

-4 pour la réponse № 3

Essayez avec l'écouteur de servlet.