Writing /home/infogasy/domains/wiki.infogasy.net/public_html/data/cache/f/fb79d1e40bcb79debe6eba38c2b38112.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 :

public class ModeleUCM
{
…………………..
}
 
 
public class Post extends ModeleUCM
{
……………………
}

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

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 :

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();
	}
}

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 …

 

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