Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

SOS - Java Petr Vokáč 2005/2006

Podobné prezentace


Prezentace na téma: "SOS - Java Petr Vokáč 2005/2006"— Transkript prezentace:

1 SOS - Java Petr Vokáč 2005/2006

2 Obsah cvičení ● Úvod ● Základní konstrukce jazyka Java ● Třídy, rozhraní, dědičnost, polymorfismus,... ● Vyjímky ● Collection ● Java IO, serialization ● Reflexe ● Regexp ● Concurency – threads ● Java 5 ● Grafické rozhraní ● Network ● JNI ● JVM & bytecode ● Networking ● RMI ● JDBC ● JNDI ● JSP, servlety ● Log4j, Ant, JUnit, jar,... ●...

3 Zápočty ● Plnění drobných úkolů z cvičení – Většina by se měla stihnout během hodiny – Kontrola na dalším cvičení ● Zápočtový program – rozsah/počet dle plnění úkolů z cvičení

4 Literatura ● ● Thinking in Java, Bruce Eckel – – edition4.0.zip edition4.0.zip ● Effective Java, Joshua Bloch ● Core Java 2, Volume 1, by Horstmann & Cornell (Prentice Hall) ● Sun dokumentace – – – –

5 Historie ● 1991 – oak ● 1995 – Sun formally announces Java ● Cite Gosling “the goal was... to build a system that would let us do a large, distributed, heterogeneous network of consumer electronic devices all talking to each other.” ● Verze – JDK 1.0.x (x je cislo revize) - liší se knihovny (jazyk standardní víceméně od začátku) – JDK GUI knihovna AWT, události, kontejnery - za moc však nestojí – JDK jazyk JAVA 2 - nová GUI knihovna Swing (součást JFC), lepší kontejnery – JDK nic moc nového – JDK 1.4 – zásah do jazyka – přidání příkazu obdobného k C assert(), knihovny (ipv6, nio,...) – JDK 1.5 – řada novinek v samotném jazyce (obdoba šablon, efektivnější psaní některých konstrukcí,...) - inspirace z C#

6 Základní informace o jazyce Java ● Interpretovaný jazyk (preklad do bytecode) ● Interpretováno Java Virtual Machine (JVM) – Simuluje procesor rozumící bytecodu – Sun uvažoval i o hw přímo pro Javu (nerealizovalo se) ● Bytecode nezávislý na platformě – Lze provozovat všude, kde je implementovana JVM – Win32, Unix (Solaris, Linux, BSD, Mac,...), AIX,... ● Specifikace JVM volně dostupná – Implementace Sun, IBM, Microsoft (nestandardní),... ● JDK (J2SE) x J2EE ● Garbage Collector, abstrakce paměti, reference – Snaha o jednodušší jazyk – méně chyb – rychlejší vývoj ● Standardní knihovny, nativní volání

7 Hello World ● Pro ukázku nejjednodušší příklad v Javě // HelloWorld.javaHelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World”); } ● Kompilace do bytecode (java musí být v PATH) javac HelloWorld.java ● Spuštění HelloWorld.class java HelloWorld

8 Vývojová prostředí ● Eclipse 3.1 (IBM) – – Zdarma (včetně komerčního použití) – Výborný nástroj pro práci s Javou ● Navigace, Javadoc, code completition, refactoring, XML,... ● Integrace s dalšími vývojovými nástroji (Ant, JUnit,...) ● Integrace s komerčními nástroji (UML, ER modelování,...) ● Možnost vizuálního návrhu Swing GUI ● Netbeans 4.1 (SUN) – V některých prvcích zaostává za Eclipse – Prý lepší na J2ME, Webservices – Vizuální návrh Swing GUI – Zdarma ● JBuilder (Borland) – Zdarma jen ořezaná verze, nutné žádat o licenci – Vizuální návrh,...

9 Coding style ● ● Proč? ● Filename: Test – -> Test.class (single public class), Test$Class.class ● Komentáře ● Adresářová struktura ● Struktura souborů – Package, import, public class/interface) – Class structure ● static variables, instance variables, constructor, methods – public, protected private – Délka řádek, lámání řádek – Pojmenování package, class, interface, method, variable, constant,... ● Eclipse podtrhává některé chyby v coding style

