A felhasználó adatait tartalmazza:
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.
Ennek a táblának 1 sora lesz ami a kategóriákat tartalmazó XML. Minden elem kulcsérték.
<categoryTree> <node name = "CATEGORYTREE.GAMES"> <node name = "CATEGORYTREE.GAMES.ACTION"> <node name = "CATEGORYTREE.GAMES.ACTION.3D" /> <node name = "CATEGORYTREE.GAMES.ACTION.2D" /> </node> <node name = "CATEGORYTREE.GAMES.RPG" /> <node name = "CATEGORYTREE.GAMES.STRAT" /> </node> <node name = "CATEGORYTREE.CAD"> <node name = "CATEGORYTREE.CAD.PROENGINEER" > <node name = "CATEGORYTREE.CAD.PROENGINEER.13" /> <node name = "CATEGORYTREE.CAD.PROENGINEER.14BETA" /> </node> <node name = "CATEGORYTREE.CAD.CATIA" /> <node name = "CATEGORYTREE.CAD.PRODESKTOP" /> </node> </categoryTree>
ID | locale | value |
---|---|---|
CATEGORYTREE.GAME | en | Games |
CATEGORYTREE.GAME | hu | Játékek |
CATEGORYTREE.GAME.ACTION | hu | Akció játékok |
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:
<?xml version="1.0" encoding="UTF-8"?> <SoftwareProduct title="Pro/Engineer 13" category="CATEGORYTREE.CAD.PROENGINEER.13" homePage="http://www.proenginner.com" bigThumbnail="" downloadLink="ftp://sajat.hu/valami" credit="5" > <shortDescription>Pro/Engineer is a good software</shortDescription> <longDescription>Pro/Engineer is a good software, a very good one!</longDescription> </SoftwareProduct>
A leírás xml-e a következő: TODO
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 |
A kliensoldali futtató alkalmazás kéréseit egy szervlet fogja fogadni. A szervlet 3 féle parancsra reagál:
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.
<message response="ok" transactionId="1234afsd" code="ASBVDGSFSGAVAG==" /> <message response="failed" errorCode="12" errorMessage="Authentication failed" /> <message response="failed" errorCode="13" errorMessage="Not enough credits to start this application" /> <message response="failed" errorCode="14" errorMessage="Application not available" />
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.
<message response="ok" /> <message response="failed" errorCode="14" errorMessage="Not enough credits." />
(gy) Talán a sokadik verzioban érdemes lenne bevezetni egy harmadikat: “Server is down” - karbantartás, egyéb hiba esetén jol johet.
Kérés:
SotwareShop/servlet/rentalService&command=stop&transactionId=123456asdcvb
Válasz:
<message response="ok" />
(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.
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 |
transactionId | lastPingTime | lastPaidTime |
---|---|---|
456542 | 2006.10.10 12:12:10 GMT | 2006.10.10 12:12:10 GMT |
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.
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.
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 )