Contexts and Dependency Injection

CDI: avtomatsko zagotavljanje odvisnosti objektom (namesto ročnega ustvarjanja)

  • Kontekst: določa življenjske cikle in interakcije komponent
  • Vstavljanje odvisnosti: vstavljanje referenc na posamezne komponente znotraj aplikacije

CDI zrno: razred, ki ga instancira, uporablja in vstavlja CDI vsebnik

  • anotiramo z dosegom in pridobivanje z anotacijo @Inject

Doseg (scope) CDI zrn

  • Doseg zahtevka (request scoped): nova instanca ob vsakem zahtevku
  • Doseg seje (session scoped): nova instanca za vsako sejo
  • Doseg aplikacije (application scoped): ena instanca v celem življenjskem ciklu
  • Pogojen doseg (dependant): odvisno od klicatelja (npr. znotraj storitve isto zrno lahko kličeta app in session scoped zrni)

Stateless/stateful

Shranjevanje konteksta/stanja klientov (v programskih objektih):

  • v storitvi stateful
  • v bazi stateless

Stateless stortve:

  • lažja horizontalna skalabilnost - load balancerji lahko katerokoli zahtevo pošljejo na katerokoli instanco
  • večja varnost podatkov - če je kontekst shranjen lokalno in instanca pade so podatki izgubljeni

Prestrezniki (interceptors)

Definicije metod, ki se prožijo ob določenih dogodkih CDI zrn (npr. inicializacija, klici metod, …)
Implementacija z lastnimi anotacijami in metodami, ki se nanje povežejo
Tipi prestreznikov:

  • Business Method interceptor: klici metod zrna s strani odjemalcev zrna
  • Lifecycle callback interceptor interceptor: povratni klici v življenjskem ciklu s strani vsebnika
  • Timeout method interceptor: klici EJB timeout metod s strani vsebnika

Povratni (callback) klici

Ni zagotovila, da se konstruktor razreda proži anotacija metod v razredu:

  • @PostConstruct: tik po instanciranju
  • @PreDestroy: tik pred uničenjem






JTA in transakcije

Transakcija: zaporedje ukazov

  • bodisi izvedemo v celoti (commit)
  • bodisi prekličemo in povrnemo začetno stanje (rollback)
    Java Transaction API: deklarativno upravljanje transakcij v CDI zrnih z anotacijo metod @Transactional
    Tipi transakcijskega konteksta:
  • MANDATORY: klic metode izven transakcijskega konteksta proženje izjeme
  • NEVER: klic metode izven transakcijskega konteksta izvajanje izven transakcijskega konteksta
  • REQUIRED: klic metode izven transakcijskega konteksta odpremo novo transakcijski kontekst za izvajanje
  • REQUIRED_NEW: vedno odpremo nov transakcijski kontekst za izvajanje