====== 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 )