AS3SX PersistentObjectManager (AS3 Sample App) and the AS3SX Admin Center
as3sx_persistency.zip (73)
http://as3sx.fdt.powerflasher.com/
La classe PersistentObject
PersistentObject est une classe abstraite que vous pouvez étendre afin de personnaliser vos objets persistants:
public class User extends PersistentObject {
public function User() {
}
}
Vous pouvez créer votre objet persistant coté client ou bien coté serveur. Chaque objet persistant reçoit un GUID affecté à sa propriété publique _id lors de son insertion dans la base de donnée.
3 méthodes sont possibles sur un objet persistant.
public function insert() : void;
public function remove() : void;*
public function update() : void;
3 callbacks correspondant sont prévus, respectivement:
public function insertComplete() : void;
public function removeComplete() : void;
public function updateComplete() : void;
* La méthode remove() génère actuellement une erreur interne. Vous devrez passer par l’outil d’administration (voir plus bas) pour effacer un objet.
Il vous appartient de surcharger (ou pas) ces méthodes et callbacks.
Dans l’exemple fourni vous remarquerez mon choix en faveur d’un gestionnaire événementiel personnalisé (nineveh-responder) bien plus performant que l’api native en particulier concernant la gestion de mémoire d’occupation (par instance), la vitesse de dispatch et l’optimisation de garbage collection pour ne citer que ces aspects majeurs.
Extrait:
public class PersistentServer extends Sprite {
public function PersistentServer() {
_init();
}
/** */
private function _init() : void {
NResponder.add(User.onInsertCompleteEVENT, onAddUser);
NResponder.add(User.onRemoveCompleteEVENT, onDeleteUser);
NResponder.add(User.onUpdateCompleteEVENT, onUpdateUser);
ServerAS3SX.setRequestHandler(UserRequest, handleUserRequest);
}
/** */
public class User extends PersistentObject {
public static const onInsertCompleteEVENT : String = "onInsertComplete";
public static const onRemoveCompleteEVENT : String = "onRemoveComplete";
public static const onUpdateCompleteEVENT : String = "onUpdateComplete";
override public function insertComplete() : void {
// here some stuff (or not) ...
NResponder.dispatch(onInsertCompleteEVENT, [this]);
}
Opérations Update et Delete
Dès qu’un nouvel objet a été stocké en base (méthode insert()) vous devez comprendre que vous travaillez alors avec son GUID (propriété publique _id). Les actions update et delete fonctionnent avec cette référence peu importe l’origine de l’instance (client ou serveur).
private function handleUserRequest(request : UserRequest = null) : void {
// request.user.update();
// request.user.remove();
isRunningOnAS3SX
Si votre objet persistant possède des méthodes vous pouvez poser une condition à l’exécution afin de vérifier selon le contexte (client ou serveur) si celles-ci sont autorisées ou pas.
override public function insert() : void {
if (ServerAS3SX.isRunningOnAS3SX()) {
super.insert();
} else {
var msg : String = this + ".insert() failed, insert only available on server";
PXDebug.DEBUG(msg, this);
throw( new PXUnsupportedOperationException(msg) );
}
}
Consultation sur les Objets Persistants
Pour sélectionner une collection d’objets vous disposez de 2 méthodes, ces 2 méthodes renvoyant un tableau d’objets du type attendu.
ServerAS3SX.persistentObject.getPersitentObjectArrayBy()
getPersitentObjectArrayBy() attend une propriété et une valeur associée, exemple: ServerAS3SX.persistentObject.getPersistentObjectArrayBy("gender", "1", User, onGetUsersByGender);
ServerAS3SX.persistentObject.getPersitentObjectArrayByQuery()
getPersitentObjectArrayByQuery() permet des requêtes personnalisées définies avec les classes Query et Condition, exemple:
ServerAS3SX.persistentObject.getPersitentObjectArrayByQuery(new Query(User, []), onGetAllUsers);
Pour récupérer un object persistant en particulier vous disposer également de 2 sortes de méthodes, chacune d’entre elle renvoyant le type d’objet attendu:
ServerAS3SX.persistentObject.getOnePersitentObjectById() *
getOnePersitentObjectById() attend la valeur de la propriété _id, exemple:
ServerAS3SX.persistentObject.getOnePersitentObjectById("4e7743beebd1d65dd80000c5", User, onGetUser);
* Il y a actuellement une erreur sur cette méthode (undefined renvoyé)
ServerAS3SX.persistentObject.getOnePersitentObjectBy() **
getOnePersitentObjectBy() attend une propriété et une valeur associée, exemple:
ServerAS3SX.persistentObject.getOnePersitentObjectBy("username", "Flynn", User, onGetUser);
** getOnePersitentObjectBy() génère actuellement une erreur sur la propriété _id (undefined renvoyé)
Administration des Objet Persistants
Voici résumé en séquence d’images l’utilisation et les principales actions de l’outil d’administration





Prochain sujet, l’upload de l’application sur serveur.
If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.



