attribut class d'un javabean dynamique
Le
lapetiteboulequonpousse
Bonjour,
Je cherche a créer un javabean de manière dynamique en fonction de 2
classes différentes en vain.
Ce que je souhaite faire :
<useBean: id="monBean" class="<%= valEnv %>" scope="session" />
<jsp:setProperty name="monBean" property="connection" value="ABC" />
Cela ne peut fonctionner puisque l'attribut 'class' ne peut pas être
"paramétrable".
Objectif de la chose :
J'ai 2 environnements (production et développement). Les 2 javabeans
appellent des méthodes de même nom mais qui ne font pas du tout la
même chose (connections aux bases différentes, logs, actions
différentes). Et surtout : je ne développe pas le javabean
"production" et ne peut donc pas intervenir au niveau du code de celui
ci.
--
J'ai essayé ceci :
<%
if (request.getParameter("debug") == null){
classBean = "maclasse.MonBeanProd" ;
}
else {
classBean = "maclasse.MonBeanDev" ;
}
Class EnvClasse = Class.forName(classBean) ;
Object env = EnvClasse.newInstance() ;
%>
puis création du Bean avec Beans.instantiate
Le problème c'est que je me retrouve ensuite avec un Object et non un
maclasse.MonBeanProd et donc je ne peux pas utiliser les méthodes
Je ne sais pas si c'est très clair c'est en tout cas très
problématique pour moi..
Merci
Je cherche a créer un javabean de manière dynamique en fonction de 2
classes différentes en vain.
Ce que je souhaite faire :
<useBean: id="monBean" class="<%= valEnv %>" scope="session" />
<jsp:setProperty name="monBean" property="connection" value="ABC" />
Cela ne peut fonctionner puisque l'attribut 'class' ne peut pas être
"paramétrable".
Objectif de la chose :
J'ai 2 environnements (production et développement). Les 2 javabeans
appellent des méthodes de même nom mais qui ne font pas du tout la
même chose (connections aux bases différentes, logs, actions
différentes). Et surtout : je ne développe pas le javabean
"production" et ne peut donc pas intervenir au niveau du code de celui
ci.
--
J'ai essayé ceci :
<%
if (request.getParameter("debug") == null){
classBean = "maclasse.MonBeanProd" ;
}
else {
classBean = "maclasse.MonBeanDev" ;
}
Class EnvClasse = Class.forName(classBean) ;
Object env = EnvClasse.newInstance() ;
%>
puis création du Bean avec Beans.instantiate
Le problème c'est que je me retrouve ensuite avec un Object et non un
maclasse.MonBeanProd et donc je ne peux pas utiliser les méthodes
Je ne sais pas si c'est très clair c'est en tout cas très
problématique pour moi..
Merci

Poser une question


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 :
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
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 ??
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