1. 봄 선언 거래
1.1 Spring의 거래 관리자
Spring은 거래를 직접 관리하지는 않지만 JTA가 제공하는 특정 플랫폼 또는 해당 지속 메커니즘의 트랜잭션 관리에 대한 책임을 위임합니다. 스프링 컨테이너는 사물 작동을 담당하고, 스프링 컨테이너는 얼굴 역할을하며 트랜잭션 방법을 향상 처리라고합니다. 생성 된 프록시 객체 방법은 대상 방법 + 향상입니다. 즉, 트랜잭션 프로그래머는 CRUD 작업, 즉 대상 방법 및 선언 된 메소드가 트랜잭션에서 실행해야합니다.
Spring은 많은 내장 트랜잭션 관리자 구현을 제공합니다.
DataSourCetransactionManager : org.springframework.jdbc.datasource 패키지에 위치한 Data Source Transaction Manager는 Spring JDBC Abstract Framework, Ibatis 또는 Mybatis Framework의 트랜잭션 관리를 위해 단일 javax.sql.datasource 트랜잭션 관리를 제공합니다.
JDOTRANSACTIONMANAGER : JDO 프레임 워크를 통합 할 때 트랜잭션 관리를 위해 단일 javax.jdo.jdo.persistencemanagerFactory의 트랜잭션 관리를 제공하는 org.springframework.orm.jdo 패키지에 위치하고 있습니다.
JPatrAnsactionManager : org.springframework.orm.jpa 패키지에 위치하고 단일 javax.persistence.entitymanagerfactory transactions에 대한 지원을 제공하며 JPA 구현 프레임 워크를 통합 할 때 트랜잭션을 관리하는 데 사용됩니다.
HiberNateTransactionManager : hibernate 프레임 워크를 통합 할 때 트랜잭션 관리에 사용되는 단일 org.hibernate.sessionfactory transaction에 대한 지원을 제공하는 org.springframework.orm.hibernate3 패키지에 위치하고 있습니다. 이 트랜잭션 관리자는 Hibernate3+ 버전 만 지원하며 Spring3.0+ 버전은 Hibernate 3.2+ 버전 만 지원합니다.
JTATRANSACTIONMANAGER : org.springframework.transaction.jta 패키지에 위치하고 있으며 분산 트랜잭션 관리에 대한 지원을 제공하고 Java EE Application Server Transaction Manager에 거래 관리를 위임합니다.
OC4JJTATRANSACTIONMANAGER : org.springframework.transaction.jta 패키지에 위치한 Spring은 OC4J10.1.3+ 응용 프로그램 서버 트랜잭션 관리자에 어댑터를 제공합니다. 이 어댑터는 응용 프로그램 서버에서 제공하는 고급 트랜잭션을 지원하는 데 사용됩니다.
WebSphereuOwTransactionManager : org.springframework.transaction.jta 패키지에 위치한 Spring은 WebSphere 6.0+ 응용 프로그램 서버 트랜잭션 관리자를위한 어댑터를 제공합니다. 이 어댑터는 애플리케이션 서버가 제공하는 고급 트랜잭션을 지원하는 데 사용됩니다.
WeblogicjtatransactionManager : org.springframework.transaction.jta 패키지에 위치한 Spring은 Weblogic 8.1+ 응용 프로그램 서버 트랜잭션 관리자에 어댑터를 제공합니다. 이 어댑터는 응용 프로그램 서버에서 제공하는 고급 트랜잭션을 지원하는 데 사용됩니다.
Spring은 이러한 거래 관리자를 제공 할뿐만 아니라 JMS Transaction Management 등을위한 관리자를 제공합니다. Spring은 그림과 같이 일관된 트랜잭션 추상화를 제공합니다.
봄과 최대 절전 모드
설명 :
Spring은 특정 트랜잭션 관리자에게 전화를 걸기 전에 일부 준비를 수행하고 거래의 읽기 및 쓰기 정책을 미리 설정하며 이러한 거래 정책은 공개 사항이며 Spring 구성 파일로 작성됩니다. 이러한 내용의 처리는 추상 클래스에 배치해야합니다.
2. 스프링 및 최대 절전 모드 통합시 거래 처리
1.2 XML 양식으로 속성 구성 파일 소개
<속성 이름 = "locations"> <value> classpath : jdbc.properties </value> </property>
DBCP 데이터 소스를 구성하십시오
<bean id = "dataSource"destry-method = "close"> <property name = "driverclassName"value = "$ {jdbc.driverClassName}" /> <property name = "url"value = "$ {jdbc.url}" /> <property name = "username"valess = "$ {jdbc.username}" "" "" "" "" ". 값 = "$ {jdbc.password}" /> < /bean>SessionFactory를 소개하고 최대 절전 모드 외부 구성 파일을 사용하십시오
<bean id = "sessionfactory2"> <속성 이름 = "configlocation"> <alue> classpath : hibernate.cfg.xml </value> </property> </bean>
DAO 및 서비스 계층을 주입하십시오
<bean id = "persondao"> <property name = "sessionfactory"> <Ref bean = "sessionfactory2"/> </property> </bean> <bean id = "personservice"> <property name = "persondao"> <ref bean = "persondao"/> </property> </bean>
최대 절전 모드 트랜잭션 관리자를 구성하십시오
<bean id = "transactionManager"> <property name = "sessionFactory"> <ref bean = "sessionFactory2"/> </property> </bean>
선언적 거래를 구성합니다
효과:
1. 스프링 컨테이너 트랜잭션 관리자에게 알리십시오
2. 스프링 컨테이너에게 어떤 트랜잭션을 사용할 것인지
<tx : 조언 트랜잭션-매너 = "transactionManager"id = "tx"> <tx : attributes> <!-대상 메소드 분리 전파 전파 전파 전파 전파 전파 전파 속성 판 읽기 전용 거래 전용 트랜잭션 허위-쓰레기 트랜잭션-> <tx : "save*"distault ""provagation = "read read" "read folo ="guest "/>. </tx : 속성> </tx : 조언>
진입 점을 구성합니다
<aop : config> <aop : pointcut expression = "execution (*cn.qjc.hibernate.service.impl.*. </aop : config>
DAO 구현 클래스
* 구현 방법 1 : hibernatedaoSupport 상속 * @author qjc */ public class persondaoimpl은 hibernatedaoSupport 확장 persondao {@override public void saveperson (person) {this.gethibernateTemplate (). save (person); }}시험
...
알아채다:
1. DAO 클래스가 HibernatedAoSupport를 상속하는 경우 SessionFactory를 스프링 구성 파일에만 주입하면됩니다.
2. DAO 클래스가 HibernateAosupport를 상속하지 않으면 SessionFactory 속성이있어 구성 파일에 주입해야합니다.
<bean id = "HibernateTemplate"> <속성 이름 = "sessionFactory"ref = "sessionFactory2"> </property> </bean>
1.2 주석의 형태로
1. 구성 파일에 Spring의 자동 스캔 메커니즘을 적용하십시오
<Context : Component-Scan Base-Package = "CN.QJC"/>
2. 구성 파일에 주석 파서를 소개합니다
<TX : 주석 중심의 트랜잭션-매너 = "TransactionManager"/>
3. 서비스 계층에서 @transaction을 통해 주석을 달다
참고 : 클래스 수준에서 읽기 전용 트랜잭션으로 주석을 달면이 클래스의 메소드에 주석이 달린 @Transaction의 트랜잭션 설정은 주석이 달린 클래스 수준의 트랜잭션 설정보다 우선합니다.
1.3 스프링 트랜잭션의 전파 속성
필수 : 비즈니스 방법은 거래에서 실행해야합니다. 이 방법이 실행 중일 때 이미 트랜잭션에있는 경우 거래에 가입하고 그렇지 않으면 스스로 새로운 트랜잭션을 만듭니다 (기본값).
지원되지 않음 : 스프링 컨테이너는 거래를 열지 않습니다. 이 방법이 거래에서 호출되면 거래가 중단됩니다. 방법이 완료되면 거래가 복원됩니다.
요구 사항 : 거래가 존재하는지 여부에 관계없이 비즈니스 방법은 항상 새로운 거래를 생성합니다.
Mandatorky : 비즈니스 방법은 기존 거래에서만 실행할 수 있습니다. 거래없이 비즈니스 방법이 호출되면 컨테이너는 예외를 던집니다.
또한 지지대, 절대, 중첩 등과 같은 속성이 있지만 일반적으로 기본값이 사용됩니다.
전파 = "필수"이 구성은 트랜잭션 중첩 문제를 해결할 수 있습니다. 트랜잭션 중첩이란 무엇입니까?
예를 들어:
워크 플로 프레임 워크에는 트랜잭션과 서비스 계층을 작동하는 특정 방법이 있습니다. 서비스 계층에는 자체 거래도 있습니다. 서비스가 실행되면 트랜잭션 중첩이 발생합니다. 즉, 메소드 자체에는 트랜잭션이 있으며 방법의 메소드에는 트랜잭션도 있습니다. 이것은 트랜잭션 중첩입니다. 스프링은 트랜잭션 전파 속성 전파 = "필수"를 통해이 문제를 해결합니다.
1.4 OpenInsessionView
S2SH 통합 후 Spring은 거래를 관리합니다. Spring의 선언 트랜잭션 처리 방법을 사용하므로 this.gethibernateTemplate () 메소드를 호출 한 직후 세션이 닫힙니다. 현재 실행 된 방법에 트랜잭션이있는 경우 트랜잭션 환경의 방법이 호출되면 세션이 닫힙니다. 따라서 페이지에서 값이 출력되면 예외가 생성됩니다.
처리 방법은 다음과 같습니다. OpenSessionInview 모드 (Web.xml에서 구성)
<filter> <filter-name> HibernateFilter </filter-name> <filter-class> org.springframework.orm.hibernate3.support.opensessionInviewFilter </filter-class> <!-단일은 기본적으로 사실입니다. false로 설정된 경우 OpenSessionInview가 없음-> <init-param> <param-name> Singlessession </param-name> <param- value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name> hibernatefilter </filter-name> </url-panttern>/url-panttern> </필터 매핑>
위의 코드에서 요청을 제출할 때 OpenSessionInView에서 세션이 켜져 있고 응답 후 세션이 닫혀 있어야 함을 알 수 있습니다. 즉, OpenSsessionInview는 Struts2의 필터 앞에 있어야합니다. (struts2 필터 위치를 위에 올려 놓으십시오)
그러나 OpenSessionInView를 활성화 할 수있는 단점이 있습니다. 세션 종료가 지연되고 첫 번째 수준의 최대 절전 모드 캐시가 세션에 있기 때문에 많은 양의 캐시 된 데이터가 오랫동안 메모리에 유지됩니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.