From: <hib...@li...> - 2006-08-03 17:07:32
|
Author: AnthonyHib Date: 2006-08-03 13:07:28 -0400 (Thu, 03 Aug 2006) New Revision: 10204 Added: trunk/Hibernate3/doc/reference/fr/modules/architecture.xml Log: update for 3.2 doc compliance Added: trunk/Hibernate3/doc/reference/fr/modules/architecture.xml =================================================================== --- trunk/Hibernate3/doc/reference/fr/modules/architecture.xml 2006-08-03 17:06:21 UTC (rev 10203) +++ trunk/Hibernate3/doc/reference/fr/modules/architecture.xml 2006-08-03 17:07:28 UTC (rev 10204) @@ -0,0 +1,359 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<chapter id="architecture"> + + <title>Architecture</title> + + <sect1 id="architecture-overview" revision="1"> + <title>Gralit/title> + + <para> + Voici une vue (tr haut niveau de l'architecture d'Hibernate : + </para> + + <mediaobject> + <imageobject role="fo"> + <imagedata fileref="images/overview.svg" format="SVG" align="center"/> + </imageobject> + <imageobject role="html"> + <imagedata fileref="../shared/images/overview.gif" format="GIF" align="center"/> + </imageobject> + </mediaobject> + + <para> + Ce diagramme montre Hibernate utilisant une base de donn et des donn + de configuration pour fournir un service de persistance (et des objets + persistants) 'application. + </para> + + <para> + Nous aimerions dire une vue plus dillde l'architecture. Malheureusement, + Hibernate est flexible et supporte diffntes approches. Nous allons en + montrer les deux extrs. L'architecture lre laisse l'application fournir + ses propres connexions JDBC et gr ses propres transactions. Cette approche + utilise le minimum des APIs Hibernate : + </para> + + <mediaobject> + <imageobject role="fo"> + <imagedata fileref="images/lite.svg" format="SVG" align="center"/> + </imageobject> + <imageobject role="html"> + <imagedata fileref="../shared/images/lite.gif" format="GIF" align="center"/> + </imageobject> + </mediaobject> + + <para> + L'architecture la plus compl abstrait l'application des APIs JDBC/JTA + sous-jacentes et laisse Hibernate s'occuper des dils. + </para> + + <mediaobject> + <imageobject role="fo"> + <imagedata fileref="images/full_cream.svg" format="SVG" align="center"/> + </imageobject> + <imageobject role="html"> + <imagedata fileref="../shared/images/full_cream.gif" format="GIF" align="center"/> + </imageobject> + </mediaobject> + + <para> + Voici quelques dnitions des objets des diagrammes : + + <variablelist spacing="compact"> + <varlistentry> + <term>SessionFactory (<literal>org.hibernate.SessionFactory</literal>)</term> + <listitem> + <para> + Un cache threadsafe (immuable) des mappings vers une (et une seule) base + de donn. Une factory (fabrique) de <literal>Session</literal> et un client + de <literal>ConnectionProvider</literal>. Peut contenir un cache optionnel de + donn (de second niveau) qui est rilisable entre les diffntes transactions + que cela soit au sein du m processus (JVLM) ou par plusieurs nuds d'un cluster. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>Session (<literal>org.hibernate.Session</literal>)</term> + <listitem> + <para> + Un objet mono-threadurde vie courte, qui reprnte une conversation + entre l'application et l'entrepe persistance. Encapsule une connexion JDBC. + Factory (fabrique) des objets <literal>Transaction</literal>. Contient un cache + (de premier niveau) des objets persistants, ce cache est obligatoire. Il est + utilisors de la navigation dans le graphe d'objets ou lors de la rption + d'objets par leur identifiant. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>Objets et Collections persistants</term> + <listitem> + <para> + Objets mono-threadie courte contenant l't de persistance + et la fonction mer. Ceux-ci sont en gral les objets de type JavaBean + (ou POJOs) ; la seule particularitst qu'ils sont associavec une (et + une seule) <literal>Session</literal>. Dque la <literal>Session</literal> + est ferm ils seront dchet libres d'e utilispar n'importe laquelle + des couches de l'application (ie. de et vers la prntation en tant que Data + Transfer Objects - DTO : objet de transfert de donn). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>Objets et collections transients</term> + <listitem> + <para> + Instances de classes persistantes qui ne sont actuellement pas associ une <literal>Session</literal>. Elles ont pu e instanci par l'application + et ne pas avoir (encore) persist ou elle ont pu e instanci par + une <literal>Session</literal> ferm + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>Transaction (<literal>org.hibernate.Transaction</literal>)</term> + <listitem> + <para> + (Optionnel) Un objet mono-thread vie courte utilisar l'application + pour dnir une unite travail atomique. Abstrait l'application des + transactions sous-jacentes qu'elles soient JDBC, JTA ou CORBA. Une + <literal>Session</literal> peut fournir plusieurs <literal>Transaction</literal>s + dans certains cas. Toutefois, la dmitation des transactions, via l'API d'Hibernate + ou par la <literal>Transaction</literal> sous-jacente, n'est jamais optionnelle! + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)</term> + <listitem> + <para> + (Optionnel) Une fabrique de (pool de) connexions JDBC. Abstrait l'application + de la <literal>Datasource</literal> ou du <literal>DriverManager</literal> sous-jacent. + Non expos l'application, mais peut e ndu/implntar le dloppeur. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)</term> + <listitem> + <para> + (Optionnel) Une fabrique d'instances de <literal>Transaction</literal>. Non + expos l'application, mais peut e ndu/implntar le dloppeur. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>Interfaces d'extension</emphasis></term> + <listitem> + <para> + Hibernate fournit de nombreuses interfaces d'extensions optionnelles que + vous pouvez implnter pour personnaliser le comportement de votre couche de persistance. + Reportez vous a documentation de l'API pour plus de dils. + </para> + </listitem> + </varlistentry> + </variablelist> + </para> + + <para> + Dans une architecture lre, l'application n'aura pas tiliser les APIs + <literal>Transaction</literal>/<literal>TransactionFactory</literal> + et/ou n'utilisera pas les APIs <literal>ConnectionProvider</literal> + pour utiliser JTA ou JDBC. + </para> + </sect1> + + <sect1 id="architecture-states" revision="1"> + <title>Etats des instances</title> + <para> + Une instance d'une classe persistante peut e dans l'un des trois ts suivants, + dnis par rapport n <emphasis>contexte de persistance</emphasis>. + L'objet <literal>Session</literal> d'hibernate correspond e concept de + contexte de persistance : + </para> + + <variablelist spacing="compact"> + <varlistentry> + <term>passager (transient)</term> + <listitem> + <para> + L'instance n'est pas et n'a jamais associn contexte + de persistance. Elle ne poss pas d'identitersistante (valeur de clrimaire) + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>persistant</term> + <listitem> + <para> + L'instance est associau contexte de persistance. + Elle poss une identitersistante (valeur de clrimaire) + et, peut-e, un enregistrement correspondant dans la base. + Pour un contexte de persistance particulier, Hibernate + <emphasis>garantit</emphasis> que l'identitersistante + est ivalente 'identitava (emplacement mire de l'objet) + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>dchterm> + <listitem> + <para> + L'instance a associau contexte de persistance mais ce + contexte a fermou l'instance a salisvers un + autre processus. Elle poss une identitersistante et + peut-e un enregistrement correspondant dans la base. + Pour des instances dch, Hibernate ne donne aucune + garantie sur la relation entre l'identitersistante et + l'identitava. + </para> + </listitem> + </varlistentry> + </variablelist> + </sect1> + + <sect1 id="architecture-jmx" revision="1"> + <title>Intation JMX</title> + <para> + JMX est le standard J2EE de gestion des composants Java. + Hibernate peut e g via un service JMX standard. Nous fournissons une implntation + d'un MBean dans la distribution : <literal>org.hibernate.jmx.HibernateService</literal>. + </para> + + <para> + Pour avoir un exemple sur la mani de doyer Hibernate en tant que service JMX dans le + serveur d'application JBoss Application Server, rrez vous au guide utilisateur JBoss (JBoss User Guide). + Si vous doyez Hibernate via JMX sur JBoss AS, vous aurez lement les bfices suivants : + </para> + <itemizedlist> + <listitem> + <para> + <emphasis>Gestion de la session :</emphasis> Le cycle de vie de la <literal>Session</literal> + Hibernate peut e automatiquement limita portd'une transaction JTA. + Cela signifie que vous n'avez plus besoin d'ouvrir et de fermer la <literal>Session</literal> + manuellement, cela devient le travail de l'intercepteur EJB de JBoss. Vous n'avez + pas non plus ous occuper des drcations des transactions dans votre code (sauf + si vous voulez ire une couche de persistance qui soit portable, dans ce cas vous + pouvez utiliser l'API optionnelle <literal>Transaction</literal> d'Hibernate). + Vous appelez l'<literal>HibernateContext</literal> pour accr a <literal>Session</literal>. + </para> + </listitem> + <listitem> + <para> + <emphasis>Doiement HAR :</emphasis> Habituellement vous doyez le service JMX + Hibernate en utilisant le descripteur de doiement de JBoss (dans un fichier EAR et/ou un SAR), + il supporte toutes les options de configuration usuelles d'une <literal>SessionFactory</literal> + Hibernate. Cependant, vous devez toujours nommer tous vos fichiers de mapping dans le + descripteur de doiement. Si vous ddez d'utiliser le doiement optionnel sous forme + de HAR, JBoss dctera automatiquement tous vos fichiers de mapping dans votre fichier HAR. + </para> + </listitem> + </itemizedlist> + + <para> + Consultez le guide d'utilisation de JBoss AS pour plus d'informations sur ces options. + </para> + + <para> + Les statistiques pendant l'extion d'Hibernate (au runtime) sont une + autre fonctionnalitisponible en tant que service JMX. Voyez pour cela + <xref linkend="configuration-optional-statistics"/>. + </para> + </sect1> + + <sect1 id="architecture-jca" revision="1"> + <title>Support JCA</title> + <para> + Hibernate peut aussi e configurn tant que connecteur JCA. Rrez-vous au site + web pour de plus amples dils. Il est important de noter que le support JCA d'Hibernate + est encore consid comme expmental. + </para> + </sect1> + + <sect1 id="architecture-current-session" revision="2"> + <title>Sessions Contextuelles</title> + <para> + Certaines applications utilisant Hibernate ont besoin d'une sorte de session "contextuelle", o une session est lia portd'un contexte particulier. Cependant, les applications ne dnissent + pas toutes la notion de contexte de la m mani, et diffnts contextes dnissent diffntes + port a notion de "courant". Les applications ase d'Hibernate, versions prdentes a 3.0 + utilisaient gralement un principe maison de sessions contextuelles bas sur le <literal>ThreadLocal</literal>, + ainsi que sur des classes utilitaires comme <literal>HibernateUtil</literal>, ou utilisaient des + framework tiers (comme Spring ou Pico) qui fournissaient des sessions contextuelles bas sur + l'utilisation de proxy/interception. + </para> + <para> + A partir de la version 3.0.1, Hibernate a ajouta mode <literal>SessionFactory.getCurrentSession()</literal>. + Initialement, cela demandait l'usage de transactions <literal>JTA</literal>, o+ transaction <literal>JTA</literal> dnissait la portet le contexte de la session courante. + L'ipe Hibernate pense que, nt donnla maturites implntations de <literal>JTA TransactionManager</literal> , + la plupart (sinon toutes) des applications devraient utiliser la gestion des transactions par <literal>JTA</literal> + qu'elles soient ou non doy dans un conteneur <literal>J2EE</literal>. Par consent, + vous devriez toujours contextualiser vos sessions, si vous en avez besoin, via la mode bassur JTA. + </para> + <para> + Cependant, depuis la version 3.1, la logique derri + <literal>SessionFactory.getCurrentSession()</literal> est drmais branchable. + A cette fin, une nouvelle interface d'extension (<literal>org.hibernate.context.CurrentSessionContext</literal>) + et un nouveau parame de configuration (<literal>hibernate.current_session_context_class</literal>) + ont ajoutpour permettre de configurer d'autres moyens de dnir la portet le contexte des + sessions courantes. + </para> + <para> + Allez voir les Javadocs de l'interface <literal>org.hibernate.context.CurrentSessionContext</literal> + pour une description dillde son contrat. Elle dnit une seule mode, + <literal>currentSession()</literal>, depuis laquelle l'implntation est responsable + de traquer la session courante du contexte. Hibernate fournit deux implntation + de cette interface. + </para> + + <itemizedlist> + <listitem> + <para> + <literal>org.hibernate.context.JTASessionContext</literal> - les sessions courantes sont + associ ne transaction <literal>JTA</literal>. La logique est la m que + l'ancienne approche bassur JTA. Voir les javadocs pour les dils. + </para> + </listitem> + <listitem> + <para> + <literal>org.hibernate.context.ThreadLocalSessionContext</literal> - les sessions + courantes sont associ au thread d'extion. Voir les javadocs pour les dils. + </para> + </listitem> + <listitem> + <para> + <literal>org.hibernate.context.ManagedSessionContext</literal> - les sessions + courantes sont traqu par l'extion du thread. Toutefois, vous s responsable + de lier et der une instance de <literal>Session</literal> avec les modes + statiques de cette classes, qui n'ouvre, ne flush ou ne ferme jamais de <literal>Session</literal>. + </para> + </listitem> + </itemizedlist> + + <para> + Les deux implntations fournissent un mod de programmation de type "une session - une transaction + a base de donn", aussi connu sous le nom de <emphasis>session-per-request</emphasis>. + Le dt et la fin d'une session Hibernate sont dnis par la durd'une transaction de base de donn. + Si vous utilisez une drcation programmatique de la transaction (par exemple sous J2SE ou JTA/UserTransaction/BMT), + nous vous conseillons d'utiliser l'API Hibernate <literal>Transaction</literal> pour masquer le syst + de transaction utilisSi vous extez sous un conteneur EJB qui supporte CMT, vous n'avez besoin d'aucune + options de drcations de session ou transaction dans votre code puisque tout + est g de mani darative. Rrez vous xref linkend="transactions"/> pour plus d'informations + et des exemples de code. + </para> + + <para> + Le parame de configuration <literal>hibernate.current_session_context_class</literal> + dnit quelle implntation de <literal>org.hibernate.context.CurrentSessionContext</literal> + doit e utilis Notez que pour assurer la compatibilitvec les versions prdentes, si + ce parame n'est pas dni mais qu'un <literal>org.hibernate.transaction.TransactionManagerLookup</literal> + est configurHibernate utilisera le <literal>org.hibernate.context.JTASessionContext</literal>. + La valeur de ce parame devrait juste nommer la classe d'implntation tiliser, + pour les deux implntations fournies, il y a cependant deux alias correspondant: "jta" et "thread". + </para> + + </sect1> + +</chapter> + |