Házi feladat, 3. fázis -- a PGY3 tantárgy hallgatói számára

Komplett 3 rétegű alkalmazás elkészítése



Határidő: 2011 december 31.

Ez a házi feladat a PGY2/PGY3 tanulmányok koronája: a februárban készült specifikációja alapján elkészít egy komplett, a korszerű Java WEB-es technológiák valamelyikén (JSF-Ajax. IceFaces, GWT, ZK) alapuló alkalmazást (a hagyományos JSF nem tartozik ezek közé, csak végszükség esetén válassza egy nem teljes értékű megoldásként).

Szánjon rá jó szívvel és becsülettel időt, hogy megismerkedjen ezekkel, mert ha Ön a szakmában helyezkedik el -és különösen, ha nem egy kisvállalkozásnál fejleszt PHP-t és VB.NET-et-, legalább 75% a valószínűsége, hogy ezeket az eszközöket és technológiákat egy éven belül használni fogja!

A feladathoz az órai segédanyagok csak madár-perspektívájú bevezetők; most az a feladat, hogy testközelből is megismerkedjen a tag-ekkel, Java interfészekkel, package struktrákkal. A Web-en rengeteg hasznos példát, tutoriált, dokumentációt talál.

Ezen túl is bármilyen koncepcionális vagy konkrét problémával nyugodtan keressenek meg, próbálunk segíteni!

Felhívom a figyelmet, hogy a feladatot megoldhatják olyan technológiákkal is (fejlesztőeszközökkel, ill. web-frameworkokkel is), amelyeket nem tanultunk, de

Ez semmiképp nem csökkenti a megoldás értékét! Számítani kell azonban arra, hogy ha bajba kerülnek a megvalósításnál, ezeknél nem fogjuk tudni Önöket támogatni. (Természetesen az ilyen választásnál is el kell készíteni a Web-es teszt eseteket, dokumentációt, stb.)

A határidővel kapcsolatban ügyeljenek arra, hogy nem sokat csúszhatnak, mert legkésőbb január 8-a körül mindenképpen meg kell kapniuk a gyakorlati jegyeket! Ha Január 7-éig beadják a feladatukat, akkor garantálom, hogy ebből nem lesz gond.

Fő házi feladat:

  1. Fejlessze ki a tavasszal írt alkalmazás komplett Web rétegét, a tavaszi requisite-pro specifikációnak megfelelően.

  2. Telepítse az alkalmazását az IKKK központi szerverre (157.181.176.143).

  3. Az alkalmazás forrásainak verziókezelésére, (ill. beadására) használja a a központi szerveren található Subversion repository-t (ld alább). Ügyeljen arra, hogy az összes forrás ill. generált dokumentációs file felkerüljön!

  4. Készítsen HTTP Unit testcase-eket , ami a belépés mellett legalább egy funkciót ellenőriz! Alternatívaként használhatja a Selenium-ot vagy más hasonló eszközt is, különösen, ha valamilyen Ajaxos technológiát használ.

  5. Készítsen felhasználói dokumentációt , amely tartalmaz egy

  6. Készítsen fejlesztői dokumentációt HTML oldalak formájában, amely az alábbiakat tartalmazza

  7. A feladat beadását egy emailben jelezze . Ha a fenti dokumentáció elkészült, már csak egy dolgot kell a mailben elküldeni: a tesztelésre használható userek belépési információját .

  Opcionális feladat

  1. Egy Hiányzó KisZH-t teljes értékben (100%) pótolhat azzal, ha feladatához elkészíti azokat az ant build scripteket, amely a forrásokból és a ivy technológiával biztosított jar-okból elkészíti a kész, telepíthető alkalmazást. (Készítsen egy rövid leírást is egy ilyen build környezet telepítésére és futtatására.)

SSH hozzáférés az IKKK szerverhez



Minden hallgató be tud lépni SSH-val az IKKK szerverre, és ott korlátozott környezetben (restricted shell-ben) tud dolgozni. Aki addig nem állította át, vagy elfelejtette a passwordjét, az kérjen tőlem. Az alábbi parancsokat lehet használni:

Az alkalmazás telepítése az IKKK Weblogic szerverre

Eddig az alkalmazást a Run/Debug parancsokkal indították és a JDeveloper mellé telepített WebLogic szerverben futott. Ahhoz, hogy egy másik alkalmazásszerverbe telepítsük, az alkalmazást ú.n.deploy művelettel telepíteni kell arra a szerverre is. A JDeveloper általában támogatja az IDE-ből történő telepítést, de ezt esetünkben nem alkalmazhatjuk, ui. még az adatbázis kapcsolat passwordjének problémáját el kell rendezni..

