GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 4 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hervé AGNOUX
Le #198702
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

lapetiteboulequonpousse
Le #198701
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 ??
Hervé AGNOUX
Le #198700
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

lapetiteboulequonpousse
Le #199383
Merci bcp, je vais le tenter comme ça...
Publicité
Suivre les réponses
Poster une réponse
Anonyme