10 Datové typy ● Objekt (reference na objekt, třída) // DataTypes.javaDataTypes.java ● Primitivní datové typy – Rozdělení ● Ordinální – byte, short, int, long ● Floating-point IEEE 754 – float, double ● Ostatní – boolean, char, void – Znaménkové, standarizované rozsahy a ukládání (big- endian.), automatické konverze (short x; x = x + x; chybné) – Obalové třídy – Byte, Short, Integer,...) – Konstanty – false, ‘\u1234’, (byte) 0, 0, 0L, 0.0f, 0.0d – Zadávání čísel – x = 10; x = 0x10, x = 010; ● Pole – Inicializovaná, kontrola hranic, length, libovol. typ, vícerozm. double matrix[][] = new double[4][4]; int a[] = { 1, 2, 3 }; Object o[]; ● Oblast platnosti proměnných – {}, uvolňování paměti, viditelnost a překrývání

11 Řízení běhu programu ● Operace, operátory // ProgramFlow.javaProgramFlow.java – assignment – mathematical operation +, -, *, /, %, ++, +=,.. – relational operators >, >=, <, <=, ==, != – logical operators &&, ||, ! – Bitwise &, |, ~, ^, >, >>>, &=, |=, ^=, >=, >>>= – ternary i = (i < 0) ? -i : i – String +, comma (jen pro smyčku “for”) – Precedence operátorů ● (unary +,-,++,-- -> aritmetic *,/,%,+,-, > -> relational >, =, logical &&,||,&,|,^ -> conditional a>b?x:y) ● Řízení běhu programu – If, else, switch (case, break), for, while, do-while (break, continue, label) – Výsledek výrazu v podmínce musí být typu boolean ● Úkol – výpis čísla v binární formě // Binary.javaBinary.java

12 Package, import ● Klíčové slovo, syntaxe package nazev.baliku; – Umožňuje oddělení vytvářených tříd (na začátku, jen jeden) – Obdobné namespace z C++ – Jednoznačné pojmenování – začíná otočené dom. jm. – Standardní Java knihovny (java, javax, com.sun) – Hierartické uspořádání ● Odděleno “.” ● Uspořádání na disku do adresářů – Default package – #ifdef -> lze nahradit importem různých package ● Import, syntaxe import nazev.baliku.*; – Jednotlivé třídy nebo všech z daného package – Importuje jména (kolize), Není rekurzivní – Java 1.5 – import static jmeno.package.* – Classpath ● Příklady: Pack.java, “cz.cvut.fjfi.Pack.java“, cz.cvut.fjfi.PackTest.java Pack.javacz.cvut.fjfi.Pack.javacz.cvut.fjfi.PackTest.java

13 Objekty, instance,... ● Objekt – Stav & služby – Zapouzdření funkcí pro manipulaci s daty – Abstrakce & specializace – Rozhraní, skrytí implementace, znovupoužitelnost existujícího kódu – Instance objektů ● Syntaxe // Instanc.javaInstanc.java – Modifikátory – abstract, final, public, package access, private (inner classes) – Jméno, rodič (Object), rozhraní ● modif. class Name extends Parent implements Int1, Int2 { } – Konstanty, Atributy – Konstruktory, metody (finalize x resource cleanup) – Statický inicializátor static {...; }

14 Atributy, metody ● Atributy – Stav konkrétní instance, přístup přes metody – Libovolný typ, Inicializované – Modifikátory – viditelnost (bez modif., public, protected, private – minimalní), static, final (konstanty velkými písmeny) – Přístup k atributům přes “.” (statické x atributy instancí) ● Metody – Přetěžování, neexistují implicitní hodnoty parametrů, return – Konstruktory, nejsou destruktory (finalize – check), volání fcí – Rozhraní pro práci s objektem, virtuální (mimo final) – Jméno, argumenty (počet, typ,...), návratový typ (..., void) – Modifikátory – viditelnost (bez, public, protected (potomci z balíku), private – lze jen rozšiřovat), static, final, abstract – this, super; private => final ● Úkol – Výpočet faktoriálu (cyklus, rekurze) // Factorial.javaFactorial.java

