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 :

Faire appel à l'instance d'un DAO [Data]


Sujet :

Spring Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 442
    Points : 475
    Points
    475
    Par défaut Faire appel à l'instance d'un DAO
    Bonjour

    J'ai une application Java utilisant HibernateTemplate.

    Toute ma configuration semble correcte (dao, service, applicationContext.xml) sauf que je ne sais pas comment faire appel à l'instance du DAO dans une classe quelconque

    Forcément, si je fais "new MaClasseServiceImpl()", son attribut DAO est null.
    C'est quoi la syntaxe ? je ne la trouve nulle part

    Merci par avance...

    [Edit]
    Faut-il que j'utilise ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ApplicationContext ax = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
    à chaque fois que j'appelle une méthode de mon service DAO ???
    Ça serait aberrant car l'instanciation se fait au démarrage du serveur.
    [/Edit]

  2. #2
    Membre actif Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Points : 268
    Points
    268
    Par défaut
    bonjour,

    normalement tu dois avoir déclaré ton DAO dans ton applicationContext?
    donc pour l'appeler dans une autre classe il suffit de le déclarer dans cette dernière et écrire son setter "C'est ça l'injection" et dans ton applicationcontext tu le déclare comme étant une property.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 442
    Points : 475
    Points
    475
    Par défaut
    Merci pour la réponse mais j'ai pas compris

    Voilà 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    	<!-- ===== HIBERNATE ==== -->
     
    	<bean id="documentDatabase"	class="org.springframework.jndi.JndiObjectFactoryBean">
    		<property name="jndiName" value="java:/DocumentDatabase" />
    	</bean>
     
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    		<property name="dataSource" ref="documentDatabase"/>	
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    				<prop key="hibernate.show_sql">true</prop>
    				<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
    			</props>
    		</property>
    		<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
    		<property name="annotatedClasses">
    			<list>
    				<value>com.pv.document.util.database.DocConfig</value>
    				<value>com.pv.document.util.database.DocEvent</value>
    				<value>com.pv.document.util.database.DocInfo</value>
    			</list>
    		</property>
    	</bean>
     
    	<bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
    		<property name="dataSource" ref="documentDatabase"/>
    	</bean>
     
    	<bean id="hibernateTemplate"
    		class="org.springframework.orm.hibernate3.HibernateTemplate">
    		<property name="sessionFactory" ref="sessionFactory"/>
    		<property name="jdbcExceptionTranslator" ref="jdbcExceptionTranslator"/>
    	</bean>
     
    	<bean id="transactionManager"
    		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="sessionFactory"/>
    	</bean>
     
    	<bean id="databaseDao" class="com.pv.document.util.database.DatabaseDaoImpl">
    		<property name="hibernateTemplate" ref="hibernateTemplate"/>
    		<property name="sessionFactory" ref="sessionFactory"/>
    	</bean>
     
    	<bean id="databaseTarget" class="com.pv.document.util.database.DatabaseServiceImpl">
    		<property name="databaseDao" ref="databaseDao"/>
    	</bean>
     
    	<bean id="transactionProxy"
    		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager" ref="transactionManager"/>
    		<property name="target" ref="databaseTarget"/>
    		<property name="transactionAttributes">
    			<props>
    				<prop key="*">PROPAGATION_REQUIRED</prop>
    			</props>
    		</property>
    		<property name="proxyTargetClass" value="true"/>
    	</bean>
    J'ai également 4 classes:

    DatabaseDao: Interface
    DatabaseDaoImpl: extends HibernateDaoSupport implements DatabaseDao (aucun attribut)
    DatabaseService: Interface
    DatabaseServiceImpl: implements DatabaseService (1 attribut DatabaseDao et son setter)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 442
    Points : 475
    Points
    475
    Par défaut
    Bon, ça fonctionne en suivant la FAQ. Mais n'y a-t-il pas une autre façon ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour johnBob

    Ton application est une application java Standard ou serveur web ?

    de toute maniere je vais te donner les deux etapes pour les differentes applications:

    1-Application java Standard

    En effait il te faut l'applicationContext à chaque fois que tu veux recupérer un bean Spring

    ApplicationContext ax = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});

    DatabaseService dbService = (DatabaseService)ax.getBean("databaseTarget");

    dbService.doSomthing();
    dans cette solution vous n'avez pas a vous soucier des instances des classes en effet c'est le conteneur qui gérer les instances et les dépendance.

    Pour faire mieux :


    ClasseExexcutante implements ApplicationContexAware{

    private ApplicationContext appContext;

    public void setApplicationContext(ApplicationContext ctx){
    this.appContext = ctx;
    }
    cette interface Spring permet d'injecter ton applicationContext dans ta classe
    d'execution (il faut la declarer comme bean spring elle aussi) ainsi tu pouras utiliser l'utiliser sans faire appel a ClassPathXMLApplicationContext

    2- Cas de serveur d'application :

    Dans web.xml

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/application-context/*.xml</param-value>
    </context-param>

    <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
    Au demarrage du serveur , le conteneur spring recherchera tous les fichiers xml et instancie un applicationContext qui sera gerera aussi les dependances.
    et donc ton bean Service tu peux l'injecter dans une classe d'execution et l'utiliser.

    Si tu as d'autres question, je suis la

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 442
    Points : 475
    Points
    475
    Par défaut
    Merci beaucoup kiwikiwi

    C'est très clair. Je me trouve dans le cas n°2 (serveur d'application JBoss).

    J'ai encore à explorer la notion d'injection et ça fera l'affaire.

    C'est chouette Spring avec HibernateTemplate et les annotations Hibernate

    Merci à tous les 2

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/01/2008, 12h08
  2. [Oracle] Stocker ma requête dans un fichier poyr y faire appel en PHP
    Par alex007 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/03/2006, 10h11
  3. Peut-on faire appel aux interruptions sous Windows ?
    Par lorenfar dans le forum Assembleur
    Réponses: 10
    Dernier message: 09/05/2005, 18h42
  4. Réponses: 4
    Dernier message: 26/01/2005, 13h08
  5. [débutant]Faire appel à une action d'une ActionList
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 22h53

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