3. L'implémentation de la classe ModeleUCM2.java
Comme promi nous publions ci-dessous la liste des signatures de toutes les méthodes de la classe ModeleUCM2.java, qui implémente les mécanismes assurés par le conteneur UCM. Rappelons que UCM permet de stocker les attributs de tout objet représentant nos composants, sous une forme universelle : des collections d'objets identifiables à l'aide des IDs. Les usages pratiques sur lesquels nous avions vu l'efficacité de faire appel à UCM, se résume à deux :
- UCM nous a facilité le transport d'objets sur TCP/IP, quand auparavant nous avions encore utilisé l'API Apache XML-RPC, pour nos appels de méthodes à distance. Même maintenant où nous avons adopté l'API Hessian pour faire le même travail, nous préférons encore gardé dans certain cas l'usage de UCM, au lieu d'envoyer en brut nos objets de tout type sur le réseau (Hessian supporte tous types d'objets, car il utilise un protocole binaire ...)
- UCM nous a permis d'avoir une système de cache d'objets pour utilisateur qu'on peut gérer d'une manière efficace même au niveau de nos classes de service haut-niveau.
/** * Classe UCM (Universal Container Model). Cette classe implémente toute les méthodes de service * bas-niveau, devant être encapsulées par tous les modèles de composants de notre application. * @author jpa * @version 2.0 */public class ModeleUCM2 implements Converter,IXmlModel... /**************************** * UCM - Première forme ****************************/ /** * Placer les attributs de cet objet dans un Vector et le renvoie * @return type Vector */ public Vector objectToVector();/** * Renvoyer l'objet stocké dans un vector passé en paramètre s'il est conforme * aux spécification UCM * @param v * @return Objet modèle */ public Object vectorToObject(List v);/**************************** * UCM - Deuxième forme ****************************/ /** * Renvoie le container UCM correspodant à un id user * @param idUser * @return le map dont les clés idUser identifient un groupe d'objets evc leurs propre ID */ static private Map getUCM(String idUser);/** * Lecture index container UCM et son ID * @param idUser * @return le map des objets UCM */ static public Map getMapUCM();/** * Néttoyer le conteneur UCM */ public void clearContainer(); public void clearContainer(String idUser);/** * Liberer la cache correspondant à un opérateur donné * @param idOperateur * @return */ public boolean freeCacheOperateur(String idOperateur);/** * Recherche un objet vector du modèle dans le container UCM ayant l'identifiant en paramètre * @param id identifiant de l'objet modèle * @return le vector contenant les attributs du modèle */ public Vector getObjectVectorInUCM(String idObject); public Vector getObjectVectorInUCM( String idObject, String idUser);/** * Extraire un object du container UCM en fonction d'un identifiant * @param idObject * @return l'objet modèle */ public Object getObjectInUCM(String idObject); public Object getObjectInUCM( String idObject, String idUser);/** * Renvoie l'identifiant de l'id de l'objet persistent (le premier champ de l'attribut du modèle) * @return */ public Object getIdObject();/** * Placer un object de l'instance unique du modèle dans le container UCM * @param object ayant idObject comme identifiant dans le conteneur UCM * @return le vector contenant l'objet du modèle */ public Vector setObjectVectorInUCM(String idObject): public Vector setObjectVectorInUCM( String idObject, String idUser);/** * Enlever du container UCM l'objet possédant l'ID en paramètre * @param idObject * @return */ public Vector removeObjectVectorInUCM( String idObject, String idUser);/** * Enlever du container UCM tous les objets * @return true si ok */ public boolean removeAllObjectVectorInUCM(String idUser);/** * Enlever du container UCM tous les objets correspondant à l'appelant * @return true si ok */ public boolean removeAllThisObjectVectorInUCM(String idUser);/** * Renvoie tous le contenu du container UCM * @return */ public Vector getAllObjectInUCM(String idUser);/** * Renvoie tous les objets courant du container UCM * @return */ public Vector getAllThisObjectInUCM(); public Vector getAllThisObjectInUCM(String idUser);//==========================================================================/** * Modifier les attributs de l'objet courant par ceux de l'objet en * paramètres * @return true si opération réussie */ public boolean setObject(Object object);/** * Modifier les attributs de l'objet courant par ceux de l'objet en * paramètres, sauf l'identifiant de l'objet * @param object * @param keyName * @return */ public boolean setObject( Object object, String keyName);/** * Modifier les attributs de l'objet courant par ceux de l'objet en * paramètres, sauf les valeurs des attributs dont les noms sont en liste * paramètre * @param object * @param keyName * @return */ public boolean setObject( Object object, List keyName);/** * Modifier les attributs de l'objet courant par ceux de l'objet en * paramètres, pour les valeurs des attributs dont les noms sont en liste * paramètre * @param object * @param keyName * @return */ public boolean setAttribObject( Object object, List keyName);/** * Vérifier si les attributs de l'objet courant et celui en paramètre sont tous équivalents * @param mouvt * @return */ public boolean isObjectEqual(Object object);/** * Renvoie dans un vector le nom d'attribut de l'ID * @return */ public String getNameIdModele();/** * Renvoie la valeur de l'attribut dont le nom est passé en paramètre * de l'objet courant * @param attrib - nom attrib * @return */ public Object getValueAttrib(String nomAttrib);/** * Renvoie dans un vector la liste des noms d'attributs du modèle * @return */ public List getNameAttribModele();/** * Renvoie une liste dont le premier caractère sera en majuscule * @param liste * @return */ public List listToUpperCase(List liste);/** * Renvoie dans un vector la liste des noms d'attributs séléctionnés du modèle, par * rapport rapport à une liste en paramètre * @param listName - liste attribut à chercher * @return */ public List getNameAttribModele(List listName);/** * Renvoie le tableau d'attributs de l'objet modèle * @param v - vector contenant les attributs * @return tablea d'attributs d'objet */ public Object[] vectorToTabObject(Vector v);/** * Normalisation des valeurs des attributs de la classe persistente * @return objet normalisé, c'est à dire pas de valeur null pour les attributs */ public Object normalize();/** * Placer dans un vector les noms des attributs d'un objet quelconque * @return vector de noms d'attributs */ public Vector attribNameToVector();/*============================================================ * Implémentation de l'interface utilitaire de l'API XStream *============================================================*//** * Transformer en XML les attributs de l'objet courant * @return une chaîne au format XML */ public String objectToXml();/** * Transformer dans un fichier en XML les attributs de l'objet courant * @param out - le flux de sortie * @return true si opération réussie, sinon false */ public boolean objectToXml(OutputStream out);/** * Transformer dans un fichier en XML les attributs de l'objet courant * @param out - le writer de sortie * @return true si opération réussie, sinon false */ public boolean objectToXml(Writer out);/** * Reconstituer un objet correspondant aux élement/attribut de la chaîne XML en paramètres * @param xml - chaîne en XML * @return l'objet correspondant aux paramètres XML */ public Object xmlToObject(String xml);/** * Reconstituer un objet correspondant aux élement/attribut des données di fichier XML * @param in - flux d'entrée * @return l'objet correspondant aux paramètres XML * @return */ public Object xmlToObject(InputStream in);/** * Reconstituer un objet correspondant aux élement/attribut des données di fichier XML * @param in - le reader d'entrée * @return l'objet correspondant aux paramètres XML * @return */ public Object xmlToObject(Reader in);/** * Envoie le flot d'objets du container UCM dans un fichier XML par un writer * @param writer * @return */ public boolean UCMToXml(Writer writer);/** * Envoie Placer dans le container UCM les données XML dans un fichier * @param reader * @return */ public Vector XmlToUCM(Reader reader);/*============================================================ * Implémentation de l'interface Converter de l'API XStream *============================================================*/ public boolean canConvert(Class classe); public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context); public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context);... |
Nous montrons ci-dessous un morceau de codes mettant en oeuvre le mécanisme utilisant UCM : Supposons deux objets respectivement de type Membre et Post :
|
...
Membre mbre = new Membre("MB001","Rabe","rabe@domaine.org","Toamasina","Exportateur"}; Post post = new Post("PST01","MB001",new Date(),new Date(),"Titre","Contenu", new HashMap());
// Pour placer dans un vecteur UCM nos objets List listeMbre = new Vector(), listePost = new Vector(); // Nous aurons alors des tableaux dynamique à deux dimensions contenant des collections d'attributs de nos objets listeMbre.add(mbre.objectToVector()); listePost.add(post.objectToVector());
...
// Si nous voulons mettre en cache nos deux objets mbre et post post.setObjetcVectorInUCM(post.getIdPost(),idCache); mbre.setObjectVectorInUCM(mbre.getIdMembre(),idCache); ... // Pour restituer de la cache une de ces objets // résultat (attributs de nos objets) dans un vector de type UCM List lstAttrPost = post.getObjectVectorInUCM(post.getIdPost(),idCache); // ou récupération de l'objet directement, // résultat = un objet Post ayant l'ID en paramètre post = (Post)post.getObjectInUCM("un idPost quelconque objet Post",idCache); // suppression d'un objet en cache post.removeObjectVectorInUCM("un idPost quelconque objet Post",idCache); ...
|
Nous constatons ici comme prévu que le mecanisme de notre conteneur UCM se base beaucoup sur l'encapsulaltion par nos objets, des services offerts par cette classe du noyau de l'API MSL-POJO ...
... à suivre ... |