Java 9 alkalmazás architektúra

Hasonló dokumentumok
Szoftvertechnológia alapjai Java előadások

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java és web programozás

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java I. A Java programozási nyelv

Java és web programozás

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

OOP #14 (referencia-elv)

Java és web programozás

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java programozási nyelv 4. rész Osztályok II.

Osztályok. 4. gyakorlat

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java I. A Java programozási nyelv

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Hova tovább Android? OpenJDK és további várható újdonságok.

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Java best practices A&K AKADÉMIA MARKOS ANDRÁS

Programozási nyelvek Java

OOP: Java 8.Gy: Abstract osztályok, interfészek

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek Java

JAVA webes alkalmazások

Java programozási nyelv 6. rész Java a gyakorlatban

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Pénzügyi algoritmusok

JAVA PROGRAMOZÁS 2.ELŐADÁS

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Programozási nyelvek Java

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Abstract osztályok és interface-ek. 7-dik gyakorlat

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Java Remote Method Invocation API

Programozási technológia I.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Hálózatbiztonság Androidon. Tamas Balogh Tech AutSoft

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozási nyelvek II.: JAVA

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Programozási nyelvek JAVA EA+GY 1. gyakolat

Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

Java III. I I. Osztálydefiníció (Bevezetés)

C# osztályok. Krizsán Zoltán

Programozási nyelvek Java

Java III. I I. Osztálydefiníció (Bevezetés)

BME MOGI Gépészeti informatika 8.

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Bánsághi Anna

STANDARD DEVELOPMENT U.L. FACTORY SYSTEMS GROUP IT DEPARTMENT

A NYELV NEVE. Kezdetben: Oak. James Gosling. Java: Sun Mycrosystems védjegyev

Vizuális, eseményvezérelt programozás X. V 1.0

Java programozási nyelv 5. rész Osztályok III.

Programozási nyelv Java

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Hello World. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 1. Bedők Dávid v0.3

Segédanyag: Java alkalmazások gyakorlat

Operációs rendszerek. Windows NT. A Windows NT

OOP: Java 1.Gy: Java alapok

Collections. Összetett adatstruktúrák

JAVA SE/ME tanfolyam tematika

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Operációs rendszerek. A Windows NT felépítése

Osztott alkalmazások fejlesztési technológiái Áttekintés

JNDI - alapok. Java Naming and Directory Interface

Web-fejlesztés NGM_IN002_1

OOP és UML Áttekintés

Objektumorientált Programozás VI.

Programozás I. Első ZH segédlet

Memóriakezelés, dinamikus memóriakezelés

C++ programozási nyelv Konstruktorok-destruktorok

és az instanceof operátor

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

A Java EE 5 plattform


Multimédiás adatbázisok

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

RIA Rich Internet Application

Mobil Informatikai Rendszerek

Megjelenés. A Java SE 9 és a JDK 9 újdonságai. A fejlesztés ütemterve. Újdonságok

Tartalom. Az EJB 2.1 problémái Az EJB 3 megoldásai

A SZOFTVERTECHNOLÓGIA ALAPJAI

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Átírás:

Java 9 alkalmazás architektúra

Témakörök Modularitás Service-k Moduláris JVM Custom runtime image Migráció

Modularitás Java 9 előtt: A fejlesztési, release egység: JAR Classpath Bonyolult verziózás A Classpath-on keresés rossz verzió használatához vezethetett JAR nem tartalmaz elérési és egyéb meta-adatot

Modularitás Objektum orientáltság Java 8-ban: Class szintű kódújrahasznosítás Öröklődés, interface-k Elérési módosítók Erős típusosság Dependenciák

Modularitás Release a Java 8-ban: JAR-ok egységbe zárják a library, application file-okat Használatkor a Classpath-hoz adódik hozzá Néha több száz JAR a Classpath-on

Modularitás Elérési módosítók Java 8-ban: Public Protected <default> private

Modularitás Java 9: A fejlesztési, release egység: module Támogatja a nagyban fejlesztést Beépítve a Java nyelvbe Minden szinten használható (Applikáció, library, JVM) Célja: megbízhatóság, karbantarthatóság, biztonság

Modularitás Java 9 modulok: Új elérési módok (változatlan módosítók): Public Public egy célzott modulnak Public modulon belül Protected <default> private

Modularitás Java 9 module-info.java: Az exports, requires, exports to, requires transitive kulcsszavak: module model { exports hu.houg.book; exports hu.houg.author; exports hu.houg.data.author to backend, backend_implementation; exports hu.houg.data.book to backend, backend_implementation; }

