V dnešní době se již zcela zřetelně vykrystalizovaly dvě hlavní technologie, které nám nabízejí možnost vývoje rozsáhlých systémů. Těmito technologiemi jsou J2EE, opírající se o uskupení firem jako Sun Microsystems, IBM, Oracle, HP a další, a poněkud „mladá“ technologie .NET firmy Microsoft.

Rád bych se pokusil obě tyto technologie podrobně popsat a případně se pokusil najít i jejich možné uplatnění a definovat jejich přednosti a slabosti. Nechci zde vyhrotit diskusi, která by měla za základ nesmyslnou „válku“ mezi dvěma názorově různými tábory. Naopak bych se chtěl pokusit obě strany seznámit s jiným možným řešením a nabídnout tak širší rozhled, který dokáže věci hodnotit realisticky a bez zbytečných emocí a uvědomit si, že znalosti, ať již konkurenčních řešení, nám mohou jen pomoci ve správném rozhodování.

J2EE

Před několika lety Sun Microsystems rozdělil Javu jako platformu do několika částí, které jsou určené pro specifický vývoj a nasazení:

  • Java Micro Edition (J2ME) určená pro drobná a mobilní zařízení
  • Java Standard Edition (J2SE), základní Java knihovny, především pro nasazení v „desktopech“
  • Java Enterprise Edition (J2EE) určená pro serverové aplikace

Co nás asi bude nyní nejvíce zajímat, je J2EE neboli Java Enterprise Edition, což je platforma, která jako jeden termín označuje celý balík technologií. Pochopitelně nemá cenu, abych uváděl úplně všechny, které jsou součástí J2EE. Vyjmenuji zde pouze ty hlavní, s kterými se pravděpodobně setkáte, budete-li vyvíjet aplikace v Javě a nebo o kterých by programátor nebo softwarový architekt měl mít alespoň základní přehled při rozhodování o jejich (ne)použití.

Níže uvedený diagram popisuje J2EE platformu, skládající se z aplikačních komponent (sem jsou zahrnuty klientské aplikace, applety, servlety, JSP a EJB) a kontejnerů (poskytující runtime pro manažery jednotlivých systémových zdrojů). Aplikační komponenty jsou právě ty části, s kterými přijde vývojář přímo do kontaktu a které i sám vyvíjí. Ty by měly být detailně popsány v dalších článcích.

Druhou velkou část tvoří manažeři. Jsou určeni pro správu systémových zdrojů, které popisuje J2EE specifikace, a dále jsou částečně popsány pro lepší dokreslení představy o celkové architektuře.

Architektura J2EE je základem integrace všech typů aplikací. Ať již vyvíjíte tenkého či tlustého klienta, klient-server aplikace nebo n-úrovňové systémy, J2EE určuje (jak částečně popisuje uvedené schéma), jak tyto aplikace vyvíjet, jak je provázat a jaké technologie se mají použít.

Základem celé architektury je J2SE, neboli Java Standard Edition, která nenabízí žádné takové technologie jako J2EE, ale jedná se o základní funkční API (dalo by se částečně přirovnat k „operačními systému“ Javy). J2SE může mít formát jen čistého „runtimu“ JRE (Java Runtime Enviroment), nebo může obsahovat i vývojové knihovny, tzv. JDK (Java Development Kit). Nad touto základnou se pak staví další aplikační služby nebo tento „runtime“ sloužící pro běh aplikace.

Nejvíce se o Javě mluví právě v souvislosti s takzvanými „aplety“, které se vyznačují tím, že mohou běžet v internetovém prohlížeči ve speciálním „sandboxu“, který hlídá jejich chování. To je ale zcela minoritní záležitost, protože Java za tu dobu vyspěla – „aplety“ jsou okrajovou záležitostí a prakticky dnes nehrají žádnou roli při tvorbě „enterprise“ systémů. Přesto patří do architektury J2EE a nabízejí jednu z možností, jak vytvářet klientské aplikace (a Sun Microsystems podporuje i nové pluginy pro nové verze prohlížečů a operačních systémů). Osobně ale pokládám „aplety“ za oblast, která Javě spíše uškodila, ale to je diskutabilní otázka, na kterou asi nikdo nemá odpověď. Zpět k J2EE.