Az automatikus telepítés lépései elméletileg az alábbiak lennének:

  1. A kapcsolatok között fel kell venni a cél alkalmazásszervert - hasonlóan egy adatbázisszerver kapcsolathoz.

  2. Készíteni kell három .deploy kiterjesztésű telepítésvezérlő file-t: Ezek készítését az IDE támogatja (a projektet kiválasztva: New... Deployment Profiles - > EAR/WAR/EJB JAR file)

  3. Az Application/Deploy pranccsal, vagy az EAR deployer kontext menüjéből egyetlen gombnyomással telepíthető az alkalmázás. Ez egyrészt az EAR felmásolását jeleni a szerverre, másrészt az alkalmazás telepítését a szerverbe, harmadrészt pedig a Web réteget hozzá kell kötni a szerverhez konfigurált webszerver-példányok valamelyikébe (binding).

Ehhez képest a gyokoralatban a következő lépéseket kell végrehajtani:

</properties> <-- ez egy létező sor -->
<password-encrypted>{AES}xxxxx</password-encrypted>
<--
<password-indirection>true</password-indirection> ezt kell kiszedni -->
Az xxxx természetesen csak egyjelzése annak hogy oda be kell írni az encryptált passwordot. Ezt Önöknek is a szerveren kell generálni (ui. a szerver saját kulcsa felhasználásával készül), úgy kogy lefuttatják ott a következő parancsot:
weblogic-deploy -encrypt password
Az így módosított file-t vissza kell tömöríteni az EAR-be, és az egészet fel kell másolni a szerverre.


Az alkalmazás telepítése az IKKK Tomcat szerverre

A tomcat telepítés annyiban egyszerűbb, hogy itt nem kell annyit bajlódni a security-vel, hiszen itt az adatkapcsolatot is a Web-alkalamzásba csomagolva kell megvalósítani. (Ne felejtsük, hogy ez csak egy web-alkalmazás-szerver, azaz EJB-kről és a container által biztosított perzisztencia rétegről le kell mondani!)
tomcat-deploy <warfilename> <context-root>
Az alkalmazását ezek után itt találja majd meg: http://telco.ikkk.inf.elte.hu:9090/<context-root>

