Java pre pokročilých - PF UPJŠ 2009/2010
| kontakty: | Juraj Andrássy - andrassy[at]vsl.sk Peter Marcinčák - marcincak[at]vsl.sk Andrej Ferko - ferko[at]vsl.sk |
25.09.2009 - Úvod
Andrej Ferko
Prezentácia: .pdf
09.10.2009 - java.util - Collections Framework
Andrej Ferko
Prezentácia: .pdf
Zdrojové kódy: .zip
Úlohy: .zip
23.10.2009 - Streamy
Peter Marcinčák
Prezentácia: .pdf
Examples: .zip
6.11.2009 - java.beans a java.lang.reflect
Juraj Andrássy
Text: .pdf
Zdrojové kódy: .zip
Úlohou je doplniť implememtáciu metód toMap, equals a sort.
27.11.2009 - javax.xml
Juraj Andrássy
Použitie XML na serializáciu beanov. Ako ukážku použitia práce s XML z Javy, vytvoríme metódy na serializáciu a deserializáciu beanov do a z XML.
Text: .pdf
Zdrojové kódy: .zip - aj ukážky použitia DOM a SAX pre načítanie aj vytvorenie xml
4.12.2009 - java.sql
Juraj Andrássy
Použitie JDBC na persistenciu beanov. Ako ukážku použitia JDBC, vytvoríme jednoduchý ORM servis.
Využijeme databázový engine Derby.
Text: .pdf
Databáza: jpp0910_db.zip
Derby jar-ka: jpp_derby.zip
Zdrojové kódy: .zip (vrátane lab.ps.PersistentServiceX s ďalšími možnosťami)
18.12.2009 - Zápočtový test
15.1.2010 - Zápočtový test 2. termín
2. termín bude v priestoroch VSL Software (mapa) v obvyklom čase 10:45.
Známky z testu z 18.12. sme zapísali tým, ktorí majú A a B. Ostatním čo už test písali, zapíšeme známku až keď sa dohodneme, že si nechcete opraviť. Jedna možnosť je rovno prísť na opravný test, druhá možnosť je kontaktovať nás e-mailom.
Test bude na papieri.
API nebude potrebné. Ak v úlohe bude potrebné napísať nejaký fragment kódu, tak nepresnosti názvov tried, metód, rozhraní budú tolerované, podstatný je princíp.
Pri žiadnom z riešení nebude treba písať nejaký dlhý kód.
Bude cca 30 otázok.
Obsahom testu bude:
- Streamy
- Collections Framework
- java.beans a java.lang.reflect
- javax.xml
- java.sql
- Akú vlastnosť má kolekcia implementujúca java.util.Set?
- Umožňuje prístup na i-tú pozíciu v kolekcii.
- Prvky v kolekcii sa neopakujú.
- Kolekcia je synchronizovaná.
- Máme pole Integer[] arr. Napíšte kód, ktorým nájdeme v poli minimum.
- Pre akú operáciu nie je vhodná implementácia Listu java.util.LinkedList?
- Čo vypíše nasledujúci kód z poľa String[] arr:
System.out.println(new java.util.LinkedHashSet(java.util.Arrays.asList(arr)));
Riešenie: b.
Riešenie: java.util.Collections.min(java.util.Arrays.asList(arr))
Poznámka: V odpovedi nemusí byť uvedený pri triedach package. Na java.util.Arrays metóda min nie je, ale aj odpoveď Arrays.min(arr) by bola uznaná.
Riešenie: Pre prístup do Listu na i-tú pozíciu.
Riešenie: Vypíše z daného poľa stále len prvý výskyt reťazca, teda ak sa reťazec opakuje, tak druhý a ďalšie výskyty nevypisuje. Zachová pritom poradie reťazcov podľa toho ako sú umiestnené v poli.
25.2.2010 - Threads
Andrej Ferko
Prezentácia: .pdf
Zdrojové kódy: .zip
11.3.2010 - Základy komunikácie prostredníctvom HTTP protokolu
Peter Marcinčák
Prezentácia: .pdf
Zdrojové kódy: .zip
25.3.2010 - Servlety 1. časť
Juraj Andrássy
úvod do servletov; príprava vývojového prostredia (Tomcat); jednoduchý servlet
Prezentácia: .pdf
Zdrojové kódy: .zip
8.4.2010 - Servlety 2. časť
Juraj Andrássy
jednoduchý servlet generujúci html stránku z dát z databázy; session; spracovanie dát z html form v servlete;
Prezentácia: .pdf
Zdrojové kódy: .zip (vyžaduje aj databázu z témy "java.sql")
6.5.2010 - Komunikácia java programov cez protokol HTTP
Juraj Andrássy
Java ako HTTP klient; koncept vzdialeného API; jednoduché "WebService" RPC použitím XMLService
Prezentácia: .pdf
Zdrojové kódy: .zip (vyžaduje aj databázu z témy "java.sql")
Zápočtové úlohy
Nasleduje zoznam tipov na zápočtovú úlohu. Jednu úlohu si môžu vybrať aj viacerí, ale riešenie musí mať každý jeden vlastné. Môžete prísť aj s vlastnými nápadmi na zadanie.
Napíšte nám e-mailom, ktorú/akú úlohu ste si zvolili na riešenie.
Hodnotené bude predovšetkým programovanie v Jave, správne využitie jazyka a knižníc, kvalita zdrojového kódu. Budeme mať veľa otázok k zdrojovému kódu. Môžete si s nami dohodnúť termín hodnotenia, ale tak, aby na hodnotenie prišli aspoň traja naraz. Hodnotenia sa môžu zúčastniť aj diváci.
- Demo aplikácia
- zobrazenie prehľadu osôb so všetkými základnými atribútmi a názvom obce
- editácia všetkých atribútov osoby vrátane "user-friendly" výberu rodičov a obce
- pridávanie osôb
- Peer to peer zdieľanie súborov
- zobrazuje prehľad súborov zo "svojho" adresára
- umožňuje downloadnúť súbor z prehľadu
- umožňuje pridať súbor
- zobrazuje súbory z iných inštancií tejto web aplikácie (zadaných v konfigurácii)
- umožňuje downloadnúť súbor z prehľadu súborov z inej inštancie
- pritom to nerobí presmerovaním, ale ako proxy, ktoré súbor lokálne neuloží
- lepšia verzia tejto aplikácie by mohla umožniť evidovať a zobrazovať k súboru dodatočné informácie uložené v xml alebo v databáze
- Log viewer
- času od, do
- závažnosti správy
- názvu Threadu
- názvu operácie
- loginu používateľa
- tela logovanej správy (možnosť zadať regulárny výraz)
- Connection pool
- parametre potrebné pre pripojenie k databáze (driver, url, user, password)
- maximálny počet connectionov - ak sú všetky connectiony z poolu vypožičané, tak pool vytvorí ďalšie connection a poskytne ho. Nemôže to robiť ale neobmedzene, preto ak je dosiahnutý maximálny počet connectionv, tak pool vyhodí výnimku.
- životnosť jedného connectionu - pool si pre každé connection pamätá na aký čas bolo vypožičané aplikácii (tento čas sumuje z jednotlivých vypožičaní). Ak pri vrátení do poolu je už connection príliš dlho používané, tak ho zatvorí (dôvodom pre túto funkčnosť môže byť napr. to že dlho používané connection môže zaberať veľa pamäte kvôli nejakej chybe v JDBC driveri)
- Command-line utilita pre zipovanie a šifrovanie súborov
- jeden súbor
- zoznam súborov v adresári ktorých názvy vyhovujú maske určenej regulárnym výrazom
- adresárovú štruktúru s podadresármi a súbormi v nich, pričom je tiež možné zadať regulárny výraz pre názvy súborov
- Mail klient (web-rozhranie)
Dokončiť aplikáciu Demo, ktorú sme používali ako príklad.
Web aplikácia, ktorá
V adresári sú textové súbory, ktoré sú výsledkom logovania nejakej aplikácie. Logované záznamy pozostávajú z hlavičky a tela.
Hlavička obsahuje:
(1) dátum a čas logovanej správy
(2) závažnosť správy (reťazec bez medzier - napr. DEBUG, INFO, ERROR)
(3) názov Threadu
(4) názov operácie
(5) login používateľa
Telo obsahuje ľubovoľné znaky, môže byť na viac riadkov a končí ďalšou hlavičkou.
Formát je:
(1) (2) [(3)] (4) - (5) - telo
Medzi položkami hlavičky môže byť aj viac medzier.
Program má vedieť vyhľadávať v logoch v adresári záznamy na základe:
Príklad logu: example.log
Program môže byť spravený ako command-line alebo ako servlet s web-rozhraním.
Vytvorenie connectionu (java.sql.Connection) cez JDBC je časovo náročné. V aplikáciách nie je preto praktické pre každý prístup na databázu otvárať nové connection a po jeho použití ho zatvárať. Namiesto toho sa používa tzv. connection pool. Je to množina connectionov a aplikácia si namiesto vytvorenia nového connectionu pýta connection z poolu a namiesto zatvorenia connectionu ho vráti do poolu. Pool sa stará o otváranie a zatváranie connectionov už sám.
Parametre poolu:
Pre vrátenie connectionu do poolu je potrebná metóda na poole 'freeConnection(con)'. Keďže java.sql.Connection je len rozhranie, tak je vhodné aby connection pool vrátil takú implementáciu java.sql.Connection ktorej metóda 'close()' vykoná namiesto fyzického zatvorenia connectionu jeho vrátenie do poolu, teda bude volať 'freeConnection(con)'.
Pri implementácii treba dávať pozor na synchronizáciu.
Program má vedieť zozipovať:
Program má vedieť aj rozbaliť to čo zabalil, pričom ak zipoval adresárovú štruktúru, tak ju má zachovať po rozbalení.
Program sa má vedieť pomocou java.mail.api napojiť na existujúci mailový server (napr. ten ktorý máte v škole).
Má vedieť zobraziť zoznam mailov na serveri a ukázať ich obsah. Má umožniť aj poslať mail.
Program má mať webové rozhranie.