15 Dědičnost, polymorfismus ● Dědičnost a polymorfismus – Pouze jednoduchá s jedním kořenem, standardně od Object – Automatické volání konstruktoru předka, ručně s param. – Uklízení/uvolňování zdrojů (volání úklidu předka) – Klíčová slova – this, super – Kompozice (has a) x dědičnost (is a) ● kombinace obou přístupů – Upcasting, downcasting – instanceof ● Polymorfismus – Použití s instancí různých objektů pomocí společného rodiče – Late binding – konkrétní kód nalezen až za běhu (virtual) – Pozor na “přetížení” privátních metod – Pozor na volání virtuálních metod v konstruktoru ● Příklady – Shape.java, Circle.java, Square.java Shape.javaCircle.javaSquare.java

16 Rozhraní ● Rozhraní – interface – (Serializable, Comparable,...) – Čisté abstraktní třídy v C++, IDL, čistá abstract třída v javě – Bez implementace, pouze říká jak se třída bude chovat – Dědičnost, kompozice, implementace rozhraní – Obdobná deklarace jako pro třídy (pouze hlavičky metod) ● Vše automaticky public => vše nutně public i ve třídách – Syntaxe // příkladypříklady interface Intr1 implements Intr2, Intr3 extends Intr0 { int LEDEN = 1, UNOR = 2, BREZEN = 3; //... Random rand = new Random(); int randomInt = rand.nextInt(10); void test(); } – V definici třídy/rozhraní lze použít vícekrát ● “vícnásobná dědičnost” ● Lze dědit od existujících rozhraní ● Lze mít stejné názvy metod ve více rozhraních (“překrývání”) – Může obsahovat deklarace datových složek (pub. stat. final) ● Lze využít pro definici konstant (enum x java 1.5) – Přetypování

17 Inner Classes (Interfaces) ● Vnořené třídy/rozhraní // Inner.java, Stack.javaInner.javaStack.java – Modifikátory viditelnosti ● Vytváření, identifikace (využití rozhraní pro vnitřní třídy) ● Možnosti definice třídy – Uvnitř metody – Uvnitř bloku – Anonymní třídy (implementující rozhraní, dědící,...) ● Parametry konstruktoru ● Vytváření instancí anonymních tříd – Přístup ● K obalové třídě (metody, datové složky – včetně privat) – Nested classes ● statické, přístup k nestatickým obal. tř. ● Testovací kód pro danou třídu (statická s main) – Dědění od vnitřních tříd – Názvy výsledných tříd – vnějsí$vnitřní.class ● Použití – swing event handling, callbacks (poděděním & +)

18 Vyjímky ● Ošetření chybových stavů – // Except.javaExcept.java – Oddělení kódu aplikace a pro ošetření chyb (přehlednost) ● Vyvolání – throw new ExceptionClass(), throw e ● Zachycení – pořadí, base class; neošetřené zachytí JVM – try { } catch (ExcClass err) { } finally { } ● Base class Throwable (potomek Object) – Fatalní – Error – systémové chyby, problémy JVM – necht. – Uživatelské – Exception ● RuntimeException – nemusí se zachytávat (unchecked x check.) ● Metody (throws), Stack trace, initCause, logování (Logger, Log4j,...), Ukončení x další pokus (while), finally – cleanup & “zmizelá” vyjímka, konstruktor – zachytit-uklidit-vyvolat ● Příklady (x/0, i[123] = 123, Integer.parseInt(“abc”),... ● Úkol – výpočet kvadratické rovnice, vlastní třída pro vyjímky pri sgn(D) = -1, vyjímka inval. argum. – řešenířešení Throwable ErrorException RuntimeExceptio n

19 Kontejnery 1 ● Array (vytváření, procházení, java.lang.Arrays, kopie) ● Container classes (změny Java 1.2 – Vector, Stack, Hashtable ) – Pro reference na Object // Kontejnery.javaKontejnery.java ● “ztráta” informace, možnost chyb (RuntimeException) ● SoftReference, WeakReference, PhantomReference – Collection ● Typy – List (ArrayList – array, LinkedList (stack, queue, dequeu),...) – Set (HashSet, TreeSet (SortedSet), LinkedHashSet,...) ● Musí mít metodu equals(), bez duplicit ● Hash třídy musí mít metodu hasCode() - Effective Java, load factor ● add(), addAll(), get(), remove(), removeAll(), contains(), containsAll(), clear(), size(), isEmpty(), toArray(), iterator (Enumeration) –> hasNext(), next(), remove() – ConcurentModificationException – Map (HashMap, LinkedHashMap, TreeMap (SortedMap),...) ● key -> value ● put() - retVal, get(), remove(), clear(), size(), containsKey(), containsValue(), isEmpty(), entrySet(), keySet(), values(), putAll()

