Writing /home/infogasy/domains/wiki.infogasy.net/public_html/data/cache/3/3fa2255dbc78184382c0769e0a58f688.xhtml failed

====== Fanorenana Informatika mampiasa ny tetika POJO faha III ====== **Mikasika ny mpitahiry UCM rehefa mampiasa Reflection Java:** Tohin’ilay lahasoratra faha-II nampidirana ny tahiry UCM dia ity misy « implémentation »-ny azo ampiasina tsara, satria mampiasa Reflection Java. Vokany dia azo ampiasana azy io daholo ny kilasy rehetra raha toa ka « dérivé »-na avy aminy ireo kilasy ireo : Ho hitantsika fa ao anaty laminasa **MSL-POJO** dia ireo kilasy antsoina hoe : « classe persistante » no tena hampiasa io **UCM karazany 1** io. Ny « classe persistante » moa dia ireo kilasy entina hanamboarana objet halefa anaty rafitra mpitahiry maharitra (base de données). Ny fiasan’ny reflection Java moa dia fahafahana mampiasa avy hatrany ireo méthodes mahazatra (oh : constructeurs, setters sy getters) anaty kilasin’ilay objet-nao na tsy fantatra aza ny anaran’izireo ; avy amin’ilay objet kirakiraina ihany… Ohatra ka omentsika anarana **ModeleUCM** ilay kilasy UCM dia mazava ho azy fa raha raisintsika izany ny kilasy **Post** tary aloha tary iny dia izao no tokony hamaritana azy vaovao indray : <code java> public class ModeleUCM { ………………….. } public class Post extends ModeleUCM { …………………… } </code> Asehontsika eto ambany ireo kilasy efa naorintsika hatreto @ny lahasoratra faha-III ity. Marihina fa ao anaty Eclipse no nanoratana azireo, ary natao tanaty projet mitondra ny anarana Infogasy. {{:wiki:pojo04.png|:wiki:pojo04.png}} Omentsika eto ambany ny source-ny kilasy ModeleUCM sy UtilUCM ; fa ny Post moa efa hita tany aloha ihany saingy esorina tao fotsiny ny méthodes : toVector() sy fromVector(List v) … Ny kilasy UtilUCM moa dia kilasy « utilitaires » no fiantso azy, ary ireo méthodes statiques rehetra no avondrona ao. Ny méthodes statiques moa dia natao fotsiny hanaovana hetsika tsy miankina @ny fisiana objet iray namboarina manokana avy @ny constructeurs. Kilasy ModeleUCM : <code java> package msl.ucm; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Time; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Vector; /** * Classe UCM (Universal Container Model) * @author jpa */ public class ModeleUCM { /** * Placer les attributs de cet objet dans un Vector et le renvoie * @return type Vector */ public Vector toVector() { Vector v = new Vector(); try { BeanInfo model = Introspector.getBeanInfo(this.getClass()); Field[] champ = this.getClass().getDeclaredFields(); PropertyDescriptor[] attrib = model.getPropertyDescriptors(); for(int i = 0; i < champ.length; i++) { champ[i].setAccessible(true); for(int j = 0; j < attrib.length; j++) { if(0 == champ[i].getName().compareTo(attrib[j].getName())) { Method method = attrib[j].getReadMethod(); v.add(method.invoke(this,null)); break; } } } return v; } catch (Exception e) { return null; } } /** * 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 fromVector(List v) { try { BeanInfo model = Introspector.getBeanInfo(this.getClass()); Field[] champ = this.getClass().getDeclaredFields(); PropertyDescriptor[] attrib = model.getPropertyDescriptors(); int index = 0; // index champ attribut Iterator it = v.iterator(); while(it.hasNext()) { Object obj = it.next(); champ[index].setAccessible(true); Object arg[] = new Object[1]; arg[0] = obj; for(int i = 0; i < attrib.length; i++) { if(0 == champ[index].getName().compareTo(attrib[i].getName())) { if(null != arg[0] && // modif en heure (type attribut) d'une date Time.class == attrib[i].getPropertyType() && Date.class == arg[0].getClass()) { arg[0] = new Time(((Date)arg[0]).getTime()); } if(null != arg[0] && String.class == arg[0].getClass()) arg[0]=arg[0].toString().trim(); // trim espace Method method = attrib[i].getWriteMethod(); if(null == arg[0] || 0 == arg[0].toString().compareTo("")) arg[0] = UtilUCM.preventNull(attrib[i].getPropertyType()); method.invoke(this,arg); break; } } index++; } return this; } catch (Exception e) { return null; } } } Kilasy UtilUCM : package msl.ucm; import java.sql.Time; import java.util.Date; import java.util.HashMap; import java.util.Vector; /** * Classe utilitaire de UCM * @author jpa * */ public class UtilUCM { /** * Initilialisation adéquate d'un objet de référence null * @param obj * @return */ static public Object preventNull(Class objClass) { if(String.class == objClass) return ""; else if(Date.class == objClass) return new Date(0L); else if(Time.class == objClass) return new Time(new Date(0L).getTime()); else if(Integer.class == objClass) return new Integer(0); else if(Double.class == objClass) return new Double(0.0); else if(Vector.class == objClass) return new Vector(); else if(HashMap.class == objClass) return new HashMap(); else return new Object(); } } </code> Fehiny : Izay zany no azo lazaina ny mikasika ilay tahiry mandalo **UCM**, fitaovana iray tena miasa be tokoa ao anaty rafim-panorenana laminasa **MSL-POJO**. Ny marina mantsy dia ho hitantsika hatraiza hatraiza ao anatin’ireo module POJO-ntsika io rafitra fitehirizana io. Ny lahasoratra manaraka moa dia fidirana @ny interface-na « modèle de persistance » indray ao anaty laminasa MSL-POJO. Ka ny implémentation homentsika eto raha ohatra ka hampiasa ny fitehirizana **Db4Objects** isika, fa mazava hoa azy raha misy mazoto hanao « implémentation » @ny « **relationnel** » kalou dia tsy tokony ho blem @ny MSL-POJO izany …

 

fanorenanainformatikamampiasanytetikapojofahaiii.txt · Novaina farany:: 2008/09/11 12:43