Vrstva persistence dat

Z FI WIKI
Přejít na: navigace, hledání

Vrstva perzistence dat je v architektuře vícevrstvých aplikací zodpovědná za poskytování dat aplikační vrstvě a zajištění jejich perzistence. Nejčastěji bývá realizována pomocí relační databáze, může jít však i o jiný zdroj dat (např. CRM nebo ERP systém, či jiný informační systém).

V terminologii Java EE bývá označována jako Enterprise Information System Tier (EIS Tier).


Způsob komunikace s aplikační vrstvou

JDBC

Pokud používáme relační databázi, používá se téměř vždy JDBC, což je aplikační rozhraní pro přístup k relačním databázím. Obvykle se však nepoužívá přímo, ale v kombinaci s nějakým ORM nástrojem nebo s rozhraním RowSet.

ORM

Protože se v aplikační vrstvě často pracuje s objektovým modelem, bývá obvykle nutné zajistit mapování objektů na relační databázi (ORM]).

EJB 2.x

V dřívějších verzích specifikace EJB 2.x existovaly komponenty typu Entity EJB, které reprezentovaly data, s nimiž aplikace pracuje. Šlo o objekty, které byly umístěny v EJB kontejneru a přistupovalo se k nim vzdáleně. Protože by vzdálený přístup k jednotlivým atributům objektu byl náročný (přístup ke každému atributu vyžaduje nové vzdálené volání), používaly se tzv. Data Transfer Object (DTO, někdy nazývané Value Objects), které zapouzdřovaly data příslušné entity. Předání všech dat entity se pak prostřednictvím tohoto objektu zajistilo jedním síťovým voláním.

Pro read-only operace se z důvodů úspory režie EJB kontejneru dokonce ani nepoužívaly Entity EJB, ale příslušné DTO objekty se vytvářely přímo z relační databáze pomocí tzv. DAO objektů. V praxi to vedlo k tomu, že některé EJB aplikace používaly výhradně komponenty typu Session EJB a místo Entity EJB používaly nějaký samostaný ORM nástroj (např. Hibernate).

V EJB verze 3.0 byl tento mechanismus nahrazen flexibilnějším Java Persistence API, které používá anotované POJO objekty, nazývané entity. Komponenty typu Entity EJB jsou však stále podporovány, zejména kvůli zpětné kompatibilitě.

RowSet

Ne vždy je nutné nebo vhodné provádět mapování mezi objektovým a relačním modelem. Pokud je výhodnější pracovat i na aplikační vrstvě s relačním modelem, je vhodné použít rozhraní RowSet.

Nevýhodou tohoto přístupu je absence typové kontroly, obtížnější realizace aplikační logiky a větší riziko chyby. Výhodou je naopak rychlejší vývoj, neboť není nutné vytvářet příslušné entitní třídy a definovat mapování a je možné používat univerzální komponenty. Ve spojení s JSF se tento přístup často používa pro RAD (rapidní vývoj aplikací, viz např. Sun Java Studio Creator).