====== DB design ====== === Táblák === == user == A felhasználó adatait tartalmazza: == role == A felhasználó szerepét tárolja. Ez majd nem 1-1 összekötés lesz, de ebben a változatban megfelel. n:m megfeleltetés kell majd kapcsoló táblával, de akkor a JAAS elérés is változni fog a login-config.xml-ben. == categoryTree == Ennek a táblának 1 sora lesz ami a kategóriákat tartalmazó XML. Minden elem kulcsérték. == ResourceBundle == ^ ID ^ locale ^ value ^ | CATEGORYTREE.GAME | en | Games | | CATEGORYTREE.GAME | hu | Játékek | | CATEGORYTREE.GAME.ACTION | hu | Akció játékok | == DescriptionList (product list) == ^ ID ^ category key ^ locale ^ data xml ^ Code ^ | 1 | CATEGORYTREE.GAME.ACTION.2D | en | xml leírás az 'A' elemről | adadas6325asdtas= | | 2 | CATEGORYTREE.GAME.ACTION.2D | hu | xml leírás az 'B' elemről | asdasdads== | | 3 | CATEGORYTREE.CAD.PRODESKTOP | en | xml leírás egy elemről | fsdjh76tewg== | | 4 | CATEGORYTREE.CAD.PROENGINEER.14BETA | en | xml leírás egy elemről | asdaskjdhaskd== | Az 'code' oszlop egy base 64 kódolással tárolt kód (vagy adat), amely segítségével a kliens elindítja a futtatható állományt. Egy példa az xml leírásra: Pro/Engineer is a good software Pro/Engineer is a good software, a very good one! A leírás xml-e a következő: TODO == Search index == Az index táblában gyorsan lehet a rövid , valamint a hosszú leírásokban keresni. De minden változásnál updatelni kell. ^ key ^ locale ^ title sort_desc long_desc ^ | 2 | hu | rövid leírás hosszú leírás | ====== Szerver oldali számlázási kommunikáció ====== A kliensoldali futtató alkalmazás kéréseit egy szervlet fogja fogadni. A szervlet 3 féle parancsra reagál: * Bérelt szoftver használatának elindítás (HTTP/POST): Kérés: SoftwareShop/servlet/rentalService&command=start&userName=user&password=pwd&softwareID=xxxx Válasz: Alapvetően kétféle válasz lehet: ok vagy failed. A code attributum Base64 kódolással lesz küldve a kliensnek. Az errorMessage attributum tartalmát ki kell iratni. * Bérelt szoftver használatának nyomonkövetése azaz "PING" (HTTP/POST): Kérés: SotwareShop/servlet/rentalService&command=ping&transactionId=123456asdcvb Válasz: Alapvetően kétféle válasz lehet: OK vagy Failed. Az errorMessage attributum tartalmát ki kell iratni. Ha az üzenet 'failed' akkor ki kell léptetni a felhasználót a kliens oldalon. **(gy)** Talán a sokadik verzioban érdemes lenne bevezetni egy harmadikat: "Server is down" - karbantartás, egyéb hiba esetén jol johet. * Bérelt szoftver használatának befejezése (HTTP/POST): Kérés: SotwareShop/servlet/rentalService&command=stop&transactionId=123456asdcvb Válasz: **(gy)** Ide mindenképpen hasznos lenne ha a kliens el tudná kuldeni a log adatait is. A jelenlegi felllásban a kliens monitorozhatatlan, debuggolhatatlan. A kliens oldali extrém esetekre jo lenne egy olyan kapcsolatlezárás ami valami log dump ot is feltolt a szerverre. ====== Szerver oldali számlázás működése ====== ====== DB Táblák ====== ==== Transaction ==== ^ transactionId ^ username ^ softwareId ^ usageStart ^ usageEnd ^ credits ^ message ^ | 12345 | user1 | 12 | 2006.10.10 12:12:10 GMT | 2006.10.10 13:12:10 GMT | 34 | session close: normal | | 12345 | user1 | 12 | 2006.11.10 12:12:10 GMT | 2006.11.10 14:12:10 GMT | 44 | session closed: insufficient credits | | 12345 | user1 | 12 | 2006.11.10 12:12:10 GMT | 2006.11.10 14:12:10 GMT | 44 | session closed: lost ping | ==== CurrentTransaction ==== ^ transactionId ^ lastPingTime ^ lastPaidTime ^ | 456542 | 2006.10.10 12:12:10 GMT | 2006.10.10 12:12:10 GMT | ====== Részletes működés ====== ==== szervlet ==== A szervlet, sikeres authentikáció esetén, beír egy sort a 'transaction' és 'currentTransaction' táblákba. A 'transaction' táblában a következő oszlopokat nem tölti ki: záróidőt, kredit. A 'currentTransaction' táblában a lastPingTime és lastPaidTime értéket az aktuális szerver időre állítja. A szervlet a 'ping' fázisban csak a 'currentTransaction' táblába ír, felülírva a lastPingTime értékét. update currentTransaction set lastPingTime=currentDate() where transactionId=? Amennyiben az update nem sikrül, ez azt jelenti, hogy a usernek elfogyott a kreditértéke és a JMX bean kitörölte a 'currentTransaction' táblából a sort. Ekkor a szervlet kitölti a 'transaction' tábla még ki nem töltött oszlopait. És a megadott hiba visszatér. Csak a kredit elfogyás esetén lesz törölve a 'currentTransaction' tábla adott sora. A szervlet a 'program használat befejezése' fázisban kitölti a 'transaction' tábla még ki nem töltött oszlopait, és kitörli a 'currentTransaction' táblából a megfelelő sort. ==== JMX bean ==== A JMX bean feladata a kredit értékek fogyasztása. A számlázás másodperc alapú, (float érték fogja tárolni). A JMX bean minden 30 másodpercben lefut. A 'currentTransactions' táblában minden sorra kiszámítja a kredit érték fogyást és beírja a 'user' táblába és a transactions táblában pedig hozzáadja a használat értékéhez. A lastPaidTime osztlopot az aktuális időre update-eli. Ha elfogyott a kreditérték, akkor kitörli a tranzakciót a 'currentTransaction' táblából. === Kredit fogyás számítás === A JMX bean a lastPaidTime érték alapján kiszámolja az eltelt másodperceket, majd a szoftverhez adott kreditértékkel kiszámítja a fogyás mennyiségét. A fogyás legyen float érték, mert ezzel pontosabbá válik a számítás. Amennyiben a lastPinged érték a szerver órától egy adott mértékben eltér, akkor valószinüleg a 'ping' elveszett. Ekkor is töröljük a tranzakciót és a tranazkciót lezárjuk (hibaüzenettel). Használat lehet órában vagy percben meghatározva. 1 perc = 60 másodperc = 60000 ms 1 óra = 360 másodperc = 360000 ms Ha órában számolunk: költség = ([egység kreditár [Ft/óra]] * (használati idő [ms] / 360000 ) Ha percben: költség = ([egység kreditár [Ft/perc]] * (használati idő [ms] / 60000 )