OVH Cloud OVH Cloud

attribut class d'un javabean dynamique

4 réponses
Avatar
lapetiteboulequonpousse
Bonjour,

Je cherche a cr=E9er un javabean de mani=E8re dynamique en fonction de 2
classes diff=E9rentes... en vain.

Ce que je souhaite faire :

<useBean: id=3D"monBean" class=3D"<%=3D valEnv %>" scope=3D"session" />

<jsp:setProperty name=3D"monBean" property=3D"connection" value=3D"ABC" />


Cela ne peut fonctionner puisque l'attribut 'class' ne peut pas =EAtre
"param=E9trable".


Objectif de la chose :
J'ai 2 environnements (production et d=E9veloppement). Les 2 javabeans
appellent des m=E9thodes de m=EAme nom mais qui ne font pas du tout la
m=EAme chose (connections aux bases diff=E9rentes, logs, actions
diff=E9rentes). Et surtout : je ne d=E9veloppe pas le javabean
"production" et ne peut donc pas intervenir au niveau du code de celui
ci.

-----------------------------------
J'ai essay=E9 ceci :
<%
if (request.getParameter("debug") =3D=3D null){
classBean =3D "maclasse.MonBeanProd" ;
}
else {
classBean =3D "maclasse.MonBeanDev" ;
}

Class EnvClasse =3D Class.forName(classBean) ;
Object env =3D EnvClasse.newInstance() ;
%>
puis cr=E9ation du Bean avec Beans.instantiate


Le probl=E8me c'est que je me retrouve ensuite avec un Object et non un
maclasse.MonBeanProd et donc je ne peux pas utiliser les m=E9thodes...

Je ne sais pas si c'est tr=E8s clair c'est en tout cas tr=E8s
probl=E9matique pour moi.....

Merci

4 réponses

Avatar
Hervé AGNOUX
lapetiteboulequonpousse wrote:


Je cherche a créer un javabean de manière dynamique en fonction de 2
classes différentes... en vain.



Il faudrait que vos 2 classes héritent d'un même parent, ou respectent la
même interface.

Cette classe parente ou cette interface déclarera les méthodes que vous
voulez communes à vos phases de développement et de production.

Ainsi, au lieu d'écrire :


Class EnvClasse = Class.forName(classBean) ;
Object env = EnvClasse.newInstance() ;
%>


Vous pourrez écrire :

Class EnvClasse = Class.forName(classBean) ;
MaClasseParenteOuInterface env (MaClasseParenteOuInterface)EnvClasse.newInstance() ;

... et ainsi accéder aux méthodes que vous voulez.


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
lapetiteboulequonpousse
Merci pour la réponse.

Je ne peux pas modifier le bean de production et il n'hérite de rien
du tout....

Par contre la réponse me donne une idée : est-ce que si je créer mon
javabean de validation en le faisant un extends de mon javabean de
production et en surchargeant toutes les méthodes, le même code
fonctionnera ??
Avatar
Hervé AGNOUX
lapetiteboulequonpousse wrote:


Par contre la réponse me donne une idée : est-ce que si je créer mon
javabean de validation en le faisant un extends de mon javabean de
production et en surchargeant toutes les méthodes, le même code
fonctionnera ??


Oui, cela peut être une approche. Mais méfiez-vous que, si votre javabean de
validation hérite du javabean de production, vous ne pourrez empêcher que
le constructeur de validation appelle un constructeur de production. Selon
ce que fait ce constructeur de production, cela peut être génant, si par
exemple il se connecte à des bases de données de production... et non de
validation.

Cordialement.


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
lapetiteboulequonpousse
Merci bcp, je vais le tenter comme ça...