Modularitás Java 9 modulok: Az elérési módosítok mellett dependenciakezelés: module backend { requires transitive model; exports hu.houg.authorservice; exports hu.houg.bookservice; }

Service Modularitás segítségével service-ek: User-provider architektúra Egyszerűsíti a module-gráfot Runtime választhatunk providert

Service Java 9 API: module backend { requires transitive model; exports hu.houg.authorservice; exports hu.houg.bookservice; }

Service Java 9 Provider: module backend_implementation { exports hu.houg.authordefaultservice; exports hu.houg.bookdefaultservice; requires backend; provides hu.houg.authorservice.authorservice with hu.houg.authordefaultservice.defaultauthorservice; provides hu.houg.bookservice.bookservice with hu.houg.bookdefaultservice.defaultbookservice; }

Service Java 9 User: module frontend { requires backend; //requires backend_implementation; uses hu.houg.bookservice.bookservice; uses hu.houg.authorservice.authorservice; }

Service Java 9 ServiceLoader class: public class Main { public static void main(string[] args) { BookService bookservice; ServiceLoader<BookService> bookservices = ServiceLoader.load(BookService.class); } } bookservice = bookservices.findfirst().get(); System.out.println(bookService.getRandomBook().getTitle());

Moduláris JVM Java 9 JVM: Az eddigi monolit JVM felbontva ~90 modulra Minden modul egy-egy jól definiált funkcionalitás (pl Logging, JavaFX) Növeli a skálázhatóságot Javítja a biztonságot Performancia

Moduláris JVM Java 9 JVM: $java list-modules java.activation@9.0.4 java.base@9.0.4 java.compiler@9.0.4 java.corba@9.0.4...

Moduláris JVM Java.se modul: module java.se { //... requires transitive java.desktop; requires transitive java.sql; requires transitive java.xml; requires transitive java.prefs; }

Custom runtime image Custom Java runtime enviroment: Csak olyan modulok, amiket az alkalmazás is használ Csökkenthető a memórialábnyom Növelt biztonság

Custom runtime image Custom Java runtime enviroment: Rövidebb felállási idő Jobb performancia Elkészíthető a Jlink eszköz segítségével

További változások Java Interface-ek módosítása JShell Stream API fejlesztések Multi-Release JAR

Java 10 újdonságok

Témakörök Lokális változó típus meghatározás Garbage Collection Interface Parallel Full GC a G1-hez Thread-local Handshakes Heap-allocation külső memória eszközön Új release calendar

Lokális változó típus meghatározás Új kulcsszó: var "Dinamikus" típusmeghatározás a lokális változókhoz 1. var list = new ArrayList<String>(); // infers ArrayList<String> 2. var stream = list.stream(); // infers Stream<String>

Garbage Collection Interface Garbage Collection Interface kialakítása Egyszerűsíti a GC algoritmusok használatát

Parallel Full GC a G1-hez G1 GC a default A Full GC esetén parallelizáció

Thread-local Handshakes Lehetőség callbackek hívására egyes threadeken, teljes JVM safepoint nélkül Ez lehetőséget ad a JVM-nek csupán egy-egy thread megállítására Ezzel könnyebbé válik a stacktrace-ek begyűjtése, monitorozás, javul a thread locking rendszer, a memóriakezelés

Heap-allocation külső memória eszközön Konfigurálható alternatív memória eszköz heap allokálására Ezzel lehetőség nyílik az alacsonyabb rendű processek másik eszközön való futtatására több JVM-mel rendelkező rendszerek esetén

Release Calendar és további újdonságok Új, fél éves release ciklusok, LTS verziók Root Certificates: Célja, hogy közelebb hozza az OpenJDK-t és az Oracle JDK-t, biztonsági javítások az OpenJDK-ban Kísérleti JIT compiler Egyéb kódbázis tisztántartás

Java 11 újdonságok

Témakörök Lokális változó szintaxis a lambda kifejezésekhez Egy file-os kódbázis futtatás Standard HTTP kliens API-k változásai Nest-based access controll Dynamic Class-file Constants Epsilon Garbage collector Flight Recorder

Témakörök Low-overhead heap profiler Transport Layer Security 1.3 ZCG garbage collector Deprecated és Unsupported feature-ök

Eddig: Lokális változó szintaxis a lambda 1. list.stream() kifejezésekhez 2..map(s -> s.tolowercase()) 3..collect(Collectors.toList()); Mostantól: 1. list.stream() 2..map((var s) -> s.tolowercase()) 3..collect(Collectors.toList());

Lokális változó szintaxis a lambda És amiért jó: kifejezésekhez 1. list.stream() 2..map((@Notnull var s) -> s.tolowercase()) 3..collect(Collectors.toList());

Egy file-os kódbázis futtatás Ha egy file-ból áll a kódbázis, futtatható közvetlenül: java HelloWorld.java Ha akarunk átadni változókat: java -classpath /home/foo/java Hello.java Bonjour javac -classpath /home/foo/java Hello.java java -classpath /home/foo/java Hello Bonjour

Egy file-os kódbázis futtatás A filenév utáni paraméterek a futtatásnál kerülnek átadásra az alkalmazásnak A filenév előtti paraméterek a fordítás után adódnak át a futtatáshoz A filenév előtti paraméterek a compilernek is átadódnak, ha szükségesek a fordításhoz

Standard HTTP kliens A Java 9-ben már elindult inkubátormodulként a standardizált HTTP kliens fejlesztése A Java 11 SE Standard már tartalmazza ezt a fejlesztést Új modul: java.net.http Fő típusok: HttpClient HttpRequest HttpResponse WebSocket

API-k változásai IO változások: java.io.filereader és java.io.filewriter: új konstruktor amelyben a Charset definiálható NullStream-ek, NullWriter, NullReader String változások: isblank() lines() repeat(int) strip(), stripleading(), striptrailing java.nio.file.file: Charset támogatás

API-k változásai Predicate: Predicate.not(Predicate) Eddig: 1. lines.stream() 2..filter(s ->!s.isblank()) Ezután: 1. lines.stream() 2..filter(Predicate.not(String::isBlank))

Nest-based access control 1. public class Outer { 2. private int outerint; 3. class Inner { 4. public void printouterint() { 5. System.out.println("Outer int = " + outerint); 6. } 7. } 8. }

Nest-based access control 1. public class Outer { 2. private int outerint; 3. public int access$000() { 4. return outerint; 5. } 6. } 7. class Inner$Outer { 8. Outer outer; 9. public void printouterint() { 10. System.out.println("Outer int = " + outer.access$000()); 11. } 12. }

Nest-based access control 3 új metódus a java.lang.class osztályban: Class getnesthost() Class[] getnestmembers() boolean isnestmateof(class)

Dynamic Class-file Constants Egy új constant-pool bevezetése: CONSTANT_Dynamic Ezen értékek nem állítódnak be fordítási időben Egy bootstrap metódus segítségével runtime történik a konstansok beállítása

Epsilon Garbage Collector Az Epsilon Garbage Collector egy új GC, amely allokálja a memóriát, de nem szabadítja azt fel MIÉRT?!

Epsilon Garbage Collector Első ránézésre két felhasználási terület lehetséges: Benchmarking: Először futtatjuk az alkalmazásunkat az Epsilon GC-vel, majd ugyanezeket a teszteket elvégezzük a kívánt GCvel és összehasonlítjuk a metrikákat Nagyon rövid életű taskok elvégzésére, amikor garantálható, hogy nem fog elfogyni a heap, hiszen nincs overhead (még statisztikagyűjtés sem) Ha elfogyott a heap, 3 féle módon tudunk bedőlni: OutMemoryError Heap dump Hard Fail

Flight Recorder Az Oracle JDK kiegészítő terméke volt, bekerült az OpenJDK-ba is, illetve az Oracle JDK-ba API-kat biztosít adatok eventekként való feldolgozására, előállítására Buffer mechanizmus és bináris adatok támogatása Event filtering OS, JVM és Java package eventek Modulok: jdk.jfr, jdk.management.jfr

Low-overhead heap profiling Google fejlesztése JVM memory profiler, ami lehetővé teszi: A defaultként való beállítást a kellően alacsony overhead miatt Elérhetőség egy jól definiált interface-n keresztül Minden allokáció monitorozható vele Implementácó független Élő és halott Java objektumokról is tud adatot gyűjteni

Transport Layes Security 1.3 A TLS 1.3 támogatás kialakítása Jelentős fejlesztés biztonsági és performanciális szempontból is

ZCG Garbage Collector Low-latency GC nagy memóriaigényű (több GB) alkalmazásokhoz 1 generáció használata Alkalmazással konkurens GC Read barrier NEM ÁLTALÁNOS HASZNÁLATRA

Deprication és Unsupported feature-ök JavaEE modul eltávolítása Corba modul eltávolítása Nashorn Javascript Engine deprication Pack200 deprication