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 Java Discussion :

Pb d'objets en Singleton [Web Services]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut Pb d'objets en Singleton
    Bonsoir

    J'ai une classe avec Spring 2.5 dont je souhaite lors de l'appel de mon WebService avoir plusieurs instance.
    J'ai declare donc dans mon applicationContext.xml scope="prototype" dans le bean, mais cela ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bean id="compo" class="composition.services.impl.CompoPDFImpl" scope="prototype"/>
    L'appel par getBean() avec un XmlWebApplicationContext il obligatoire ??


    Si je force a l'ancienne un new de la classe ou un synchronized cela fonctionne !

    Merci d'avance
    Philippe

  2. #2
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Peux tu être un peu plus explicite ?
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Si ton webService est instancié par Spring et qu'il est en scope singleton (ce qui est probable pour un service), c'est normal que le bean de scope prototype dont il dépend soit instanciée qu'une et une seule fois .

    Si c'est bien ton cas, tu peux regarder ces deux techniques qui résolvent de façon plutôt élégante le problème :
    - BeanFactoryAware
    - Lookup method injection

    Dans tous les cas, l'utilisation d'XmlApplicationContext dans un application web peut presque toujours être contournée.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut
    Bonjour,

    J'ai resolu le Probleme du singleton qui est le mode par defaut de SPRING par
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    1 scope="prototype" dans le applicationContext.xml sur le bean
    <bean id="compoPDF" class="compo.services.impl.CompoPDFImpl" scope="prototype"/>
     
    2 Creer un Listener pour recuperer le servletContext
    public class GListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event)
    {
    ...
    servletContext = event.getServletContext();
    ...
    }
     
    private static ServletContext servletContext;
     
    public static ServletContext getContext() {
    return servletContext;
    }
     
    }
     
    3 getBean qui force une nouvelle instance
     
    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(GListener.getContext());
    CompoPDFManager result = (CompoPDFManager) wac.getBean("compoPDF");
    merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    Astucieux mais tu pourrais avoir un code beaucoup plus simple et concis en utilisant une des 2 méthodes évoqués précédemment.
    En fait, dans ton cas, tu n'as pas besoin du contexte d'une servlet en particulier, mais seulement d'une référence à ta factory de Bean Spring pour récupérer ton bean en scope prototype.

    Ainsi, tu t'éviteras la charge d'utiliser un listener chargé de récupérer le contexte.

    Avec BeanFactoryAware , il te suffirait d'utiliser ta classe singleton de telle sorte (@Override pour Java 1.6) :
    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
     
    public class TonBeanSingleton implements BeanFactoryAware {
     
       private BeanFactory beanFactory;
     
       public void methodeQuiUtiliseTonBeanPrototype() {
          (CompoPDFManager) result  =  beanFactory.getBean("compoPDF")
           ....
     
       }
       @Override
       public void setBeanFactory(BeanFactory beanFactory) throws   BeansException {
          this.beanFactory = beanFactory;
       }
    }

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut
    MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/03/2014, 09h57
  2. Réponses: 2
    Dernier message: 20/05/2011, 13h15
  3. Singleton et Fuite mémoire avec objet STL
    Par Robxley dans le forum C++
    Réponses: 7
    Dernier message: 09/02/2011, 11h01
  4. Instanciation d'un objet dans une classe singleton
    Par mulfycrowh dans le forum Débuter
    Réponses: 1
    Dernier message: 16/09/2009, 15h52
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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