Hlavní váha J2EE spočívá především v serverové části, kde si Java našla dnes již silné místo. Především snadnost a efektivnost využití jednotlivých technologií nabízí vývojářům odstínění od mnoha systémových problémů, které by je jinak zcela zbytečně zpomalovaly. Proto úspěch, který doposud J2EE slaví, je opět odvozen díky úspoře času v plánování a definování úkolů, kdy se lze díky vlastnostem v této platformě soustředit primárně na aplikační úlohy. Kromě toho jsou API navržená tak, že se s nimi snadno naučíte pracovat, a tak není nutné několik měsíců studovat a zapracovávat se do vývoje, jako je tomu u C/C++ a souvisejících knihoven (např. MFC).

Pochopitelně svět není vždy tak růžový, jak nám malují prodejci různých produktů a serverů, a proto i v případě J2EE je mnohdy nutné sáhnout do jádra systému aplikačního serveru nebo JVM (Java Virtual Machine). Ale i tak lze konstatovat, že J2EE přinesla výrazný posun v usnadnění vývoje a díky tomu se úspěšně prosadila při vývoji velkých informačních systémů.

Součásti J2EE

Jak již bylo uvedeno, J2EE je jakýsi balík technologií, které se doplňují a které jsou určené pro vývoj serverových systémů. Technologie, které lze pokládat za primární, jsou následující:

JSP (JavaServer Pages)

JSP jsou určeny pro generování dynamického obsahu pro webové prohlížeče a také pro mobilní zařízení. Nejčastěji se JSP používají ke generování HTML stránek zobrazujících výsledky dotazů uživatelů.

JSF (JavaServer Faces)

JSF je velmi pravděpodobně reakcí na inovativní prvky, které přinesl .NET. JSF jsou mladá technologie a zatím ve fázi specifikačního procesu. Jedná se o komponenty generující uživatelské rozhraní na straně serveru bez ohledu na výsledný protokol, což výrazně usnadňuje a urychluje vývoj aplikací. Za jejich podobu (i když nestandardní) lze považovat Struts, vyvíjené v rámci Apache group.

Servlety

Servlety jsou základem JSP, a to proto, že JSP jsou po kompilaci pregenerovány do servletu (to vše řeší JSP runtime automaticky). Servlety se užívají hlavně na rychlé a optimalizované zpracování dotazů, kdy ve velkých systémech primárně slouží k rozhazování dat a dotazů na EJB v aplikačním serveru (to už je ale definováno jen „design paterny“ pro J2EE).

EJB (Enterprise JavaBeans)

EJB jsou jednou z hlavních součástí J2EE a kolem nich se točí celý aplikační vývoj. K dispozici jsou 3 typy EJB, „session beans“ (určeny hlavně pro aplikační logiku), „entity beans“ (poměrně slepá větev, ale záměrem je usnadnění práce s perzistentními daty) a „message-driven beans“ (vhodné pro asynchronní aplikace, dostupné až v nové specifikaci EJB).

Další aplikační technologie

Výše popsané technologie jsou aplikačním základem pro J2EE a jsou nejčastěji používané aplikačními programátory. Schéma, popisující detailněji často používané aplikační technologie v J2EE je uvedeno níže:

Kromě těchto aplikačních technologií jsou ale také technologie na „nižší“ architektonické úrovni, které jsou zde v krátkosti uvedeny (některé z nich jsou součástí J2SE a v J2EE jsou automaticky spravovány aplikačním serverem).

JAAS (Java Authentication and Autorization Service)

