2009. április 18., szombat

Google App Engine és a "Key"

Mi nap, úgy néz ki, hogy befejeztem az app engines alkalmazásom alap UI-át, meg eljátszottam a nemrég megírt XML-to-UI progimmal és hát akkor elkezdtem csinálni a wiki rendszer sava-borsát...

Ugye nem árulok zsákbamacskát, ha elárulom, hogy szükségem lesz a Datastore API-ra, hiszen nyilván szeretnénk adatokat megőrizni, pl. magukat a wiki oldalakat.

Fater a minap mesélt az UUID-ről (végre tudom mik azokat a csúnya GUID-k a Visual Studio projektfájljaiban) és gondoltuk, hogy szuper lenne ez a wiki rendszerben is. Több előny is van (teljesség igénye nélkül):
  • Az alkalmazás generálja magának az ID-t, nem pedig az adatbázistól kérjük le, ez eléggé hasznos tud lenni, illetve alkalom adtán megspórolunk egy lekérdezést
  • Ha netalán-tán export-importra lesz szükség (miért ne lenne? egy kis backup?), akkor nem kell tökölni az ID-kkal, hogy most a két adatbázis különbözik, mi legyen, hogy legyen, minden kapcsolatot egyeztetni... Egy az egyben mehet az import. Kicsi az esélye a konfliktusnak.
Nah igen, és ezt hogy tehetnénk be Google App Engine alá? Gondoltam magamban, nagyon egyszerű: generálunk egy java.util.UUID-t és ennek a String reprezentációját eltárolom, mint elsődleges kulcs.

Itt jött a bukta. A Google App Engine nem engedi olyan String-ek kulcsként való használatát, ami számmal keződik, vagy 2 darab aláhúzás karakterrel kezdődik és végződik (__*__). Hogy miért? Ne kérdezzétek, nem értem. A Python SDK-nál volt erről valami kis bejegyzés:
A key_name is stored as a Unicode string (with str values converted as ASCII text). A key_name must not start with a number, and must not be of the form __*__ (start and end with two underscores). If your application uses user-submitted data as datastore entity key names (such as an email address), the application should sanitize the value first, such as by prefixing it with a known string, to meet these requirements.
De nekem ez nem elég magyarázat. Java SDK doksija egy szóval nem is említi ezt a tényt. Mindenestre beküldtem, mint bugot és várom a magyarázatot, hogy ez miért van. Ha van valódik oka ennek, akkor nem lenne gond, de nekem ezzel miért kell fogalkoznom? Csinálja meg helyettem GAE...

To be continued...

0 megjegyzés:

Megjegyzés küldése