1. Frühjahrsklarative Transaktionen
1.1 Transaktionsleiter von Spring
Spring verwaltet Transaktionen nicht direkt, delegiert jedoch die Verantwortung für die Verwaltung von Transaktionen auf Transaktionsimplementierungen einer bestimmten Plattform, die von JTA oder entsprechende Persistenzmechanismen bereitgestellt wird. Der Federbehälter ist für den Betrieb von Dingen verantwortlich, der Federbehälter wirkt als Gesicht und die Transaktionsmethode wird als Verbesserungsverarbeitung bezeichnet. Die generierte Proxy -Objektmethode ist die Zielmethode + Verbesserung, dh der Transaktionsprogrammierer verwendet nur den CRUD -Betrieb, dh die Zielmethode und die deklarierte Methode sollte in der Transaktion ausgeführt werden.
Spring bietet viele integrierte Transaktionsmanager-Implementierungen:
DataSourcetRansActionManager: Das Datenquellen -Transaktionsmanager im Paket org.springframework.jdbc.datasource bietet eine einzelne javax.sql.datasource -Transaktionsmanagement für das Transaktionsmanagement von Spring JDBC abstrakt, ibatis oder mybatis -Framework.
JDoTransactionManager: befindet sich im Paket org.springframework.orm.jdo und bietet Transaktionsmanagement eines einzelnen Javax.jdo.PersistenCanagerFactory für das Transaktionsmanagement bei der Integration des JDO -Frameworks;
JpatransactionManager: befindet sich im org.springframework.orm.jpa -Paket und bietet Unterstützung für eine einzelne Javax.Persistence.EntityManagerFactory -Transaktionen und wird verwendet, um Transaktionen bei der Integration von JPA -Implementierungsrahmen zu verwalten.
HibernatetransactionManager: befindet sich im Paket org.springFramework.orm.hiberNate3, das eine einzelne org.hiberNate.SessionFactory -Transaktion unterstützt, die für die Transaktionsmanagement verwendet wird, um das Hibernate -Framework zu integrieren. Dieser Transaktionsmanager unterstützt nur die Hibernate3+ -Version und die Spring3.0+ -Version unterstützt nur die Hibernate 3.2+ -Version.
JtatransactionManager: befindet sich im Paket org.springFramework.transaction.jta, das unterstützt für das verteilte Transaktionsmanagement und die Delegierung der Transaktionsmanagement an den Java Ee Application Server Transaction Manager.
OC4JJTATRANSACTIONMANAGER: In der org.springframework.transaction.jta -Paket befindet Spring einen Adapter an OC4J10.1.3+ Application Server Transaction Manager. Dieser Adapter wird verwendet, um erweiterte Transaktionen zu unterstützen, die vom Anwendungsserver bereitgestellt werden.
WebSpehsphereuowTransactionManager: In der org.springframework.transaction.jta -Paket befindet Spring einen Adapter für WebSphere 6.0+ Application Server Transaction Manager. Dieser Adapter wird verwendet, um erweiterte Transaktionen zu unterstützen, die von Anwendungsservern bereitgestellt werden.
WebLogicjtatransactionManager: In der Paket org.springframework.transaction.jta befindet sich Spring einen Adapter für Weblogic 8.1+ Application Server Transaction Manager. Dieser Adapter wird verwendet, um erweiterte Transaktionen zu unterstützen, die vom Anwendungsserver bereitgestellt werden.
Spring liefert nicht nur diese Transaktionsmanager, sondern liefert auch Manager für das JMS -Transaktionsmanagement usw. Spring liefert eine konsistente Transaktionsabstraktion, wie in der Abbildung gezeigt.
Frühling und Winterschlaf
veranschaulichen:
Frühling hat einige Vorbereitungen vor dem Aufrufen des spezifischen Transaktionsmanagers und setzt die Lese- und Schreibrichtlinien der Transaktion im Voraus fest. Diese Transaktionsrichtlinien sind öffentliche Dinge und sind in der Frühlingskonfigurationsdatei geschrieben. Die Verarbeitung dieser Inhalte muss in eine abstrakte Klasse platziert werden.
2. Transaktionsverarbeitung in der Integration von Frühling und Winterschlaf
1.2 Einführung der Konfigurationsdatei der Eigenschaften in XML -Formular
<Eigenschaft name = "Standorte"> <wert> classPath: jdbc.properties </value> </Eigenschaft>
Konfigurieren Sie die DBCP -Datenquelle
<bean id="dataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value = "$ {jdbc.password}" /> < /bean>SessionFactory einführen, verwenden
<bean id = "sessionfactory2"> <Eigenschaft name = "configLocation"> <wert> classPath: hibernate.cfg.xml </value> </property> </bean>
DAO- und Service -Schichten injizieren
<bean id = "persondao"> <Eigenschaft name = "sessionfactory"> <ref bean = "sessionfactory2"/> </property> </bean> <bean id = "pelsonService"> <Eigentum name = "persondao"> <ref bean = "persondao"/> </</</bean>
Konfigurieren Sie den Hibernate -Transaktionsmanager
<bean id = "transactionManager"> <Eigenschaft name = "sessionfactory"> <ref bean = "sessionfactory2"/> </property> </bean>
Konfigurieren Sie deklarative Transaktionen
Wirkung:
1. Tell Spring Container Transaction Manager mit
2. Sagen Sie den Federcontainer mit welcher Methode mit welcher Transaktion verwenden
<tx:advice transaction-manager="transactionManager" id="tx"> <tx:attributes> <!-- name Scope of target method islation isolation level propagation propagation propagation attribute read-only true read-only transaction false read-write transaction--> <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> </tx:attributes> </tx: Ratschläge>
Einstiegspunkt konfigurieren
<AOP: config> <AOP: Pointcut Expression = "Ausführung (*cn.qjc.hibernate.service.impl.*. </AOP: config>
DAO -Implementierungsklasse
* Implementierungsmethode 1: Inherit Hibernatedaosupport * @Author QJC */ Public Class PersondaOImpl erweitert HibernatedaOsupport implementiert PERONDAO {@Override public void Saveperson (Person Person) {this.gethibernatetemplate (). Save (Person); }}prüfen
...
Beachten:
1. Wenn eine DAO -Klasse hibernatedaosupport erbt, müssen Sie nur SessionFactory in die Feder -Konfigurationsdatei einfügen.
2. Wenn eine DAO -Klasse Hibernatedaosupport nicht erbt, muss sie über ein SessionFactory -Attribut verfügen und es in die Konfigurationsdatei injizieren.
<bean id = "hibernatetemplate"> <Eigenschaft name = "SessionFactory" Ref = "Sessionfactory2"> </property> </bean>
1.2 in Form von Annotation
1. Anwenden Sie den automatischen Scanmechanismus von Spring in Konfigurationsdateien an
<Kontext: Komponenten-scan-Basis-Package = "Cn.qjc"/>
2. Einlegen Sie Annotation -Parser in die Konfigurationsdatei
<tx: Annotationsgetriebene Transaktionsmanager = "TransactionManager"/>
3.. Annotate über @Transaction in der Serviceschicht
HINWEIS: Wenn die Transaktionseinstellungen von @Transaction in den Methoden in dieser Klasse kommuniziert als schreibgeschützte Transaktion auf der Klassenebene annotiert werden, haben die Transaktionseinstellungen der annotierten Klassenebene Vorrang vor.
1.3 Ausbreitungseigenschaften von Federtransaktionen
Erforderlich: Die Geschäftsmethode muss in einer Transaktion ausgeführt werden. Wenn sich die Methode bereits bei der Ausführung in einer Transaktion befindet, verbinden Sie sie mit der Transaktion, andernfalls erstellen Sie eine neue Transaktion für sich selbst (Standard) (Standard).
Nicht unterstützt: Federbehälter öffnet keine Transaktion. Wenn die Methode in einer Transaktion aufgerufen wird, wird die Transaktion suspendiert. Nach Abschluss der Methode wird die Transaktion wiederhergestellt.
Erforderlich: Ob eine Transaktion vorliegt oder nicht, wird die Geschäftsmethode immer eine neue Transaktion erstellen.
Mandatorky: Eine Geschäftsmethode kann nur in einer vorhandenen Transaktion ausgeführt werden. Wenn die Geschäftsmethode ohne Transaktion aufgerufen wird, macht der Container eine Ausnahme.
Darüber hinaus gibt es Eigenschaften wie Unterstützung, niemals, verschachtelt usw., aber der Standard wird normalerweise verwendet
Propagation = "Erforderlich" Diese Konfiguration kann das Problem der Transaktionsverschachtung lösen. Was ist Transaktionsnisten?
Zum Beispiel:
Es gibt Transaktionen im Workflow -Framework und eine bestimmte Methode, die die Serviceschicht betreibt. Die Serviceschicht hat auch ihre eigenen Transaktionen. Wenn der Dienst ausgeführt wird, tritt die Verschachtung von Transaktionen auf, dh die Methode selbst hat Transaktionen und die Methoden in der Methode haben auch Transaktionen. Dies ist Transaktionsnisten. Spring löst dieses Problem durch die Transaktionsausbreitungsattributausbreitung = "Erforderlich".
1.4 openInSessionview
Nach der S2SH -Integration verwaltet Spring Transaktionen. Da die Deklarative Transaktionsverarbeitungsmethode von Spring verwendet wird, wird die Sitzung unmittelbar nach dem Aufruf geschlossen. Wenn in der aktuell ausgeführten Methode Transaktionen vorhanden sind, wird die Sitzung geschlossen, wenn die Methode der Transaktionsumgebung aufgerufen wird. Eine Ausnahme wird also generiert, wenn der Wert auf der Seite ausgegeben wird.
Die Verarbeitungsmethode lautet: OpenSessionInview -Modus (konfiguriert in Web.xml)
<Filter> <Filter-name> hibernateFilter </filter-name> <filter-classe> org.springframework.orm.Hibernate3.Support.OpenSessionInviewfilter </Filter-Class> <!-SingleSession ist standardmäßig wahr. Wenn es auf False gesetzt ist, ist es gleich keiner OpenSessioninView-> <init-param> <param-name> singleSession </param-name> <param-value> true </param-value> </init-param> </filter-name> </filter-mapping> <filter-name> hiberneFilter </filter-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-name> <url-pattern> <url-name> <url-name </filtermapping>
Aus dem obigen Code können wir sehen, dass bei der Übermittlung einer Anfrage die Sitzung in der OpenSessionInview eingeschaltet wurde und die Sitzung nach der Antwort geschlossen werden muss, was bedeutet, dass die OpenSessioninview vor dem Filter von Struts2 sein muss. (Stellen Sie die Struts2 -Filterposition oben ein)
Es gibt jedoch auch Nachteile, um OpenSessionInview zu aktivieren: Da sich die Sitzung der Sitzung verzögert und der Hibernate-Cache der ersten Stufe in der Sitzung befindet, was dazu führt, dass eine große Anzahl von zwischengespeicherten Daten lange Zeit im Speicher bleibt.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.