/lib/hibernate-distribution-3.3.0.GA/documentation/manual/fr-FR/html/architecture-current-session.html
HTML | 97 lines | 94 code | 3 blank | 0 comment | 0 complexity | 25170157b23a0f068d7ae6552a4efa8b MD5 | raw file
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-
- <title>2.5. Sessions Contextuelles</title>
- <link rel="stylesheet" href="css/html.css" type="text/css">
- <meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
- <link rel="start" href="index.html" title="HIBERNATE - Persistance relationnelle en Java standard">
- <link rel="up" href="architecture.html" title="Chapitre 2. Architecture">
- <link rel="prev" href="architecture-jca.html" title="2.4. Support JCA">
- <link rel="next" href="session-configuration.html" title="Chapitre 3. Configuration">
- </head>
- <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
- <div class="navheader">
- <table width="100%" summary="Navigation header">
- <tr>
- <th colspan="3" align="center">2.5. Sessions Contextuelles</th>
- </tr>
- <tr>
- <td width="20%" align="left"><a accesskey="p" href="architecture-jca.html">Précédent</a>
- </td>
- <th width="60%" align="center">Chapitre 2. Architecture</th>
- <td width="20%" align="right"> <a accesskey="n" href="session-configuration.html">Suivant</a></td>
- </tr>
- </table>
- <hr>
- </div>
- <div class="sect1" lang="fr-FR">
- <div class="titlepage">
- <div>
- <div>
- <h2 class="title" style="clear: both"><a name="architecture-current-session"></a>2.5. Sessions Contextuelles
- </h2>
- </div>
- </div>
- </div>
- <p>Certaines applications utilisant Hibernate ont besoin d'une sorte de session "contextuelle", où une session est liée à la
- portée d'un contexte particulier. Cependant, les applications ne définissent pas toutes la notion de contexte de la même manière,
- et différents contextes définissent différentes portées à la notion de "courant". Les applications à base d'Hibernate, versions
- précédentes à la 3.0 utilisaient généralement un principe maison de sessions contextuelles basées sur le <code class="literal">ThreadLocal</code>, ainsi que sur des classes utilitaires comme <code class="literal">HibernateUtil</code>, ou utilisaient des framework tiers (comme Spring ou Pico) qui fournissaient des sessions contextuelles basées sur l'utilisation
- de proxy/interception.
- </p>
- <p>A partir de la version 3.0.1, Hibernate a ajouté la méthode <code class="literal">SessionFactory.getCurrentSession()</code>. Initialement, cela demandait l'usage de transactions <code class="literal">JTA</code>, où la transaction <code class="literal">JTA</code> définissait la portée et le contexte de la session courante. L'équipe Hibernate pense que, étant donnée la maturité des implémentations
- de <code class="literal">JTA TransactionManager</code> , la plupart (sinon toutes) des applications devraient utiliser la gestion des transactions par <code class="literal">JTA</code> qu'elles soient ou non déployées dans un conteneur <code class="literal">J2EE</code>. Par conséquent, vous devriez toujours contextualiser vos sessions, si vous en avez besoin, via la méthode basée sur JTA.
-
- </p>
- <p>Cependant, depuis la version 3.1, la logique derrière <code class="literal">SessionFactory.getCurrentSession()</code> est désormais branchable. A cette fin, une nouvelle interface d'extension (<code class="literal">org.hibernate.context.CurrentSessionContext</code>) et un nouveau paramètre de configuration (<code class="literal">hibernate.current_session_context_class</code>) ont été ajoutés pour permettre de configurer d'autres moyens de définir la portée et le contexte des sessions courantes.
-
- </p>
- <p>Allez voir les Javadocs de l'interface <code class="literal">org.hibernate.context.CurrentSessionContext</code> pour une description détaillée de son contrat. Elle définit une seule méthode, <code class="literal">currentSession()</code>, depuis laquelle l'implémentation est responsable de traquer la session courante du contexte. Hibernate fournit deux implémentation
- de cette interface.
- </p>
- <div class="itemizedlist">
- <ul type="disc">
- <li>
- <p><code class="literal">org.hibernate.context.JTASessionContext</code> - les sessions courantes sont associées à une transaction <code class="literal">JTA</code>. La logique est la même que l'ancienne approche basée sur JTA. Voir les javadocs pour les détails.
- </p>
- </li>
- <li>
- <p><code class="literal">org.hibernate.context.ThreadLocalSessionContext</code> - les sessions courantes sont associées au thread d'exécution. Voir les javadocs pour les détails.
- </p>
- </li>
- <li>
- <p><code class="literal">org.hibernate.context.ManagedSessionContext</code> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <code class="literal">Session</code> instance with static methods on this class, it does never open, flush, or close a <code class="literal">Session</code>.
- </p>
- </li>
- </ul>
- </div>
- <p>The first two implementations provide a "one session - one database transaction" programming model, also known and used as
- <span class="emphasis"><em>session-per-request</em></span>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programmatic
- transaction demarcation in plain JSE without JTA, you are advised to use the Hibernate <code class="literal">Transaction</code> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions.
- If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need
- any transaction or session demarcation operations in your code. Refer to <a href="transactions.html" title="Chapitre 11. Transactions et accès concurrents">Chapitre 11, <i xmlns:xlink="http://www.w3.org/1999/xlink">Transactions et accès concurrents</i></a> for more information and code examples.
- </p>
- <p>Le paramètre de configuration <code class="literal">hibernate.current_session_context_class</code> définit quelle implémentation de <code class="literal">org.hibernate.context.CurrentSessionContext</code> doit être utilisée. Notez que pour assurer la compatibilité avec les versions précédentes, si ce paramètre n'est pas défini
- mais qu'un <code class="literal">org.hibernate.transaction.TransactionManagerLookup</code> est configuré, Hibernate utilisera le <code class="literal">org.hibernate.context.JTASessionContext</code>. La valeur de ce paramètre devrait juste nommer la classe d'implémentation à utiliser, pour les deux implémentations fournies,
- il y a cependant deux alias correspondant: "jta" et "thread".
- </p>
- </div>
- <div class="navfooter">
- <hr>
- <table width="100%" summary="Navigation footer">
- <tr>
- <td width="40%" align="left"><a accesskey="p" href="architecture-jca.html">Précédent</a>
- </td>
- <td width="20%" align="center"><a accesskey="u" href="architecture.html">Niveau supérieur</a></td>
- <td width="40%" align="right"> <a accesskey="n" href="session-configuration.html">Suivant</a></td>
- </tr>
- <tr>
- <td width="40%" align="left" valign="top">2.4. Support JCA </td>
- <td width="20%" align="center"><a accesskey="h" href="index.html">Sommaire</a></td>
- <td width="40%" align="right" valign="top"> Chapitre 3. Configuration</td>
- </tr>
- </table>
- </div>
- </body>
- </html>