Technologie Java
Jaroslav Žáček
[email protected] 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.
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í)
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.
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?