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 :

Récupération de la XmlBeanFactory


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 78
    Points : 62
    Points
    62
    Par défaut Récupération de la XmlBeanFactory
    J'ai une application qui tourne dans une webapp, j'aimerais récupérer la bean factory de spring afin de pouvoir instancier mes bean dans mon code lorsque ceux-ci ne sont pas des singletons. Je m'attendais à trouver simplement un méthode statique mais si elle existe je ne l'ai pas trouvée.

    Comment faire pour récupérer dans mon code java la XmlBeanFactory initialisée par le serveur d'application ?

    Voici une partie de mon web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <web-app>
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath*:/WEB-INF/applicationContext.xml</param-value>
    	</context-param>
    </web-app>
    Et un échantillon de mon applicationContext.xml :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:util="http://www.springframework.org/schema/util"
    	xmlns:configurator="http://cocoon.apache.org/schema/configurator"
    	xmlns:avalon="http://cocoon.apache.org/schema/avalon"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                               http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
                               http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.xsd
                               http://cocoon.apache.org/schema/avalon http://cocoon.apache.org/schema/avalon/cocoon-avalon-1.0.xsd">
    	<!-- Activate Cocoon Spring Configurator -->
    	<configurator:settings />
    	<!-- Configure Log4j -->
     	<bean name="org.apache.cocoon.spring.configurator.log4j"
    		class="org.apache.cocoon.spring.configurator.log4j.Log4JConfigurator"
    		scope="singleton">
    		<property name="settings"
    		ref="org.apache.cocoon.configuration.Settings" />
    		<property name="resource" value="/WEB-INF/log4j.xml" />
    	</bean>
    	<!-- Activate Avalon Bridge -->
    	<avalon:bridge />
    	<bean id="myDataSource"
    		class="org.springframework.jndi.JndiObjectFactoryBean">
    		<property name="jndiName" value="java:comp/env/jdbc/metadatadb" />
    	</bean>
    	<bean id="sessionFactory"
    		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="dataSource" ref="myDataSource" />
    		<property name="configLocation">
    			<value>classpath:/hibernate.cfg.xml</value>
    		</property>
    	</bean>
    	<bean id="transactionManager"
    		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory">
    			<ref bean="sessionFactory" />
    		</property>
    	</bean>
    	<bean id="storageInitializer"
    		class="xxx.StorageInitializer">
    		<property name="sessionFactory">
    			<ref bean="sessionFactory"/>
    		</property>
    	</bean>
    </beans>
    D'avance merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Accès aux beans déclarés dans le fichier global
    ClassPathResource res = new ClassPathResource("/WEB-INF/applicationContext.xml");
    XmlBeanFactory factory = new XmlBeanFactory(res);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 78
    Points : 62
    Points
    62
    Par défaut
    Merci pour ta réponse, cependant cette méthode me crée un nouveau BeanFactory or je voudrais pouvoir accéder à celui configuré par ma webapp.

    J'ai apparemment trouvé la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<context-param>
    		<param-name>
    			org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingListener
    		</param-name>
    		<param-value>
                                      xxx.ContextStoreListener
    		</param-value>
    	</context-param>
    Avec un implémentation de ServletContextListener perso :
    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
    public class ContextStoreListener implements ServletContextListener {
        /**
         * {@inheritDoc}
         * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
         */
        public void contextInitialized(ServletContextEvent evt) {
            ServletContext servletCtx = evt.getServletContext();
            WebApplicationContext webApplicationContext =
                WebApplicationContextUtils.getWebApplicationContext(servletCtx);
     
            ApplicationContext context = webApplicationContext;
            StorageInitializer.setBeanFactory(context.getParentBeanFactory());
        }
     
        /**
         * {@inheritDoc}
         * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
         */
        public void contextDestroyed(ServletContextEvent evt) {
        }
    }

Discussions similaires

  1. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47
  2. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 15h36
  3. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  4. récupération d'images
    Par MANU_2 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/08/2002, 18h36
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

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