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
Java alapúak
AJAX technológiát támogató frameworkon készülnek (pl. ExtJS)
Amelyet fel lehet telepíteni az IKKK szerveren működő weblogic vagy tomcat szerverre.
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:
Fejlessze ki a tavasszal írt alkalmazás komplett Web rétegét, a tavaszi requisite-pro specifikációnak megfelelően.
Tetszése szerint használhatja a használhatja a JSF-AJAX, IceFaces, GWT, ZK technológiák valamelyikét, vagy egy, ezekhez hasonló más technológiát . Mivel az utóbbiakat az órán nem tárgyaltuk olyan részletesen, igény esetén fakultatív konzultációt tartunk ebből.
Ajánlott dokumentáció:
A hivatalos Java EE dokumentációból különösen 10. ill. esetleg a 3.-6., 8.-11., 20.-22. ill. 24.-27. fejezetek
Az Oracle a WebLogic Serverhez szinte zavarbaejtően sok dokumentáció érhető el
Commentezze a Java filejait. Általában elegendő egy-egy tőmondatnyi (summary) komment minden metódushoz, ill. a paraméterek és a visszatérő érték jellemzése, de ahol bonyolultabb a helyzet, ott legyen több. A generált entity-khez és a property accessor (setter/getter) metódusokhoz nem kell komment.
A javadoc kommentezést az IDE segíti: csak el kell kezdeni a /** jeleket egy új sorban, és ő legenerálja a komment vázát.
Telepítse az alkalmazását az IKKK központi szerverre (157.181.176.143).
Az alkalmazás ekkor már kötelezően az előadásokon ismertetett központi adatbázist kell, hogy használja (a fejlesztés ideje alatt más adatbázis is használható). A telepítésre vonatkozó útmutató a következő fejezetben található.
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!
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.
Készítsen felhasználói dokumentációt , amely tartalmaz egy
Általános ismertetőt az alkalmazásról, mire szolgál, mi a jellemző működése (azaz a leggyakoribb használati esetek), stb.
Használati útmutatót, szükség esetén az egyes felhasználókra lebontva.
Amit még szükségesnek lát.
Generáljon a fentiekből egy gusztusos PDF-et, címlappal és tartalomjegyzékkel.Tegye fel ezt is az IKKK szerverre, a web-alkalmazás részeként. (Ehhez csupán a telepítés előtt a projektbe a JSP-k mellé be kell rakni a PDF-et). Linkelje be a dokumentumot az alkalmazásából!
Készítsen fejlesztői dokumentációt HTML oldalak formájában, amely az alábbiakat tartalmazza
Adatbázis táblák és egyéb objektumok leírása, ill. egy, a tervezőrendszerből kimásolt ábra.
Az objektum-relációs mappelésnél elég a tábla - entitás párokat felsorolni, és csak azt részletesebben kell leírni, ahol a leképezés nem triviális (pl. adatípusok változnak). Ugyancsak sorolja fel a default, ill. az Ön által definiált named queryket.
A Session Facade-ot JavaDoc-kal kell dokumentálni, és a dokumentációba ezt be kell linkelni (ld. alább)
A web alkalmazásnál egyrészt el kell készíteni az összes java file JavaDoc-ját, ill. egy diagramot, ami a JSP-k logikáját mutatja (JSF esetén ez a faces-config.xml grafikus megjelenése). Ravaszabb JSP kód esetén a JSP oldalakról is lehet írni (pl. hogy mikor melyik Bean-t, mire használja).
A fenti saját és generált fileokat rendezze egy központi "index.html" alá, ami segít az utókor fejlesztőinek az Ön munkáján eligazodni. Tegye fel az egészet az IKKK szerverre a web-alkalmazás részeként. (Ezt normálisan nem illik belinkelni, de most tegye meg).
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
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:
weblogic-deploy script a Weblogic környezetbe történő telepítéshez.
tomcat-deploy a tomcat war-ok telepítéséhez.
ls, rm, stb. (unix parancsok)
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:
A kapcsolatok között fel kell venni a cél alkalmazásszervert - hasonlóan egy adatbázisszerver kapcsolathoz.
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)
Egy "WAR file" típusút a Web alkalmazás projektjébe.
Egy "EJB-JAR" típusút az EJB projektbe
Egy "EAR File" típusút. Ez utóbbi újabban az az alkalmazáshoz készítendő, azaz a "New" az alkalmazás nevének kontet menüjéből indítandó. Az EAR-nál be kell állítani, hogy összeállításakor foglalja magában a másik két ".deploy" file által készített EJB JAR, ill. WAR komponenseket. Ugyancsak be kell jelölni, hogy az adatbázis-kapcsolat leíróját (xxxx-jdbc.xml) is kérjük az ear-be generálni. Az alkalmazás "platform"-ja mellett be kell állítani az 1. pontban létrehozott alkalmazásszerver-kapcsolatot.
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:
Az első lépést ki lehet hagyni, ui. az távoli WebLogic adminisztrátori azonosítói Önök számára nem ismertek.
A második lépés változatlan, de az utolsó pontban csak a platformot kell beállítani Weblogic10.3-ra.
A harmadik lépésnél nem kell tényleges telepítést kérni, csak a " deploy to EAR file "-t.
Az elkészült EAR file tartalmaz egy META-INF/xxxxx-jdbc.xml nevű file-t. Ezt ki kell csomagolni, majd be kell rakni az alábbi sort (és kiszedni egy másikat):
</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.
A szerveren a weblogic-deploy scriptet kell meghívni. A telepítéshez meg kell adni egy "appName" paramétert, amely kötelezően a login névvel (tehát az ETR névvel) kell, hogy kezdődjön. Így valósul meg az egyes hallgatói projektek szétválasztása. Ugyancsak megadandó egy a nevezési szabálynak megfelelő "contextRoot" is, ami az a prefix, ahol az Ön alkalmazása elérhető lesz. Pl ha a parancs ez: weblogic-deploy -deploy -name <appname> -source <earfilename> -contextRoot ABCABCTapp Akkor az URL akol az alkalmazása megjelenik ehhez hasonló lesz: http://telco.ikkk-.inf.elte.hu:7001/ABCABCTapp/faces/login.jsp
Ha az alkalmazást el akarja távolítani, az alábbi parancsot kell futtatni: weblogic-deploy -undeploy <appname> Probléma esetén célszerű ezt futtatni a telepítés előtt..
Az elepítés sikerességnek ellenőrzésére rendelkezésre áll a http://telco.ikkk.inf.elte.hu:7001/console alatt (user: wlm , password: wlmonitor ) elérhető Weblogic menedzsment konzol, ahol (mindenekelőtt a Deployments funkcióban) ellenőrizni lehet az alkalmazások telepítésének sikerességét.
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?
Készítsen egy biztonsági másolatot a lokális filejairól
A Subversion navigátorból törölheti a repository egészét vagy egy részét. Ha nem végez commit-ot akkor a lokális fileok nem változnak.
Ha ezután a lokális working directory minden szintjén kitörli a .svn directorykat, akkor lényegében visszaállította az eredeti, "verziókezeletlen" állapotot. Természetesen e helyett kibonthatja valamelyik mentett archívumát.
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:
WebConversation conversation = new WebConversation();az első "gyökér" HTTPUnit objektum, amiből a többi készül majd.
WebRequest request = new GetMethodWebRequest( "http://host/app/login.html" ); a request-tel tudunk konkrét web kérést készíteni.
WebResponse response = conversation.getResponse( request ); az elküldött kérdésre így kapunk választ, legtöbbször egy HTML oldalt.
WebForm loginForm = response.getForms()[0]; A válasz HTML adatainak szétbontása után kiválasztahtók annak szemantikai részei, pl. form-ok a html fileban.
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 ); } }
}