Transaksjonelle merknader: Vår vs. JTA

Utholdenhetstopp

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

I denne opplæringen vil vi diskutere forskjellene mellom org.springframework.transaction.annotation.Transactional og javax.transaction.Transactional kommentarer.

Vi starter med en oversikt over deres konfigurasjonsegenskaper. Deretter vil vi diskutere hvilke typer komponenter hver kan brukes på, og under hvilke omstendigheter vi kan bruke den ene eller den andre.

2. Konfigurasjonsforskjeller

Vårens Transaksjonell merknader kommer med ekstra konfigurasjon sammenlignet med JTA-motparten:

  • Isolasjon - Våren tilbyr transaksjonsomfanget isolasjon gjennom isolering eiendom; i JTA er denne funksjonen imidlertid bare tilgjengelig på tilkoblingsnivå
  • Formering - tilgjengelig i begge biblioteker, gjennom forplantning eiendom i Spring, og verdi eiendom i Java EE; Vårtilbud Nestet som en ekstra forplantningstype
  • Skrivebeskyttet - kun tilgjengelig på våren lesKun eiendom
  • Tidsavbrudd - bare tilgjengelig på våren pause eiendom
  • Tilbakebetaling - begge kommentarene tilbyr tilbakeføringsadministrasjon; JTA sørger for tilbakestilling På og dontRollbackOn eiendommer, mens våren har tilbakestilling For og noRollbackFor, pluss to ekstra egenskaper: rollbackForClassName og noRollbackForClassName

2.1. Vår Transaksjonell Kommentar konfigurasjon

Som et eksempel, la oss bruke og konfigurere våren Transaksjonell kommentar om en enkel biltjeneste:

importer org.springframework.transaction.annotation.Transactional; @Service @Transactional (isolation = Isolation.READ_COMMITTED, propagation = Propagation.SUPPORTS, readOnly = false, timeout = 30) public class CarService {@Autowired private CarRepository carRepository; @Transactional (rollbackFor = IllegalArgumentException.class, noRollbackFor = EntityExistsException.class, rollbackForClassName = "IllegalArgumentException", noRollbackForClassName = "EntityExistsException") public Car save (Car car) {return carRepository. }}

2.3. JTA Transaksjonell Kommentar konfigurasjon

La oss gjøre det samme for en enkel leietjeneste ved bruk av JTA Transaksjonell kommentar:

importere javax.transaction.Transactional; @Service @Transactional (Transactional.TxType.SUPPORTS) offentlig klasse RentalService {@Autowired private CarRepository carRepository; @Transactional (rollbackOn = IllegalArgumentException.class, dontRollbackOn = EntityExistsException.class) public Car rent (Car car) {return carRepository.save (car); }}

3. Anvendbarhet og utskiftbarhet

JTA Transaksjonell merknader gjelder CDI-administrerte bønner og klasser definert som administrerte bønner av Java EE-spesifikasjonen, mens Spring's Transaksjonell merknader gjelder bare vårbønner.

Det er også verdt å merke seg at støtte for JTA 1.2 ble introdusert i Spring Framework 4.0. Og dermed, vi kan bruke JTA Transaksjonell kommentar i vårapplikasjoner. Omvendt er imidlertid ikke mulig siden vi ikke kan bruke vårkommentarer utenfor vårkonteksten.

4. Konklusjon

I denne opplæringen diskuterte vi forskjellene mellom Transaksjonell merknader fra Spring og JTA, og når vi kan bruke en eller annen.

Som alltid er koden fra denne opplæringen tilgjengelig på GitHub.

Persistensbunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

$config[zx-auto] not found$config[zx-overlay] not found