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.

<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>
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:

<?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

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.

<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" />
  • 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.

<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.

  • Bérelt szoftver használatának befejezése (HTTP/POST):

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.

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 )

 
tanszek/munka/design.txt · Last modified: 2006/10/19 18:20 by nehez
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki