Szoftverfejlesztés J2EE platformon - Kidolgozott házi feladat

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 22., 11:40-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|J2EECarSharing}} %TOC{depth="3"}% ==Specifikáció== A szoftver célja egy olyan szolgáltatás megvalósítása, amelynek segítségé…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


%TOC{depth="3"}%

Specifikáció

A szoftver célja egy olyan szolgáltatás megvalósítása, amelynek segítségével egymásra találhatnak az egyedül utazó sofőrök és a társulni kívánó utasok.

Az alkalmazásban a következő funkciókat valósítottam meg:

  • Útvonal kijelölése térképen. A sofőrök a Google Maps segítségével adhatják meg, hogy milyen útvonalon haladnak.
  • Közös állomások kijelölése. Az adminisztrátor felvehet a nagyobb csomópontokba állomásokat, hogy a felhasználók számára kevesebb munkával járjon az útvonal kijelölése.
  • Időpontok kiválasztása. A sofőr megadhatja, hogy milyen időpont(ok)ban megy végig egy adott útvonalon
  • Keresés az útvonalak között. A felhasználó cím és időpont alapján keresheti meg azt az útvonalat, ami legközelebb áll a terveihez.
  • Jelentkezés utazásra. A felhasználó kiválaszthat egy útvonalat és megmondhatja, hogy egyedül vagy többedmagával akar utazni, és szöveges megjegyzést fűzhet a jelentkezéshez.
  • Jelentkezések menedzselése. A sofőr elfogadhat vagy visszautasíthat egy jelentkezést.

Szoftver környezet

A fejlesztés során a következő környezetet használtam:

  • NetBeans 5.5
  • Sun Java System Application Server 9
  • Microsoft SQL Server 2005 + JDBC Driver
  • CVS szerver a SourceForge.net-en

Bár a program Microsoft SQL Server alatt készült, csak szabványos SQL utasításokat használ, ezért elvileg bármilyen más adatbázis szerver alá átültethető.

Telepítés

  • Az sql\carsharing.sql tartalmazza az adatbázis sémát.
  • A carsharing-ejb\setup\microsoft_sqlPool.sun-resource file-ban kell beállítani az adatbázis kapcsolat paramétereit.
  • A Google Maps használatához ingyenes regisztráció szükséges. A jelenlegi regisztrációs kulcs a localhost:8080 alatt működik, ha máshonnan akarjuk futtatni, a carsharing-war\web\WEB-INF\jspf\GoogleMapsKey.jspf file-t felül kell írni.

Architektúra

Entity beanek

  • Users: a felhasználók alapadatait tartalmazza.
  • Station: állomások földrajzi koordinátáit és címét tartalmazza.
  • Path: útvonal, ami állomások sorozatából áll.
  • PathStation: kapcsolótábla a Path és a Station között, továbbá ez tartalmazza az útvonalon az állomások sorrendjét.
  • Route: útvonalhoz tartozó idő információk.
  • Carriage: ha egy felhasználó jelentkezik egy utazásra, ide kerülnek be a kapcsolódó információk. Itt tartjuk nyilván azt a flaget, amivel a sofőr visszajelezhet, hogy elfogadta-e a jelentkezést.
  • SearchResult: nem entity bean, csak sima bean. A web service-szel megvalósított keresés eredménye adódik vissza SearchResult tömbben.

Session beanek

A metódusokat szerep (szükséges jogosultsági szint) szerint csoportosítottam session beanekbe.

PassengerBean
  • checkLogin(): bejelentkezéskor ellenőrzi a jelszót.
  • createUser(): regisztrál egy új felhasználót.
  • search(): végrehajt egy keresést. A keresőkifejezés tartalmazhatja a kiindulási és a cél címet, és lehet időintervallumra szűkíteni.
  • findRoutesBetween(): egy útvonalhoz keresi meg az időpontokat egy adott időintervallumban.
  • getRouteInfo(): egy konkrét útvonal-időpont párhoz gyűjti ki a kapcsolódó információkat.
  • applyForRoute(): jelentkezés utazásra.
  • deleteApplication(): jelentkezés törlése.
DriverBean
  • insertStation(): felvesz egy új állomást.
  • updateStation(): módosítja egy állomás adatait.
  • deleteStation(): töröl egy állomást.
  • findPathsByOwner(): kikeresi egy adott felhasználó útvonalait.
  • findStationsOnPath(): részletez egy adott útvonalat.
  • insertPath(): létrehoz egy útvonalat.
  • updatePath(): módosít egy útvonalat.
  • deletePath(): töröl egy útvonalat.
  • insertRoute(): felvesz egy időpontot egy útvonalhoz.
  • updateRoute(): módosítja az időpontot.
  • deleteRoute(): törli az időpontot.
  • findApplicantsByDriver(): kikeresi azokat a felhasználókat, akik egy adott sofőr útjaira jelentkeztek.
  • acceptOrRefuse(): elfogad vagy elutasít egy jelentkezést.
AdminBean
  • listAllUsers(): felsorolja a felhasználókat.
  • isAdmin(): megállapítja egy felhasználóról, hogy admin-e.
  • deleteUser(): töröl egy felhasználót.
  • exportDatabase(): az adatbázis tartalmát SQL scriptbe menti.

Szervletek

  • Application: jelentkezés a kiválasztott útra.
  • ChoosePath: felsorolja a sofőr által felvett útvonalakat, és megjeleníti térképen. Tovább lehet lépni az állomások vagy útvonalak szerkesztéséhez.
  • ChooseRoute: egy útvonalhoz felsorolja az időpontokat, és tovább lehet lépni a jelentkezéshez.
  • EditFixedStations: az admin itt tudja szerkeszteni a beépített állomásokat.
  • EditPath: itt kötheti össze a sofőr az állomásokat útvonallá grafikus felületen.
  • EditStations: új állomások felvétele, a meglévők átmozgatása vagy a cím módosítása.
  • EditTime: egy útvonalhoz itt lehet indulási időpontokat hozzárendelni.
  • ExportDatabase: az adatbázis tartalmát INSERT parancsokra fordítja és lementi SQL scriptbe. Mivel a reflection nem működött EJB-s annotációkra, nem garantált, hogy helyesek lesznek az oszlopnevek.
  • ListApplicants: felsorolja a jelentkezőket egy sofőr útjaira. Itt lehet elfogadni vagy visszautasítani a jelentkezést.
  • ListApplications: felsorolja egy felhasználó jelentkezéseit.
  • ListUsers: felsorolja a regisztrált felhasználókat, és lehetőséget biztosít törlésre.
  • Login: belépteti a felhasználót és átirányítja a megfelelő oldalra. A bejelentkezett felhasználó azonosítóját webes session-ben tárolom.
  • Logout: kilépteti a felhasználót.
  • Register: felhasználó regisztrációs form.
  • Search: keresés az útvonalak között. A találatokhoz ki lehet választani az ideális időpontot és utána lehet jelentkezni az útra. A keresés web service-ként is meg van valósítva, ilyenkor egy SearchResult[] tömbbel tér vissza.
Tools.java

A szervletekben gyakran használt közös funkciókat implementáltam itt.

  • konstruktor: beállítja a karakterkódolást.
  • getIntParam(): parse-ol egy int típusú HTTP GET paramétert.
  • checkLogin(): ellenőrzi, hogy be van-e jelentkezve a felhasználó, illetve szükség esetén azt is, hogy van-e admin joga.
  • doRedirect(): a szervletről átirányít a jsp-re, vagy egy másik szervletre, miközben megtartja a query stringet.
  • parseTime(): egy stringet dátumként értelmez.

Megjelenítés

A webes megjelenítési réteg tisztán jsp alapú. Fontos szempont volt a jsp oldalak írásánál, hogy minél kevesebb logika kerüljön beléjük. A bonyolultabb számításokat szervletek vagy Tag Handlerek végzik. Az utóbbiak hívják a session beaneket is. Tipikusan a térképekkel kapcsolatos, sok helyen ismétlődő műveleteket emeltem ki tagekbe.

Filterek

Filtert csak arra használtam, hogy megakadályozzam a jsp oldalak közvetlen letöltését. A jogosultságkezelés túlzottan összetett ahhoz, hogy filterek szintjén kezelni lehessen, ezért a szervletek elején ellenőrzök, és szükség esetén átirányítom a felhasználót a bejelentkező oldalra.

Javascriptek

A térkép kezelését 4 Javascript file-ba szedtem szét.

  • map.js: közös megjelenítés és eseménykezelés.
  • stations.js: állomások szerkesztése. A szervernek csak a változásokat küldi el, úgy történik a szinkronizáció.
  • viewpath.js: térképen útvonal megjelenítésével kapcsolatos függvények
  • editpath.js: útvonal szerkesztése.

Az állomások és az útvonalak inicializálását jsp tagek segítségével generált Javascript végzi. A térkép működését az határozza meg, hogy a 4 .js file-ból melyeket töltjük be, és melyik inicializáló modult hívjuk meg.

Forráskód

A forráskód letölthető

Ezen a helyen volt linkelve a(z) carsharing.zip nevű fájl ("innen" link szöveggel) a régi wiki http://wiki-old.sch.bme.hu/bin/view/Valaszthato/J2EECarSharing oldaláról. (Ha szükséged lenne a fájlra, akkor a pontos oldalmegnevezéssel együtt küldd el a wiki
Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni
@sch.bme.hu címre a kérésedet)
vagy a http://sourceforge.net/projects/carsharing/ oldalról anonim CVS-en keresztül.

-- Peti - 2007.12.15.