20 Kontejnery 2

21 Kontejnery 3 ● Použití – Typ dat & performance – Deprecated – Vector, Stack, Hashtable ● Třídění – java.util.Collections ● binarySearch, fill, sort, min, max, reverse, rotate, copy, swap, fill, enumeration, indexOfSublist, lastIndexOfSublist ● synchronized*, unmodifible* – UnsupportedOperationException, ConcurrentModificationException ● BitSet – Efektivita bitové ukládání x pomalejší přístup – Pro rozsáhlé bitové informace

22 Java I/O 1 ● File // DirIO.javaDirIO.java – Informace ● Soubory, adresáře – Vytváření, mazání, změny ● Streams (byte oriented, Java 1.0) // IOFile.javaIOFile.java – Base class – InputStreams & OutputStreams ● bytearray, file, stringbuffer, pipe, sequence ● Decorator pattern (FilterInputStream, FilterOutputStream) – doplňování dalších vlastností – Data(I/O)Stream (Data(I/O)), buffered (I/O), line (-I), pushback (I), print (O) – Nezávislost na platformě ● Readers/Writers (Java 1.1, unicode, internacionalizace) – deprecate některé I/O streams, rychlejší – Base class – Reader & Writer, decorator/dědičnost ● file, stringbuffer, chararray, piped, string, print (O), linenumber (+I) ● konverze InputStreamReader, OutputStreamWriter ● RandomAccessFile (čtení/zápis/posun) -> (NIO Java 1.4) – Jen soubory – DataInput, DataOutput + seek, getFilePointer

23 Java I/O 2 Character Streams Byte Streams RandomAccessFil e

24 Java I/O 3 ● Streamy – “gzip/gunzip”, “zip/unzip”, crc (CheckedI/O) – Dekorace pomocí CheckedOutputStream ● System.in (IS), System.out (PS), System.err (PS) – Čtení (zabelaní do In.Str.Rd. + BufRd.), zápis (zabalit do PrinterWriter), přesměrování (setIn, setOut, setErr) ● nio (Java 1.4) – Reimplementace a zrychlení I/O (i pro existující streamy) – Lepší využití OS – channels, buffers – low level operace ● FileChannels – FileInputStream, FileOutputStream, RandomAcc.F. ● Channels –> ByteBuffer – put, get; znakové sady (Charset) – encode, decode; as*Buffer, order (endians) – clear, capacity, flip, limit, mark, position, remaining, hasRemaining – Memory mapped files, locking, encoding/decoding chars ● java.util.prefs.* – preference map, uloží dle OS(registry,...) ● Úkol – uložit n čísel, načíst zpět a spočítat sumu – řešenířešení ● Binárně, Textově, Komprimovaně (gzip nebo zip) – Jako pole/kolekci, po jednom prvku

25 Serializable 1 ● Pro automatické ukládání/načítání stavu objektu // IOFile.javaIOFile.java – včetně privátních dat, neukládají se statické datové složky ● Jednoduché, ale ● změna API – jména, přidání/odebrání, musí být navždy (kompat.) – serialVersionUID (jméno třídy, rozhraní, public + private +... dat.) ● testování kompatibility ● Security (z priváního se stáva public API) – přístup k private, readObject (“veřejný konstruktor”, null, defensive copy mutabl.) ● složitější dědění (není dobré volat virtuální metody) – korektní implementace “readObject”, “writeObject” (defaultRead/WriteObject) – rodič musí poskytovat konstruktor bez parametrů (nebo musí být Serializable) ● prázdný konstruktor {} + kontrola inicializace konstruktorem s parametry ● nevhodné pro inner classes (nestandarizované názvy) ● složitější objekty – seznam, graf – nepotřebná data, velikost, stack owerflow – transient ● “nesmysl” např. pro hash (HashMap,...) – různé hash funkce ● Vhodné pouze pro datové objekty

