Podatkovne baze
JDBC
Open Database Connectivity (ODBC): standardni API protokol za dostop do DBMS
Java Database Connectivity (JDBC): javanska knjižnica za vzpostavljanje povezave na bazo, izvajanje SQL povpraševanj in strukturo rezultatov povpraševanj
- Tip 1 - JDBC-ODBC most: pretvorba JDBC v ODBC klice
- Tip2 - delni javanski gonilnik: JDBC klici direktno na specifičen gonilnik DB
- Tip 3 - javanski/mrežni gonilnik: vmesni sloj pretvori ukaze
- Tip 4 - čisti javanski gonilnik: direktna komunikacija z DB
Privzeto se SQL ukazi samodejno potrdijo (autoCommit)
Transakcijsko izvajanje: autocommit=false … commit()/rollback()
Bazen povezav: predpomnilnik povezav na DB (počasno vzpostavljanje in prekinjanje povezav)
ORM (JPA)
Object Relational Mapping: tehnika premoščanja razkoraka med objektnim in relacijskim modelom
- avtomatska preslikava objekti relacijske tabele
- ni pisanja SQL stavkov
- lažja konfiguracija, upravljanje transakcij in logiranje
Anotacije
@Entity: entitetni razred
Ključi:
@Id: atribut kot primarni ključ@GeneratedValue:strategy=SEQUENCE/IDENTITY/TABLE/AUTO
Tabele:
@Table: določanje vrednostiname, schema, uniqueConstraints, ...@SecondaryTable: razporejanje podatkov istega tipa (objektov) po večih tabelah
Atributi:
@Column: spreminjanje privzetih vrednostiname, table, nullable, unique, ...@Temporal: določanje oblike shranjevanja Date poljDATE/TIME/TIMESTAMP@Transient: označimo atribute, ki se naj ne zapišejo v DB@Enumerated: značimo naštevne tipe (enum)
Relacije med entitetami:
@OneToOne/@OneToMany/@ManyToOne/@ManyToMany: določimoFetchType=EAGER/LAZY@JoinTable
Preslikava dedovanja: @Inheritance
- strategija enojne tabele: vsi atributi celotne hierarhije sploščeni v eno tabelo
- strategija pridružitve: tabela za vsak sloj hierarhije, isti primarni ključ enitete v korenski tabeli se uporablja zanjo v vseh tabelah
- strategija tabele na konkreten razred: tabela za vsak razred, atributi vrhnjih slojev se preslikujejo navzdol
Osnovne operacije nad entitetami
Kreiranje - persist(): če obstaja proži napako
Brisanje - remove(): sinhronizacija ob flush()
Posodabljanje - merge(): sinhronizacija ob flush(), razveljavitev lokalnih sprememb ob refresh()
Povpraševanje:
find(entitetni razred, primarni ključ): če ne najde vrne nullgetReference(entitetni razred, primarni ključ): če ne najde proži napako
JPQL
Jezik povpraševanja po entitetah, ki kombinira sintakso SQL z izraznostjo OOP
- statična povpraševanja -
createNamedQuery("..."): definiramo v anotacijah / XML - dinamična povpraševanja -
createQuery("..."): če ne poznamo scenarija povpraševanja vnaprej
Število rezultatov:getSingleResult()/getResultList()
Uporaba parametrov kot pri PreparedStatementih (zaporedna številka / po imenu)
Ostranjevanje rezultatov:setMaxResults()/setFirstPosition()
OpenAPI3
Sklopi:
- info: opis - title, description, contact, licence, version
- security: avtorizacijska shema - scheme (npr. basic / bearer / OAuth / …), bearerFormat
- paths: URL poti do posameznih virov
- tags, externalDocs: označbe in dokumentacija
- components:
- requestBodies: description, required, content/schema - uporaba referenc na tipe objektov
- responses: code, description
- links: uporaba rezultatov ene operacije kot vhod za drugo operacijo
Java anotacije
-
@Operation: opis -
@RequestBody: vsebina zahtevka -
@ApiResponse: vsebina odgovora -
@Callbacks: množica zahtevkov -
@Parameter: parameter -
@Link, @LinkParameters: design-time povezava odgovora -
@Content: shema in primeri odgovora -
@Schema: vhodni izhodni podatki -
@Info, @Contact, @Licence: splošni metapodatki -
@Extension, @ExtensionProperty: razširitve in njihove lastnosti -
@SecurityRequirement: seznam zahtevanih varnostnih shem za operacijo -
@SecurityScheme: definicija varnostne sheme -
@OAuthFlow: definicija varnostne sheme -
@OAuthFlows: konfiguracija OAuth tokov
Spletne aplikacije
MVC:
- Model: podatkovni model
- View: prikaz izgleda
- Controller: obravnava akcij uporabnika (npr. click, scroll, …)
Strežniški model:
Procesiranje (obremenitev) na strežniku
Odjemalec delno procesira izgled, pripravljen na strežniku
Storitve poslovne logike skrite odjemalcu
Problemi:
- potrebno ogrodje za generiranje HTML
- sklopljenost front-enda in back-enda
- omejitve zmogljivosti strežnika
- težavno skaliranje - stanje ohranja strežnik

