Technologie Java Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/
Trocha historie Java vznikla v roce 1995 jak minimalistický programovací jazyk (211 tříd). Syntaxe vycházela z C/C++. V roce 1999 Java 2 (1524 tříd). Nyní se Java bere jako platforma, nikoli jen programovací jazyk.
Dělení jazyků Interpretované Kompilované Kam zařadit Javu? K čemu slouží JVM?
Vytvoření programu Vytvoření programu v jazyce Java. Kompilace souborů překladačem do bytového kódu. Při spuštění program přistupuje k API, které nabízí JVM. JVM reprezentuje program jako instrukce strojového kódu.
Základní koncepty Javy WORA - Write Once Run Anywhere. WODA - Write Once Deploy Anywhere. Bytový kód lze spustit kdekoliv. Java Community Process (JCP), od roku 1998 již 380 specifikací.
Edice Java Card Java ME Java SE Java EE
Java Card Od roku 1996, zaměřena na bezpečné spouštění aplikací s minimem paměti. Software - Applet, hardware - Smart Card. Vytvořen speciální virtuální stroj (Java Card VM). Obsahuje dvě podedice - Classic Edition a Connection Edition (vlákna, SOAP).
Smart Card
Architektura
Bezpečnostní mechanismy Applet firewall - kontrola přístupu k datové části jiných appletů. Šifrování - symetrické a asymetrické šifry. Data Encapsulation - aplikace jsou spouštěny v izolovaném prostředí.
Autorizace, autentizace, certifikáty 32K, 64K (Siemens CardOS); 72K (Java Virtual Machine) Dostupná API: PKCS#11 v2.01, Microsoft CAPI, PC/SC, X.509 v3 certificate storage, SSL v3, IPsec/IKE Obecné API pro komunikaci: OpenSC
Architektura
Java ME Pro přenosná zařízení s omezenými zdroji Dříve hlavně mobilní telefony, nyní spíše STB, IoT zařízení. Kvůli rozmanitosti mobilních zařízení (velikost displaye, paměti, výpočetního výkonu) rozdělena do profilů.
Connected Limited Device Configuration (CLDC) Profil pro velmi levná zařízení: alespoň 160 kb paměti alespoň 32 kb RAM pro aplikaci Upravený virtuální stroj (K Virtual Machine) K dispozici jsou balíčky: java.lang java.io java.util
Další parametry Obsahuje pouze jeden profil - MIDP který definuje další omezení (velikost displaye min 96x54, ovládání klávesami či dotykem, min 8 kb RAM) Téměř všechny mobilní zařízení spadají do kategorie MIDP, aplikace vybudované nad tímto profilem se nazývají midlety.
CDC Existuje několik profilů, nejvýznamnější jsou tyto: Foundation profile - oproti CDC přidává Beans, RMI a SQL. Personal Basis profile - uživatelské rozhraní, omezeno na jedno okno Personal Profile - přidává navíc knihovny AWT
Midlet 1
MIDLET 2
Úložiště záznamů Implementována jednoduchá databáze - Record Store. Struktura je pole bajtů indexovaná od 1. V sadě midletů musí mít jednotlivé databáze své unikátní názvy. Konzistenci databáze hlídá JVM/KVM. Operace jsou atomické, nelze použít transakce. Pro práci s úložištěm se využívá javax.microedition.rms
Java SE Určena pro budování desktopových aplikací. Omezena pouze existencí virtuálního stroje pro daný OS. Dělí se na JRE a JDK Plnohodnotné GUI + Applety + FX Komunikační technologie Socket RMI
Socket - server
Socket - client
Problematika socketů Surová komunikace. Není řešena bezpečnost. Neusnadňuje práci s objekty (serializace/de-serializace). Proč nevyužít principu RPC?
RPC
RMI
Java EE Pro Java SE stačí nainstalovat JVM Pro Java EE často doplněn o aplikační server a kontejnery pro běh webových aplikací Obsahuje API z Java SE doplněno o další třídy a podporu technologií. Zaměřena na škálovatelnost, výkonnost bezpečnost.
Java EE 8
Komponenty Java EE
Aplikační servery Middleware mezi JVM a Java webovou aplikací. Pro zaručení správné funkčnosti jsou certifikovány.
Java Servlet Původně se servlety (JSR-154) objevily jako odpověď na CGI skripty. Dnes jsou klíčovou technologií, používají se jako integrační nástroje pro jiné technologie. Aktuální verze: 3.0, třídy umístěny v javax.servlet. Nástroj pro práci požadavkem klienta (zpravidla HTTP)
Životní cyklus
Implementace
Základní metody pro obsluhu GET - metoda doget, přistupuje k parametrům v URL adrese. POST - metoda dopost, pro předávání parametrů mimo URL, teoreticky velikost parametru omezena není, prakticky ji omezuje webový server. HEAD - metoda dohead, získává informace z hlavičky HTML dokumentu (typ dokumentu, kódování)
Servlet 4.0 Podporuje HTTP/2 Request/response Server push Komprese hlavičky Priorizace streamů Kompatibilita s HTTP1.1 RFC
JSP Servlety nejsou vhodné pro generování HTML výstupu. Cílem je oddělení aplikační a prezentační logiky - proto zavedeny JavaServer Pages (JSR-245). Podporováno technologií Java Bean, které tvoří model pro zobrazení (view).
Architektura
Implementace
Charakteristika JSP kombinuje HTML a speciální tagy do jednoho souboru. JSP obsahuje direktivy, deklarace, výrazy a akce, později přidány speciální tagy <jsp>. JSP se stejně jako třídy Javy musí před spuštěním zkompilovat. Pro čistější kód bylo potřeba zavést šablonovací systém.
JSF 2.3 Lepší podpora CDI (Context and Dependenci Injection) Podpora java.time Websockety AJAX Validace na úrovní beanů (@NotEmpty, @NotBlank) Integrace UIData a UIRepeat
JSTL JavaServer Pages Standard Tag Library (JSR-52). Nabízí základní programovací techniky (iterátor) a další standardy (i18n).
Rich Faces, Primefaces http://www.primefaces.org/showcase/ui/menu/menubutton.xhtml
EJB Specifikace představena 1997 firmou IBM. Třídy běžící na AS vykonávající aplikační logiku. Pro svůj běh vyžadují EJB kontejner. EJB kontejner poskytuje třídám služby (specifikovány verzí kontejneru - nyní 3.1, JSR-318). Vhodné pro zajištění persistence a transakční zpracování
Hlavní výhody EJB Přenositelnost - koncept WODA je zde dodržen, podmínkou je správná verze EJB kontejneru. Jednoduchost - při vývoji se využívá služeb kontejneru EJB, častý jev je, že výrobci EJB kontejnerů přidávají vlastní proprietární funkcionalitu.
EJB 2.1 EJB - Komponenta napsaná v jazyce Java vykonávající aplikační logiku. Remote Interface - specifikuje vzdálené metody, které klient může volat. Remote Home Interface - specifikuje metody, které používají vzdálení klienti pro řízení instance komponenty. Deployment descriptor - XML soubory popisující vlastnosti EJB.
EJB 2.1 Lokální klient má k dispozici tyto rozhraní: Local Interface - odlehčená verze Remote Interface, obsahuje metody aplikační logiky EJB pro lokální uživatele. Local Home Interface - obdoba Remote Home Interface, používají pouze lokální klienti. Pro použití EJB s WS je definován Service Endpoint Interface.
Jmenný prostor Java Naming and Directory Interface Pro komunikaci je využito RMI (RMI-IIOP)
Typy Beanů Session Bean - pro tvorbu middleware Stateless - určeny pro tvorbu komponent, nemají žádný stav, nejsou závislé na přihlášeném uživateli/stavu AS. Statefull - uchovávají stav, který si drží po nějaký čas (doba přihlášení uživatele).
Typy Beanů Entity Bean - používají se pro zajištění persistence Container Managed persistency Bean Managed Persistency Ve verzi EJB 3 je toto nahrazeno JPA.
Typy Beanů Message-driven Bean - jsou aktivovány zaslanou zprávou (nikoli voláním metody), využívá se specifikace JMS, neobsahuje Home ani Remote rozhraní, při inicializaci se mapuje na JMS a čeká na zprávu.
EJB 3 Místo Deployment Deskriptorů jsou aplikovány anotace. EJB 3 neobsahuje rozhraní Home a Remote Původní filosofie Entity Beanů byla nahrazena JPA. Není striktně vyžadováno implementovat všechny metody (např. ejbcreate). EJB 3 povoluje dědičnost komponent. http://tomee.apache.org/ejb3-sample-applications.html
GUI v Javě Swing / AWT Design? Data Binding? Animace
Java FX Jazyk Java je primárním programovacím jazykem Dříve se používal skriptovací jazyk JavaFX Script Je možno použít všechny jazyky podporovány JVM JRuby, Jython, Scala, Groovy JavaScript Gosu, Visage
Java FX Způsoby nasazení Plugin - Java Applet do prohlížeče Java Web Start Standardní desktop Mobilní aplikace
Java FX
Motivace
Architektura
Architektura
Klíčové prvky Scene Graph Scene Builder Předdefinované komponenty Možnost použít CSS Podpora animací Základní mediální formáty (pouze licencované Oraclem) Multi-touch
Hierarchie elementů
Jak to vypadá v kódu
Jak to vypadá v kódu
Demo http://www.oracle.com/technetwork/java/javase/ overview/javafx-samples-2158687.html
Kritika Plugin do prohlížeče Nelze využít některé prvky HTML5 (geolokace) Licencované kodeky Velmi rychlý vývoj?