26 Serializable 2 ● Serializace signletonu, typesafe enum – nutné zajistit jednu instanci, ale readObject je vpodstatě další public konstruktor – ReadResolve ● volána po vytvoření serializovaného objektu ● vrátí existující instanci ● Kontrola validity – nutné provádět stejné kontroly jako u konstruktoru ● readObject (možnost podvržení reference – defensive copy) ● readResolve – kontrola datových složek – možnost vytvořit novou instanci (konstruktor s načtenými parametry) x výkon ● Při implementaci read/writeObject – defaultReadObject, defaultWriteObject (uložení netransient) – většina datových složek trasient ● Externizable (rozšiřuje Serializable – read/writeExternal ● serializable singleton, typesafe enum & readResolve; check validity

27 Java 5 (1.5) ● // Java15.javaJava15.java – – ● Generic types – původně pro kolekce, specializace ret. val – kontrola při kompilaci, jednodušší/kratší zápis, wildcards ● Autoboxing/autounboxing primitivních typů – Opět vhodné pro kolekce, automatické “přetypování” ● Rozšíření smyček “foreach” ● Výčtový datový typ enum + statický import (EnumSet/Map) ● Formátování výtupu/vstupu – PrintStream.printf (java.util.Formatter), java.util.Scanner ● Metadata – anotace tříd, rozhraní, metod,... – Využití – kompilátor, další nástroje (přístup přes reflexi) ● Multithreading – java.util.concurent – atomické oprerace, zámky, semafory, thread-safe fronty,... ● Monitorovací API pro JVM, diagnostiky + debug, RMI,...

28 Regex ● java.util.regex (Java 1.4) – // Regex.javaRegex.java – String.split(str), StringTokenizer – Hledání/nahrazování řetězců – Dokumentace (gram. typ 3 (regulární), reg. jazyky, kon. aut.) ● ● tern.html tern.html ● Pattern (compile, matcher, split) – Regulární výraz (\t,\n,\d,\b, \w,\s,\p{},[],.,^,$,*,?,+,{},|,(),\num) ● greedy, reluktant (?), possessive (+) – Modifikátory (case-insensitive, new line, unicode related,...) ● Matcher – matches, lookingAt, find, start, end, group, reset, replaceFirst, replaceAll, appendReplacement, appendTail ● String (matches, split, replaceFirst, replaceAll) – // StringBuffer, StringBuilder (not synchronized, Java 1.5), StringTokenizer, NumberFormater, DecimalFormater

29 Reflexe ● Zjišťování informací o objeku/třídě za běhu // Reflexe.javaReflexe.java – Metody, atributy, rodiče, rozhraní,... ● Vytváření objetků, volání metod, čtení/nastavování attr. ● Class objekt – Jeden pro každou použitou třídu – Načítány/vytvářeny při prvním použití pomocí JVM – Class reference – obj.getClass(),.class, Class.forName() ● ==, instanceof, obj1.isInstance(obj2) ● Kontroly nutné provádět za běhu – Pomalejší (hlavně ve starších verzích Java < 1.4) – Chyby neodhalí kompilátor – zpracování vyjímek – Složitější kód – Security manager (nastavování hodnot datových složek) ● Možnost používat třídy neznámé v době kompilace – pluginy, devel. nástroje – GUI,... ● Rozšíření pro Java 5 (1.5)

30 Multithreading 1 ● OS – multitasking (kooperativní, preemptivní) ● Aplikace – multithreading – “paralelní” běh více částí progr. – Serverové aplikace (obsluha více klientů) – GUI aplikace, blokující I/O operace, síťová komunikace – Lepší využití víceprocesorových systémů, škálovatelnost – Thready x procesy ● Sdílená data (efektivita x problémy) ● Z hlediska OS menší režie s vytvářením/rušením threadů – Samotná Java potřebuje thready (GC na pozadí čistí paměť) – Komplexní problematika (nejen ve vztahu k Javě) ● Concurrent Programming in Java ● Základní konstrukce // ThreadTest.java, ThreadSync.javaThreadTest.javaThreadSync.java – Třída java.lang.Thread (run,start,sleep,isInterupted,isAlive, yield,wait,join spousta dpr. metod – stop,suspend,resume) – Rozhraní java.lang.Runnable (run) – synchronized (metody, blok), volatile – přístup, deadlock ● Lze synchronizovat i statické metody (zámek na “třídu”)

31 Multithreading 2 ● Stav threadu ● Priority – závislé na možnosti OS – na implementaci JVM – nelze na ně spoléhat, yield() ● Daemon threads, thread groups ● Vyjímky – UncaughtException, set(Default)UncaughtExceptionHandler ● Monitory – Pouze privátní data, každý obj. má zámek, více podmínek – Java nesplňuje 1, 3 nový běžíc í kone c blok start() konec run() stop() sleep( ) konec wait() notify( ) čekání/vyřízen í I/O, zámek suspend( ) resume()

32 Multithreading 3 ● Nové vlastnosti Java 1.5 – Problémy JMM < 1.5 (synchronizace, volatile – reordering) – ReentrantLock, ReentrantReadWriteLock ● Lock – lock, unlock, tryLock, (readLock, writeLock) ● Condition – await, signal, signalAll ● ReentrantLock x synchronized – Libovolný počet podmínek narozdíl od synchronized (wait, notify, notifyAll) – Lze nastavit timeout pro získání zámku – Více kódu, přehlednost – nepotřebuji-li jeho vlastnosti stačí použít synchronized – BlockingQueue (producer/consumer pattern) // ThreadQueue.javaThreadQueue.java ● vkládání/vyzvednutí – s vyjímkou, true/null, blokující ● Linked, Array (fair), Priority, DelayQueue (Delayed interface) – Concurrent Collections ● ConcurrentLinkedQueue, ConcurrentHashMap, CopyOnWriteAr.L/S. ● Neuzamykají celou kolekci – rychlejší, iterátory validní po modifikaci – Callable – “Runnable” s návratovou hodnotou – FutureTask – Callable -> Runnable s přítupem k výsledku – Executors – thread pool, Synchronizers – Semaph. Barrier,.

33 Grafické rozhraní 1

34 Grafické rozhraní 2

35 Grafické rozhraní 3

36 JavaBeans 1 ● Vytvřáření znovupoužitelných komponent – Jednoduché pro použití, ale dostatečně obecné – Integrace s vývojovými nástroji, vizuální návrh, property – Nesouvisí s EJB (komplexnější server side komponenty) – Normální třída se striktněji dodržovanými konvencemi ● Informace v mf souboru JAR archivu ● Property editor pro vlastní třídy ● Pojmenování JavaBeans – Libovoná třída ● Nedědí od nějakého specielního předka – java.beans.Bean pouze pro management ● Vizuální beany dědí od Component – Properties & events ● Reflection – is/getXXX() (read-only), setXXX() => property name XXX (resp. getFile -> file) – add/remove event listener, jméno třídy končí na Event, je potomkem EventObject ● NameChangedEvent -> NameChangedListener -> add/removeNCL(NCL e) ● BeanInfo classes

37 JavaBeans 2 // FIXME: příklady ● BeanInfo – pokud si nevystačíme s reflexivním chováním ● nutí nám schema pojmenování, bere vše is/get/set – BeanInfo inteface – pro vlastní popis (názevTřídyBeanInfo) ● SimpleBeanInfo class – defaultní implementace všech metod ● (get)PropertyDescriptor(s), EventSetDescriptor, MethodDescriptor – Introspector.getBeanInfo(bean) – Property editory (ke konkrétní položce, ke všem PropertyEditorManager) ● Další metody pro detailnější popis (ikony,...) ● Property types - simple, indexed, bound, constrainted ● PropertyChangeSupport (add, remove, fire (souč. Jcomponent), fireIndexed (1.5), getPCListeners), PropertyChangeListener ● VetoableChangeSupport (add, remove, fire (souč. JComponent), getVCListeners), VetoableChangeListener, PropertyVetoException – Editors – PropertyEditor, PropertyEditorSupport ● getValue, setValue, getAsText, setAsText, getTags, isPaintable, paintValue, supportCustomEditor, getCustomEditor, getJ..Init..String – Customizers – editování více atributů zároveň ● Persistence

38 JDBC

39 JNDI ● Přístup k adresářovým službám (DNS, LDAP, fs,...) – Mapování jméno objekt (fqdn ip, dn object,...) – Binding, reference, objekt, kontext

40 JNI 1 ● Rozhraní pro volání funkcí z jiných jazyků (c, c++) – dříve používáno kvůli optimalizaci – dnes nevhodné! – vytvoření Java rozhraní k existujícím knihovám – zpřístupnění vlastností, které nejsou v Javě dostupné ● raw sockety, nízkoúrovňové programování,... ● Postup // NativeHello.javaNativeHello.java – Vytvoření java třídy ● metody s modifikátorem native ● nahraní výsledné knihovny ve statickém inicializátoru – System.load(fileName), System.loadLibrary(libName) – Kompilace do.class (javac) – Vygenerování hlavičkových souborů (javah -jni) – jni.h – Implementace + kompilace do sdílené knihovny ● gcc -fPIC -shared -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -o libname.so NameImpl.c ● cl -I %JAVA_HOME%\include -I %JAVA_HOME%\include\win32 -LD NameImpl.c -FeName.dll – Pro spuštění sdílená knihovna přístupná ● LD_LIBRARY_PATH, -Djava.library.path, absolutní cesta v load()

41 JNI 2 ● Příklady volání nativních metod // NativeTest.javaNativeTest.java – Datové typy (jobject, jclass, jstring, jint,..., jintArray,...) – Názvy metod, volání, vyjímky, datové složky, parametry ● JNIEnv, jclass (statické metody), jobject (nestatické), “parametry” – GetXxxField, GetStaticXxxField, SetXxxField, SetStaticXxxField – CallXxxMethod, CallStaticXxxMethod, NewObject – CallNonvirtualXxxMethod, CallXxxMethodA/V, NewObjectA/V, ● Získávání identifikátoru metody/atributu – GetMethodID, GetFieldID – náročné, platné pouze v rámci volání nebo lze vytvořit globální referenci (New/DeleteGlobalRef) – z id lze zpět získat referenci na objekt (From/ToReflectedMethod/Field) ● Pole – GetArrayLength, Get/SetObjectArrayElement, Get/SetXxxArrayElements, ReleaseXxxArrayElements, Get/SetXxxArrayRegion ● Inicializace/ukončení knihovny – JNI_OnLoad, JNI_UnLoad ● Práce se String, pole (prim. dat. typ., objekty) – Class signatures – javap -s (-c pro bytecode) – Vyjímky – Throw, ThrowNew, ExceptionOccurred, ExceptionCheck, ExceptionClear – Volání Java z C, synchronizace (MonitorEnter/Exit),...

42 JVM, Bytecode ● JVM – ● Java bytecode – java virtual machine – hardware ● Jazyk, struktura JVM, struktura Java tříd, nahrávání, instrukce – Bytecode – one byte instruction + operands* ● ● registry, stack, gc-heap, method area ● stack oriented design – 09-bytecodes.html 09-bytecodes.html – 06-vm.html 06-vm.html ● BCEL – Byte Code Engineering Library – – Analýza, změny a vytváření java tříd ● Rozšiření možností Javy bez změny kompilátoru nebo JVM – V souborech, ale také dynamicky za běhu (classLoader) ● Vytváření tříd za běhu ● Java decompilers

43 Java networking ● klient/server, IP/DNS, TCP/IP & struktura paketu, port,... – telnet pro testování textových protokolů (HTTP, POP3,...) ● – openssl pro protokoly zabezpečené/zabalené do SSL ● Socket – Připojení na server:port, getInputStream

44 RMI

45 Security

46 Java tools ● – Basic – java, javac, javah, javap, javadoc, jar, jdb, apt – Security – keytool, jarsigner, policytool, kinit, klist, ktab – RMI – rmic, rmid, rmiregistry, serialver – IDL – tnameserv, idlj, orbd, servertool – Monitoring – jconsole, jps, jstat, jstatd – Troubleshooting – jinfo, jmap, jsadebugd, jstack

47 Logging, debugging, Log4j ● assert() ● log4j ● Viz. Core Java 2 volume I

48 Ant, Junit, jar,...

49 Aplety, Java Web Start

50 JSP, Servlety

51 XML, JAXB, JAXM, SOAP

52 Web Services


Stáhnout ppt "SOS - Java Petr Vokáč 2005/2006"

Podobné prezentace


Reklamy Google