Arhitektura aplikacij in mikrostoritve

Odjemalski modelStrežniški model
- procesiranje v brskalniku odjemalca
- komunikacija s strežnikom preko REST
- strežnik ne vzdržuje uporabniške seje
- obremenitev na odjemalcu
- procesiranje na strežniku
- odjemalec samo procesira izgled
- strežnik vzdržuje uporabniško sejo
- obremenitev na strežniku
Monolit: združene funkcije poslovne logike nepotrebno skaliranje manj nujnih storitev
Mikrostoritve: razbitje na zaključene funkcionalne dele modularnost, horizontalna skalabilnost

Oblak

Hierarhija oblaka:

  • Cloud: podatkovni centri
  • Fog: mreža nodov (npr. CDN)
  • Edge: naprave

Statične vsebine streže Content Delivery Network - zrcaljenje vsebine preko lokalnih nodov po svetu
IaaS - virtualke, networking in shramba / PaaS - managed IaaS s prijavami, messeging in logiranjem

REST API

HTTP metode: GET, HEAD, POST, PUT, PATCH, DELETE

  • @Get,@Post, …
    MIME formati: application/json / … Content-Type: / Accept: - zaglavje
  • @Consumes(MediaType.APPLICATION_JSON), @Produces(MediaType.APPLICATION_JSON)
    URL pot virov: gnezdenje max 3 nivoje; ostanjevanje ?offset=?&filter=? + X-Total-Count:; sortiranje in filtriranje ?order=?&where=?
  • @ApplicationPath("/v1")- verzija, @Path("samostalniki")- množina
    HTTP kode:
  • 200 OK, 201 Created, 204 No Content, 304 Not Modified (imaš aktualno instanco)
  • 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 500 Internal Server Error

Maven

Standardizacija in avtomatizacija: gradnja, testiranje in nameščanje; čiščenje; dokumentacija
pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>SI.FRI.PRPO.PROJEKT</groupid>
    <artifactId>projektA</artifactId>
    <packaging>JAR/WAR/EAR/RAR</packaging>
    <version>[MAJOR].[MINOR].[RELEASE]-SNAPSHOT</version>
    
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>4.8.1</version>
            <scope>COMPILE/RUNTIME/TEST</scope>
        </dependency>
    </dependencies>
    
    <modules>
        <module>projektB</module>
        <module>projektC</module>
    </modules>
</project>

Ukazi:

  • mvn package: preverjanje in prevajanje .JAR
  • mvn test: izvedba testov enot
  • mvn clean deploy -X -P test: čiščenje, namestitev, debug, aktivacija profila test
  • mvn site: generiranje spletne strani



Context and Dependency Injection

Avtomatsko zagotavljanje odvisnosti objektom:

  • določanje življenjskega cikla in interakcij komponent
  • vstavljanje referenc odvisnosti komponent

Shranjevanje stanja klientov: v storitvi stateful / v bazi stateless (skalabilnost, varnost podatkov)

Prestrezniki: proženje metod ob dogodkih CDI zrn

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

Doseg CDI zrn:

  • @RequestScoped: nova instanca razreda z vsakim zahtevkom
  • @SessionScoped: nova instanca razreda za vsako sejo
  • @ApplicationScoped: ena instanca v celem življenjskem ciklu aplikacije
  • @Singleton: deljeno stanje ene instance
  • @Dependant: prevzame doseg klicatelja

Transakcije: izvedemo v celoti (“commit”) / prekličemo in povrnemo začetno stanje (“rollback”)

  • @Transactional(value="mandatory") klic izven transakcije proži izjemo
  • @Transactional(value="never") izvajanje izven transakcije
  • @Transactional(value="required") klic izven transakcije ustvari novo
  • @Transactional(value="required_new") zmeraj ustvari novo transakcijo (gnezdenje)