Odjemalski model:
Procesiranje (obremenitev) na odjemalcu
Spletni strežnik za serviranje statičnih vsebin preko CDN, storitveni strežnik za serviranje stateless storitev preko API

Single Page Application: nalaganje osnovnega HTML, CSS, JS se izvede le enkrat - nadaljnjo kontrolo nad izvajanjem UI ima prskalnik
Responsive design: prilagajanje vidnosti in velikosti elementov glede na velikost zaslona
Fluidni koncept vmesnika: zvezno prilagajanje vidnosti in velikosti glede na velikost zaslona, orientacije in velikosti okna
Mobile-first design: uporabniški vmesnik deluje na vseh tipih naprav, mobile pogled osredotočen na osnovne tokove uporabnikov
HTML5 API: podpora touch gestures, geolokacija, kamera, žiroskop, pospeškometer, Bluetooth, NFC, …
Docker
Docker server/deamon: izvaja gradnjo, izvajanje in distribucijo Docker vsebnikov
Docker client: komunicira z deamonom preko REST API-ja
Dockerfile
Nivoji:
- READ_ONLY: osnovna slika, uporabniške datoteke - aplikacija in odvisnosti
- READ_WRITE: izvajanje aplikacij
Direktive:
FROM <image>: definiramo osnovno sliko (npr. alpine, ubuntu, …)RUN <command>: zagon ukazovCMD <command>: privzeti zagonEXPOSE <port>: definiramo vrata za dostop do vmesnika
Ob zagonu vmesnika vseeno potrebna zastava-p <port>ENV <key>=<value>: definiramo okoljske spremenljivkeADD <src> <dest>: kopira datoteke / direktorije / URL-je v datotečni sistem
Ciljna pot mora biti relativna na izvorni imenik + znotraj konteksta gradnjeCOPY <src> <dest>: kopiranje znotraj vsebnikaVOLUME <mount>: označena točka priklopaUSER <user>: uporabnik, ki se uporabi pri izvedbi direktivWORKDIR <path>: nastavi delovni direktorij pri izvedbi direktiv
Kubernetes

Strok (pod): Najmanjša namestitvena atomarna enota enega/več vsebnikov (ne kreiramo jih neposredno)
Vsebniki znotraj stroka si delijo: shrambo, IP naslov in vrata
Namestitev (deployment): Deklarativni nadzor:
- namestitev in posodobitev strokov in replikacijskih nizov
- upravljanje replik (npr. vzpostavitev ob izpadih)
Ne glede na lokacijo posameznih strokov je namestitev storitve dostopna na statičnem IP
Storitev (service): Abstrakcija logičnega nabora strokov - politika dostopa (spremembe arhitekture ne smejo vplivati na odjemalce)
Tipi storitev:
- ClusterIP (privzeto): storitev znotraj gruče dostopna na IP naslovu
- NodePort: storitev izpostavljena na vratih na IP naslovu gostitelja vsak gostitelj v gruči ločeno
- LoadBalancer: storitev na voljo na porazdeljevalcu obremenitve
Kubernetes master: Vozlišče s komponentami za upravljanje gruče:
- kube-apiserver: izpostavlja Kubernetes API, hrani stanje gruče
- kube-controller-manager: izvaja nadzor stanja gruče preko API
- kube-scheduler: iskanje in določanje vozlišč za izvajanje strokov
Kubernetes node: Ena/več instanc vozlišč z izvajalnim okoljem:
- kube-proxy: izpostavlja storitve definirane v apiserver-ju - posredovanje TCP/UDP tokov
- kubelet: primarni agent za vzdrževanje strokov na vozlišču glede na specifikacije (yaml)
kubectl
kubectl create -f conf.yaml… ustvari okolje iz konfiguracijske datotekekubectl get pods… prikaži vse strokekubectl describe pod y… prikaži opis strokakubectl proxy… dostop do GUI
DevOps
DevOps: metodologija procesa razvoja - sodelovanje razvojnega in operacijskega dela
- verzioniranje izvorne kode (Git, SVN)
- integracija: zmanjševanje tveganj, hitre povratne informacije
- gradnja (Maven, Jenkins)
- prevajanje
- izvedba testov (JUnit)
- merjenje pokritosti po metodah / vejah izvajanja / vrsticah
- testiranje enot - metode integracijsko testiranje - povezovanje enot funkcionalno testiranje - na nivoju API-ja sistemsko testiranje - profiliranje obremenitev testi sprejemljivosti - cilji naročnikov
- pregled kode: identifikacija problemov in boljših praks
- namestitev
- priprava dokumentacije