IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

Forcer la destruction d'un bean


Sujet :

Spring Web Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Par défaut Forcer la destruction d'un bean
    Bonjour,

    Je déclare mes Beans JSF avec Spring grâce à un SpringBeanFacesELResolver déclaré comme ceci dans mon faces-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	<application>
    		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    	</application>
    Tous mes Beans sont déclarés en scope session mais j'ai parfois besoin de les réinitialiser au sein d'une même session. J'ai donc écrit la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void resetBean(String name) {
    		FacesContext.getCurrentInstance().getELContext().getELResolver()
    				.setValue(FacesContext.getCurrentInstance().getELContext(),
    						null, name, null);
    	}
    Cela fonctionnait bien lorsque j'utilisais un DelegatingVariableResolver (en JSF 1.1) mais avec le SpringBeanFacesELResolver (conseillé en JSF 1.2) j'obtiens l'exception suivante :
    javax.el.PropertyNotWritableException: Variable 'page2' refers to a Spring bean which by definition is not writable
    Existe-t-il un moyen de forcer la destruction d'un bean Spring ?

    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Par défaut
    Ok, d'où ma question d'origine :

    Comment supprime-t-on un bean du contexte de Spring ?

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par Gob4 Voir le message
    Ok, d'où ma question d'origine :

    Comment supprime-t-on un bean du contexte de Spring ?

    je pense que tu peux faire un truc comem celà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    Bean b = ctx.getBean("bean")  ;
    b = null;
    sinon utilise l'attribut destroy-method dans la déclaration du bean, si le problème est lié uniquement à Spring, je re-déplace le message.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Par défaut
    Je ne pense pas qu'affecter 'null' a la variable 'b' règle le problème...

    Concernant l'attribut destroy-method, il me semble que cela permet juste de définir la méthode appelée par Spring lorsque le bean est détruit.

    Peux-tu re-déplacer le message dans le forum Spring stp ?

    Merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Par défaut
    Je pense avoir trouvé une solution. Je ne sais pas si c'est très propre mais j'ai fait ceci et ça semble fonctionner :

    D'abord j'impémente un BeanFactoryAware :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.BeanFactoryAware;
     
    public class BeanFactoryAwareImpl implements BeanFactoryAware {
     
    	private BeanFactory beanFactory;
     
    	public BeanFactory getBeanFactory() {
    		return beanFactory;
    	}
     
    	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
    		this.beanFactory = beanFactory;
    	}
     
    }
    Puis sur mon instance de beanFactory (que je cast en ConfigurableBeanFactory) j'appelle la méthode destroyScopedBean() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ConfigurableBeanFactory beanFactory = (ConfigurableBeanFactory) ((BeanFactoryAwareImpl) springContext
    				.getBean("beanFactoryAware")).getBeanFactory();
    		beanFactory.destroyScopedBean(beanName);

Discussions similaires

  1. Forcer la destruction d'un objet
    Par Higgins dans le forum Langage
    Réponses: 8
    Dernier message: 19/12/2013, 19h57
  2. Forcer la destruction d'une variable
    Par Maniz dans le forum VB.NET
    Réponses: 15
    Dernier message: 29/09/2011, 15h05
  3. [c#]Comment forcer la destruction d'un objet précédemment créé?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/07/2009, 14h29
  4. Forcer le bean lors de la Re-visite d'une page
    Par sassien dans le forum JSF
    Réponses: 13
    Dernier message: 06/06/2008, 09h48
  5. [struts] Destruction bean formulaire de session
    Par k4eve dans le forum Struts 1
    Réponses: 4
    Dernier message: 06/05/2004, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo