IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Exécution d'un ordre SQL particulier au démarrage de l'application


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut Exécution d'un ordre SQL particulier au démarrage de l'application
    Bonjour,

    Mon application utilise un mapping via annotation (JPA). Je souhiaterais lui faire executer un ordre SQL (SET ENCRYPTION PASSWORD = 'atlantic' WITH HINT='ocean') au demarrage de l'application pour pouvoir ensuite utiliser les fonctions d'encryption (via des @ColumnTransformer) de ma base (db2/400). Comment puis-je faire?

    Merci par avance.

    Youkoun

  2. #2
    Membre expérimenté Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Bonsoir,

    C'est peut-être jouable si tu (re)définis ta propre implémentation de l'interface org.hibernate.connection.ConnectionProvider.

    "L'astuce" consiste à hériter d'une des implémentations dispos dans l'API Hibernate (par exemple la classe org.hibernate.connection.DatasourceConnectionProvider si tu utilises une datasource dans un serveur d'application) et à surcharger la méthode getConnection() pour passer ton ordre SQL.
    Au niveau de la configuration Hibernate, tu références ta classe avec la propriété hibernate.connection.provider_class
    Tu trouveras ici un exemple pour créer ton propre "connection provider"
    http://www.javalobby.org/java/forums/t18406.html

    En moins intrusif dans la conf Hibernate, tu peux aussi tenter d'intercepter l'obtention de la session Hibernate (= méthodes openSession ou getCurrentSession de la session factory) pour passer ton ordre SQL avant de faire tes traitements objets.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    Merci pour l'astuce. Je testerais des que j'ai un moment.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 93
    Par défaut
    Peut être il y a plus simple si tu utilise un hibernateUtil comme celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    public class HibernateUtil {
     
        private static final SessionFactory sessionFactory;
     
     
        static {
            try {
                // Crée la SessionFactory
                sessionFactory =
                        new Configuration().configure().buildSessionFactory();
            } catch (HibernateException ex) {
                throw new RuntimeException("Problème de configuration : "
                        + ex.getMessage(), ex);
            }
        }
        public static final ThreadLocal session = new ThreadLocal();
     
        public static Session currentSession()
                throws HibernateException {
            Session s = (Session) session.get();
            // Ouvre une nouvelle Session, si ce Thread n'en a aucune
            if (s == null) {
                s = sessionFactory.openSession();
                session.set(s);
            }
            return s;
        }
     
        public static void closeSession()
                throws HibernateException {
            Session s = (Session) session.get();
            session.set(null);
            if (s != null) {
                s.close();
            }
        }
    }
    tu peux peut être exécute ta requête dans la partie static juste après le build de la SessionFactory puisque c'elle ci n'est crée qu'une seule fois.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    Malheureusement, c est Spring + JNDI qui s'occupe d'ouvrir la SessionFactory.

  6. #6
    Membre expérimenté Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Si par JNDI, tu entends datasource d'un serveur d'application, tu peux éventuellement regarder de ce côté là.
    Par exemple dans un serveur JBoss, sur une datasource de type <local-tx-datasource>, il est possible de définir un ordre SQL à appliquer à la création de la connexion en utilisant la balise <new-connection-sql>.

Discussions similaires

  1. trace d'exécution d'une transaction SQL
    Par peluche13000 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/12/2005, 17h36
  2. Syntaxe tableaux dans ordre SQL INSERT
    Par lio33 dans le forum SQL
    Réponses: 6
    Dernier message: 19/10/2005, 17h07
  3. Optimisation du code des ordres SQL
    Par Titouf dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/08/2005, 22h08
  4. [Oracle] Exécuter une procédure PL/SQL en PHP?
    Par Cerberes dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 25/02/2005, 14h11
  5. presentation d'un ordre SQL
    Par waffle200 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2003, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo