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

Príklad ako môžu vyzerať otázky:
  1. Akú vlastnosť má kolekcia implementujúca java.util.Set?
    1. Umožňuje prístup na i-tú pozíciu v kolekcii.
    2. Prvky v kolekcii sa neopakujú.
    3. Kolekcia je synchronizovaná.

    Riešenie: b.

  2. Máme pole Integer[] arr. Napíšte kód, ktorým nájdeme v poli minimum.

  3. 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á.

  4. Pre akú operáciu nie je vhodná implementácia Listu java.util.LinkedList?

  5. Riešenie: Pre prístup do Listu na i-tú pozíciu.

  6. Čo vypíše nasledujúci kód z poľa String[] arr:
    System.out.println(new java.util.LinkedHashSet(java.util.Arrays.asList(arr)));

  7. 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.

  1. Demo aplikácia

  2. Dokončiť aplikáciu Demo, ktorú sme používali ako príklad.
    • 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
  3. Peer to peer zdieľanie súborov

  4. Web aplikácia, ktorá
    • 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
  5. Log viewer

  6. 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:
    • č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)

    Príklad logu: example.log

    Program môže byť spravený ako command-line alebo ako servlet s web-rozhraním.

  7. Connection pool

  8. 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:
    • 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)
    Tipy:
    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.

  9. Command-line utilita pre zipovanie a šifrovanie súborov

  10. Program má vedieť zozipovať:
    • 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
    Pri zipovaní má byť možné použiť Cézarovu šifru, t.j. posunúť každý byte o zadaný počet bytov. Tento posun sa má dať spraviť nezávisle na dvoch miestach. Prvé miesto je ešte pred samotným zipovaním, teda bude možné rozzipovať výsledok aj iným programom, ale obsah rozbalených súborov nebude čitateľný. Druhé miesto je už po zipovaní, teda výsledok nebude možné rozzipovať iným programom.
    Program má vedieť aj rozbaliť to čo zabalil, pričom ak zipoval adresárovú štruktúru, tak ju má zachovať po rozbalení.

  11. Mail klient (web-rozhranie)

  12. 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.