JAAS není standardní součástí JDK, ale je možné jej velmi snadno doinstalovat. Poskytuje mechanizmus, jak zabezpečit klientské a serverové aplikace. Primární rozdíl oproti původnímu stavu je ten, že bezpečnost se již nezaměřuje jen na ochranu pred neznámým kódem (např. z internetu v podobě apletů atd.) a jeho validací na základě původu (doména) a autora (v případě podepsaného kódu). JAAS se snaží systém chránit na základě práv uživatelů, kteří aplikace spouštějí.

JCA (Java Connector Architecture)

JCA umožňuje aplikacím napsaným v Javě připojovat se k enterprise systémům, které nejsou na Javě založeny, jako například SAP apod.

JDBC (Java Database Connectivity)

Jedná se o API umožňující unifikovaný přístup k libovolnému RDBMS, který nabízí odpovídající JDBC ovladač pro připojení. Dalo by se říci, že JDBC nabízí podobnou funkčnost jako ODBC, ale s mnoha vylepšeními, kdy je především nutné zmínit objektový model přístupu k databázi (ODBC nabízí pouze API, až od .NET Microsoft tuto nevýhodu srovnává). Aplikační programátoři se tedy mohou naučit jednotné příkazy JDBC API (které jsou dosti triviální) a ty pak následně používat ve svých řešeních.

JavaMail

JavaMail poskytuje sadu abstraktních tříd, které modelují poštovní systém. Toto API poskytuje platformově i protokolově nezávislý „framework“ k vývoji poštovních aplikací. Sun nabízí referenční implementaci, která je zdarma a která nabízí základní funkční vlastnosti pro distribuci aplikací využívajících poštovních služeb.

JMS (Java Message Service)

Asynchronní služby dnes patří mezi stále populárnější modely vývoje aplikací. Také v Javě se nabízí možnost práce se zprávami, a sice právě JMS API. Jedná se o poměrně jednoduchou sadu tříd, které dávají možnost rychle vyvíjet asynchronní aplikace založené na dvou typech způsobů komunikace – PTP (Point-To-Point) a Pub/Sub (Publish/Subscribe).

JMX (Java Management Extensions)

Jedná se o sadu standardních rozhraní, umožňujících přístup k aplikačním objektům nebo Java aplikacím, které je pak následně možné monitorovat a spravovat. Přes JMX lze inicializovat aplikace či komponenty, nastavovat přímo jejich parametry, vyvolávat různé události nebo získat statistická data na základě běhu aplikace.

JNDI (Java Naming & Directory Interface)

JNDI API poskytuje způsob, jak jednotně přistupovat k různým jmenným a adresářovým službám, jako je LDAP, souborový systém, DNS, atd. Klient se může připojit k libovolné službě a z ní stáhnout různé Java objekty a použít je. JNDI je základem celé J2EE architektury a umožňuje snadno pracovat s různými objekty různých služeb, které jsou nabízené v rámci systému.

JTA (Java Transaction Architecture)

Jedná se o „horní“ aplikační vrstvu, kterou implementuje transakční manažer, implementující OTS (OMG Transaction Service) a úloha tohoto rozhraní je poskytnou služby transakčního monitoru všem výše postaveným službám, jako je JDBC, JMS, EJB atd. Je tedy základem mnoha důležitých technologií J2EE, ale její znalost není nutná pro aplikačního programátora. Právě tyto vyšší služby mají za úkol zjednodušit práci s transakcemi a zároveň tuto činnost integrovat do jednotného rozhraní.

RMI (Remote Method Invocation)

Jedná se o protokol definující postupy, jak vyvolávat metody objektů, které nejsou vytvořeny v rámci jednoho procesu. V podstatě se jedná o interprocesní komunikaci, kdy kód obvykle běží v jiném procesu a na jiném počítači. Proto RMI definuje architekturu vzdálených objektů a síťové komunikace a způsob přenášení dat mezi těmito vzdálenými objekty.

Tolik o Javě, příště se podíváme na .NET a porovnáme si výhody a nevýhody obou technologií.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět