„Háttéralkalmazások/Záróvizsgatételek” változatai közötti eltérés
→11. Microservices: Tétel kidolgozása |
→7. Spring: Tétel kidolgozása |
||
| 66. sor: | 66. sor: | ||
Használatával eljárásokat (procedures) és függvényeket (functions), illetve triggereket lehet tárolni az adatbázisban. Lényege, hogy az üzleti logika helyett maga az adatbázis-kezelő szerver ''futtatja'' a beállított szubrutinokat, az előbbi csak ''meghívja'' őket. | Használatával eljárásokat (procedures) és függvényeket (functions), illetve triggereket lehet tárolni az adatbázisban. Lényege, hogy az üzleti logika helyett maga az adatbázis-kezelő szerver ''futtatja'' a beállított szubrutinokat, az előbbi csak ''meghívja'' őket. | ||
{| class="wikitable mw-collapsible mw-collapsed" | {| class="wikitable mw-collapsible mw-collapsed" | ||
|+ | |+A szerveroldali programozás jellemzői | ||
!szempont / tulajdonság | !szempont / tulajdonság | ||
!➕ | !➕ | ||
| 137. sor: | 137. sor: | ||
A shadow-információk az adatbázisban szükséges, de az üzleti logika által nem használt kulcsokat, időbélyegeket és egyéb adatokat takarják. | A shadow-információk az adatbázisban szükséges, de az üzleti logika által nem használt kulcsokat, időbélyegeket és egyéb adatokat takarják. | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+Egymásnak megfeleltethető adattípusok | ||
!üzleti logika | !üzleti logika | ||
!adatbázis | !adatbázis | ||
| 489. sor: | 489. sor: | ||
=== Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük? === | === Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük? === | ||
{| class="wikitable mw-collapsible mw-collapsed" | {| class="wikitable mw-collapsible mw-collapsed" | ||
|+Összehasonlítás | |||
! | ! | ||
!1:N | !1:N | ||
| 787. sor: | 788. sor: | ||
=== Milyen módokon lehet lekérdezést megfogalmazni a JPA-ban? === | === Milyen módokon lehet lekérdezést megfogalmazni a JPA-ban? === | ||
{| class="wikitable mw-collapsible mw-collapsed" | {| class="wikitable mw-collapsible mw-collapsed" | ||
|+Összehasonlítás | |||
!komplexitás | !komplexitás | ||
!módszer | !módszer | ||
| 886. sor: | 888. sor: | ||
==== Kapcsolatok ==== | ==== Kapcsolatok ==== | ||
{| class="wikitable mw-collapsible mw-collapsed" | {| class="wikitable mw-collapsible mw-collapsed" | ||
|+ | |+Példa annotációkra | ||
!típus | !típus | ||
!egyirányú | !egyirányú | ||
| 1 029. sor: | 1 031. sor: | ||
== 7. Spring == | == 7. Spring == | ||
=== Mik a függőséginjektálás főbb előnyei | === Mik a függőséginjektálás főbb előnyei? === | ||
... | |||
* az injektornak ki van szervezve a függőség betöltése és az objektumgráfok előállítása | |||
** kevesebb kódduplikáció | |||
* könnyű mockolni a függőségeket | |||
=== Hogyan támogatja a Spring? === | |||
A következő annotációkkal: | |||
{| class="wikitable mw-collapsible mw-collapsed" | |||
|+Opciók a legrosszabbtól a legjobbig | |||
!lehet injektálni | |||
!példa | |||
|- | |||
|mezőbe | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Service | |||
public class UserService { | |||
@Autowired | |||
private UserRepository userRepository; | |||
public void getAllUsers() { | |||
userRepository.findAll(); | |||
} | |||
} | |||
</syntaxhighlight> | |||
|- | |||
|setterbe | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Service | |||
public class UserService { | |||
private UserRepository userRepository; | |||
public void setUserRepository(UserRepository userRepository) { | |||
this.userRepository = userRepository; | |||
} | |||
public void getAllUsers() { | |||
userRepository.findAll(); | |||
} | |||
} | |||
</syntaxhighlight> | |||
|- | |||
|konstruktorba | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Service | |||
public class UserService { | |||
private final UserRepository userRepository; | |||
public UserService(UserRepository userRepository) { | |||
this.userRepository = userRepository; | |||
} | |||
public void getAllUsers() { | |||
userRepository.findAll(); | |||
} | |||
} | |||
</syntaxhighlight> | |||
|} | |||
Más beaneket is lehet injektálni, melyeket kollaborátoroknak hívják. Több lehetséges jelölt esetén konfigurálni kell, hogy melyiket szeretnénk injektálni. | |||
=== Milyen élettartama lehet egy springes beannek? === | === Milyen élettartama lehet egy springes beannek? === | ||
... | {| class="wikitable" | ||
|+Scope-ok a leghosszabbtól a legrövidebb életűig | |||
!típus | |||
!annotáció | |||
!minek az életciklusához van kötve | |||
|- | |||
|singleton | |||
|''– (ez az alapértelmezett)'' | |||
|semminek, csak egy van belőle az egész alkalmazásban | |||
|- | |||
|application | |||
|<code>@Scope("application")</code> | |||
|<code>ServletContext</code><ref>Webalkalmazásoknál használatos.</ref> | |||
|- | |||
|prototype | |||
|<code>@Scope("prototype")</code> | |||
|új példány jön létre minden <code>getBean()</code> (<code>@Autowired</code>) hívásra | |||
|- | |||
|websocket | |||
|<code>@Scope(scopeName="websocket", proxyMode=...)</code> | |||
|<code>WebSocket</code> session | |||
|- | |||
|session | |||
|<code>@Scope("session")</code> | |||
|HTTP session | |||
|- | |||
|request | |||
|<code>@Scope("request")</code> | |||
|HTTP-kérés | |||
|} | |||
=== Hogyan könnyíti meg a JPA használatát a Spring Data JPA? === | === Hogyan könnyíti meg a JPA használatát a Spring Data JPA? === | ||
| 1 142. sor: | 1 236. sor: | ||
=== Ismertesd az alábbi microservice tervezési minták céljait, azok előnyeit, hátrányait! === | === Ismertesd az alábbi microservice tervezési minták céljait, azok előnyeit, hátrányait! === | ||
{| class="wikitable mw-collapsible mw-collapsed" | {| class="wikitable mw-collapsible mw-collapsed" | ||
|+ | |+Összehasonlítás | ||
!tervezési minta | !tervezési minta | ||
!leírása | !leírása | ||