Az IKKK szerver Subversion szolgáltatásának használat
1. Töltse le a tantárgyi weblapról és telepítse fel a JDeveloper Subversion bővítését (Help / Check for Updates... / Install from Local File...
Ez a kiterjesztés lehetővé teszi, hogy filejainkat a JDeveloperből közvetlenül betegyük a repositoryba
 
2. A Subversion Navigator ablakban lehetőség van egy vagy több repository felvételére. Az Ön repositoryja
'https://telco.ikkk.inf.elte.hu/pgy2svn/AAABBBT' , ahol AAABBBT az Ön userneve (amit mailben kiküldtünk)
A usernevét és a hozzátartozó passwordot kell használnia a csatlakozáshoz.
3. Még mindig a navigátorban maradva, készítsen egy "trunk" nevű alkönyvtárat a repositoryban. SVN hagyományok szerint ide szokás rakni az aktuálisan fejlesztett verziót, (míg az esetleges branch-okat a "branches" alkönyvtárba). Aki a korábbi félévben már használta a repository-t legjobb, ha verziókezelési szempontból folytatja a projektet és nem kreál egy újat. (VIszont gondoskodjon arról, hogy az esetleges felesleges fileok törlődjenek a repositoryból.)
4. Legegyszerűbb, ha a teljes alkalmazását egy lépésben beimportálja a repositoryba. Az importálandó könyvtárstruktúráról készítsen egy biztonsági másolatot (pl. ZIp file-t)!
A navigátorban az alkalmazás ikonjának context menüjében Versioning / Import Files wizardot kell elindítani.
- célként a trunk könyvtárat válassza a repositorijában.
- forrásként az alkalmazás gyökérkönyvtára jelenik meg, ez jó így.
- megjelenik egy ablak, amelyen beállíthatók azon file minták, amiket nem akarunk repositoryban tárolni. Ez általában jó, ahogy van.
- a "perfrom checkout" opciót célszerű kiválasztani, mert ezáltal filejaink nemcsak bekerülnek a repositoryba, de a lokális fileok automatikusan egy valódy working copy-vá válnak, a szokásos verziókövetési funkciókkal. (Az eredeti könyvtárról közben készül egy biztonsági másolat is xxx.svn-import-backup, vagy xxx.svn-import-workarea1 néven.)
 
5. A filejai ezennel verziókezelés alatt állnak, és természetesen aktualizáltak a repositoryhoz képest. További teendő csak akkor van, ha módosítja a filejait, vagy új fileokat ad a rendszerhez.
- Új fileokat, könyvtárakat előszőr az Add művelettel kell a verziókezeléshez hozzáadni.
- Módosítás esetén a Commit műveletet kell használni.
6. Ellenőrizze a repository tartalmát úgy, hogy a Subversion Navigatorral készít egy másik könyvtárba egy checkout-ot, felveszi azt egy másik alkalmazásként, és megpróbálja azt fordítani és futtatni.
Ügyeljen arra, hogy amikor készre jelenti az alkalmazását, minden forrás a legjobb verziójában be legyen commit-elve a repository-ba! Arra is figyeljen viszont. hogy a nem-forrás fileok (pl. class-ok, jar-ok) vszont ne kerüljenek oda fel, mert azonak nincs ott helyük!
A munkájának az ellenőrzését ott fogjuk elvégezni!
Megjegyzések
Ha elakadt JDeveloper subversion-jével, vagy attól függetlenül akar verziókezelni, használhatja pl. a Tortoise SVN interfészt , ami a Windows interfészbe integrálja ugyanezeket a funkciókat. Természetesen egy hagyományos command-line "svn" is használható - ilyet talál pl. a PGY2 szerveren is. Ezek a kliensek mind ugyanazokat a logikai funkciókat nyújtják!
Mi a teendő, ha egy összekuszálódott repository helyett tiszta lappal szeretne indulni?
 
JUnit/HTTPUnit telepítése és használata
1. JUnit Töltse le a tantárgyi weblapról és telepítse fel a JDeveloper JUnit bővítését (Help / Check for Updates... / Install from Local File...) Ez a JUnit kiterjesztés lehetővé teszi, hogy a JDeveloperben TestSuite-okat készítsünk.
A File / New... /General / Unit Tests (JUnit) szekvenciával generálhatunk a JUnit objektumokat. Nekünk kezdetben csak Test Case-re lesz szükség, később esetleg ha van több Test Case, akkor azokhoz egy Test Suite-ot is készíthetünk.
A JUnit interfésze a közelmúltban jelentősen megváltozott - nem biztos, hogy előnyére. Az új verzió lényege az, hogy a metódusnevekbe kódolt funkciók helyett a Java 5 annotációs mechanizmusát használja. Az alábbiak a korábbi (3.8-as) verziójú interfészt mutatják be, amelyet Ön is kiválaszthat a tesztesetek generálásánál!
A Test Case osztályba tetszöleges mennyiségű tesztelő methódust írhatunk, amelyek az alábbi formát kell, hogy kapják. A példa bemutatja a legygyakoribb teszt függvény, a testTrue használatát is
public void testAAABBBCC() throws Exception {
        testTrue("Hibásszámitás",Math.sqr(2) == 4);
}
Az elkészített TestCase fileok a Run... context-paranccsal, egyenként indíthatók (de agy TestCase magában akár nagyszámú testXxxxx teszt-metódust is meghívhat)..
A megjelenő JUnit státusz ablak tartalmazza a tesztek lefutásának sikerességét (zöld), vagy kudarcát (piros).
--
2. HTTPUnit A Web-alkalmazás teszteléséhez a JUnit tesztCase java fileokba ugyanígy testXXX metódusokat kell definiálni, és a tesztelés ugyanígy a JUnit mechanizmussal történik. A különbség mindössze annyi, hogy ítt az webes oldalak lekéréséhez, értelmezéséhez, elküldéséhez egy külön könyvtárt, a httpUnit-ot kell használni. A Project Settings / Libraries listába fel kell venni legalább a követhező jar-okat: httpUnit.jar, js.jar, Tidy.jar (mind részei a HTTPUnit zipfile-nak)
A httpUnit-tal használható főbb osztályok:
A tantárgyi oldalról letölthető httpUnit.zip bőséges dokumentációt is tartalmaz. További részletek helyett álljon itt egy példa teszt metódus:
public void testGoodLogin() throws Exception {
    webConversation conversation = new WebConversation();
    WebRequest request = new GetMethodWebRequest( "http://157.181.176.143:8888/PGY3TechSelect/login.jsp" ); 
    WebResponse response = conversation.getResponse( request ); 
    WebForm loginForm = response.getForms()[0]; 
    loginForm.setParameter( "uname", "smith" ); 
    loginForm.setParameter( "pwd", "bingo" ); 
    response = loginForm.submit(); 
    assertTrue( "Login not accepted", response.getTitle().startsWith("techselect") ); 
    assertTrue( "Person not shown in welcomem message", response.getText().indexOf("Smith ") != -1 ); } } 
}