Partage
  • Partager sur Facebook
  • Partager sur Twitter

DaoFactory class

Sujet résolu
    15 octobre 2022 à 22:56:00

    Bonsoir,

    J'ai suivi le tuto simplifiez le developpement d'application java avec spring.

    Je n'arrive pas a implementer la classe DaoFactory.

    J'ai utiliser celle -ci:

    package org.example.demo.ticket.business.impl;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    import javax.inject.Inject;
    import javax.inject.Named;
    
    import org.example.demo.ticket.consumer.contract.dao.ProjetDao;
    import org.example.demo.ticket.consumer.contract.dao.TicketDao;
    import org.springframework.beans.factory.annotation.Value;
    
    //@Named("daoFactory")
    public class DaoFactory {
    	//@Value("${spring.datasource.url}")
        private String url;
        private String username;
        private String password;
        
        @Inject
        private ProjetDao projetDao;
        @Inject
        private TicketDao ticketDao;
    
        DaoFactory(String url, String username, String password) {
            this.url = url;
            this.username = username;
            this.password = password;
        }
    
        public static DaoFactory getInstance() {
            try {
                Class.forName(" com.mysql.cj.jdbc.Driverr"); 
                //Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
    
            }
    
            DaoFactory instance = new DaoFactory(
                    "jdbc:mysql://localhost:3306/ticket?useSSL=false&createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "laplace", "123456");
            return instance;
        }
    
        public Connection getConnection() throws SQLException {
            Connection connexion = DriverManager.getConnection(url, username, password);
            connexion.setAutoCommit(false);
            return connexion; 
        }
    
    	public ProjetDao getProjetDao() {
    		return projetDao;
    	}
    
    	public void setProjetDao(ProjetDao projetDao) {
    		this.projetDao = projetDao;
    	}
    
    	public TicketDao getTicketDao() {
    		return ticketDao;
    	}
    
    	public void setTicketDao(TicketDao ticketDao) {
    		this.ticketDao = ticketDao;
    	}
        
        
    
        // Récupération du Dao
        //public UtilisateurDao getUtilisateurDao() {
        //    return new UtilisateurDaoImpl(this);
        //}
    }

    et à l'exécution du batch j'ai l'erreur:

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'managerFactory': Unsatisfied dependency expressed through field 'projetManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'projetManager' defined in class path resource [org/example/demo/ticket/business/businessContext.xml]: Cannot resolve reference to bean 'daoFactory' while setting bean property 'daoFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'daoFactory' defined in class path resource [org/example/demo/ticket/consumer/consumerContext.xml]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639)
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    	at org.example.demo.ticket.batch.Main.main(Main.java:39)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'projetManager' defined in class path resource [org/example/demo/ticket/business/businessContext.xml]: Cannot resolve reference to bean 'daoFactory' while setting bean property 'daoFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'daoFactory' defined in class path resource [org/example/demo/ticket/consumer/consumerContext.xml]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:113)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1707)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1452)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656)
    	... 16 more
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'daoFactory' defined in class path resource [org/example/demo/ticket/consumer/consumerContext.xml]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
    	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:330)
    	... 29 more
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
    	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
    	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
    	... 39 more
    

    Je crois ne pas avoir la bonne classe alors pourrais-je avoir de l'aide 


    • Partager sur Facebook
    • Partager sur Twitter
      17 octobre 2022 à 16:13:49

      Tu melanges des objets manages par Spring(ProjectDao...) et non manages(DaoFactory), ce n'est pas permis
      • Partager sur Facebook
      • Partager sur Twitter
        21 octobre 2022 à 13:00:59

        bonjour,


        P.X.L a écrit:

        Tu melanges des objets manages par Spring(ProjectDao...) et non manages(DaoFactory), ce n'est pas permis


        je n'ai fait que suivre le tuto

        <?xml version="1.0" encoding="UTF-8"?>
        
        <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        
               xmlns="http://www.springframework.org/schema/beans"
        
               xsi:schemaLocation="
        
                    http://www.springframework.org/schema/beans
        
                    http://www.springframework.org/schema/beans/spring-beans.xsd">
        
         
        
            <!-- ===== Déclaration des DAO ===== -->
        
            <bean id="projetDao" class="org.example.demo.ticket.consumer.impl.dao.ProjetDaoImpl"/>
        
            <bean id="ticketDao" class="org.example.demo.ticket.consumer.impl.dao.TicketDaoImpl"/>
        
         
        
            <!-- ===== DaoFactory ===== -->
        
            <bean id="daoFactory" class="org.example.demo.ticket.business.impl.DaoFactory">
        
                <property name="projetDao" ref="projetDao"/>
        
                <property name="ticketDao" ref="ticketDao"/>
        
            </bean>
        
        </beans>






        -
        Edité par CoulYoul 21 octobre 2022 à 13:01:47

        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2022 à 14:11:56

          Dans ce cas, soit le tuto est mal fait soit tu l'as mal suivi, un object gere par Spring n'est pas instancie manuellement, et pourtant c'est ce que tu fais dans  DaoFactory.getInstance 

          Si c'est le tuto qui a introduit ce getInstance{et meme l'objet DaoFactory au complet en fait), change de tuto, si c'est toi, Spring etant un framework, il offre une maniere encadree de travailler, tu devrais essayer de comprendre sa philosophie en lisant la documentation.

          Pourquoi le getInstance est une mauvaise idee:

          1) c'est un singleton(?), dans un application c'est deja discutable d'en utiliser, dans une application Spring ca n'a aucun sens, vu qu'il gere le cycle de vie des objets et qu'un bean est par defaut un singleton

          2) tu ne geres pas les exceptions dedans

          3) il est mal implemente et va retourner chaque fois une nouvelle instance(si c'est voulu alors le nom est mal choisi, etant le nom de facto des singletons), ce qui n,a aucun sens pour une factory

          4) tu hardcodes url et identifiants

          5) il force un couplage fort entre la technologie(mysql) et les DAO, qui devraient faire abstraction de l'implementation du SGBDR

          Pourquoi DaoFactory est une mauvaise idee:

          Au dela de ca, garder des beans dans la factory pour les offrir via des getters n'a pas de sens, un bean s'acquière uniquement via injection de dependance.

          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2022 à 11:08:42

            la classe DaoFactory n'a pas ete implementée dans le tuto mais dans le consumerContext.xml du tuto nous avons

            <?xml version="1.0" encoding="UTF-8"?>
             
            <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             
                   xmlns="http://www.springframework.org/schema/beans"
             
                   xsi:schemaLocation="
             
                        http://www.springframework.org/schema/beans
             
                        http://www.springframework.org/schema/beans/spring-beans.xsd">
             
              
             
                <!-- ===== Déclaration des DAO ===== -->
             
                <bean id="projetDao" class="org.example.demo.ticket.consumer.impl.dao.ProjetDaoImpl"/>
             
                <bean id="ticketDao" class="org.example.demo.ticket.consumer.impl.dao.TicketDaoImpl"/>
             
              
             
                <!-- ===== DaoFactory ===== -->
             
                <bean id="daoFactory" class="org.example.demo.ticket.business.impl.DaoFactory">
             
                    <property name="projetDao" ref="projetDao"/>
             
                    <property name="ticketDao" ref="ticketDao"/>
             
                </bean>
             
            </beans>

             Une injection de dépendances plus sophistiquée - Simplifiez le développement d'applications Java avec Spring - OpenClassrooms

            Exemple pour le fichier consumerContext.xml

            Mieux utiliser Spring - Simplifiez le développement d'applications Java avec Spring - OpenClassrooms



            • Partager sur Facebook
            • Partager sur Twitter
              22 octobre 2022 à 18:07:26

              On implemente pas une classe dans un fichier xml, ca ne veut rien dire, je suppose que tu veux dire instancier

              peu importe ce qui se trouve dans le xml, tu fais un new dans le getInstance, et tu ne peux pas!

              • Partager sur Facebook
              • Partager sur Twitter
                22 octobre 2022 à 21:27:33

                et la property du bean , ne doit elle pas être une propriété de la classe?

                Quant je retire projetDao et ticketDAO comme propriété et ticketDao, j'ai un message d'erreur lorsque je compile le projet

                -
                Edité par CoulYoul 22 octobre 2022 à 21:29:55

                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2022 à 9:40:42

                  Commence par construire ton objet correctement, donc sans getInstance, si tu ne sais pas comment y injecter les parametres necessaires(url et credenetials) la documentation est spring est tres bien faite
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 octobre 2022 à 11:23:24

                    bonjour

                    package org.example.demo.ticket.business.impl;
                    
                    import java.sql.Connection;
                    import java.sql.DriverManager;
                    import java.sql.SQLException;
                    
                    import javax.inject.Inject;
                    import javax.inject.Named;
                    
                    import org.example.demo.ticket.consumer.contract.dao.ProjetDao;
                    import org.example.demo.ticket.consumer.contract.dao.TicketDao;
                    import org.springframework.beans.factory.annotation.Value;
                    import org.springframework.context.annotation.PropertySource;
                    import org.springframework.context.annotation.PropertySources;
                    
                    //@Named("daoFactory")
                    //@PropertySources({ @PropertySource("classpath:src/data/conf/db-ticket.properties") })
                    @PropertySources({ @PropertySource("classpath:/org/example/demo/ticket/bash/db-ticket.properties") })
                    public class DaoFactory {
                    	//@Value("${spring.datasource.url}")
                    	
                    	//@Configuration
                    	//@PropertySource("classpath:db.properties")
                    	//@PropertySource("classpath:root.properties")
                    	//System.out.println("Getting DBConnection Bean for App: "+env.getProperty("APP_NAME"));
                    	//root.properties    
                    	//APP_NAME=PropertySource Example
                    	//db-ticket.properties
                    	
                    	@Value( "${url}" )
                        private static String url;
                    	@Value( "${username}" )
                        private static String username;
                    	//@Value( "${password}" )
                        private static String password;
                    	//@Value( "${driverClassName}" )
                        private static String driver;
                        
                        //@Inject
                        //private ProjetDao projetDao;
                        //@Inject
                        //private TicketDao ticketDao;
                    
                        /*DaoFactory(String url, String username, String password) {
                            this.url = url;
                            this.username = username;
                            this.password = password;
                        }*/
                    
                        /*public static DaoFactory getInstance() {
                            try {
                                Class.forName(driver); 
                                //Class.forName("com.mysql.cj.jdbc.Driverr"); 
                                //Class.forName("com.mysql.jdbc.Driver");
                            } catch (ClassNotFoundException e) {
                    
                            }
                            
                            //DaoFactory instance = new DaoFactory(
                            //        "jdbc:mysql://localhost:3306/ticket?useSSL=false&createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "laplace", "123456");
                            //
                            
                            DaoFactory instance = new DaoFactory();
                            instance.setUrl(url);
                            instance.setUsername(username);
                            instance.setPassword(password); 
                            
                            //instance.setUrl("jdbc:mysql://localhost:3306/ticket?useSSL=false&createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC");
                            //instance.setUsername("laplace");
                            //instance.setPassword("123456");        
                            
                            return instance;
                        }*/
                    
                        public static Connection getConnection() throws SQLException {
                            Connection connexion = DriverManager.getConnection(url, username, password);
                            connexion.setAutoCommit(false);
                            return connexion; 
                        }
                    
                    	/*public ProjetDao getProjetDao() {
                    		return projetDao;
                    	}
                    
                    	public void setProjetDao(ProjetDao projetDao) {
                    		this.projetDao = projetDao;
                    	}
                    
                    	public TicketDao getTicketDao() {
                    		return ticketDao;
                    	}
                    
                    	public void setTicketDao(TicketDao ticketDao) {
                    		this.ticketDao = ticketDao;
                    	}*/
                    
                    	public String getUrl() {
                    		return url;
                    	}
                    
                    	public void setUrl(String url) {
                    		this.url = url;
                    	}
                    
                    	public String getUsername() {
                    		return username;
                    	}
                    
                    	public void setUsername(String username) {
                    		this.username = username;
                    	}
                    
                    	public String getPassword() {
                    		return password;
                    	}
                    
                    	public void setPassword(String password) {
                    		this.password = password;
                    	}
                        
                    	
                        
                    
                        // Récupération du Dao
                        //public UtilisateurDao getUtilisateurDao() {
                        //    return new UtilisateurDaoImpl(this);
                        //}
                    }
                    /**
                     * Manager des beans du package Ticket.
                     *
                     * @author lgu
                     */
                    public class TicketManagerImpl extends AbstractManagerImpl implements TicketManager {
                    //public class TicketManagerImpl implements TicketManager {
                    
                        @Inject
                        @Named("txManagerTicket")
                        private PlatformTransactionManager platformTransactionManager;
                        
                        private TransactionHelper transactionHelper;
                    
                    
                        public TicketManagerImpl() {
                    		super();
                    		// TODO Auto-generated constructor stub
                    	}
                        
                    
                    
                        @Override
                        public Ticket getTicket(Long pNumero) throws NotFoundException {
                            // Je n'ai pas encore codé la DAO
                            // Je mets juste un code temporaire pour commencer le cours...
                            if (pNumero < 1L) {
                                throw new NotFoundException("Ticket non trouvé : numero=" + pNumero);
                            }
                            //Evolution vEvolution = new Evolution(pNumero);
                            //vEvolution.setPriorite(10);
                            //return vEvolution;
                            Ticket ticket = getDaoFactory().getTicketDao().getById(pNumero);
                            return ticket;
                        }
                    
                    
                       
                    
                       
                        public int getCountTicket(RechercheTicket pRechercheTicket) {
                        	return  getDaoFactory().getTicketDao().count(pRechercheTicket);
                            // Je n'ai pas encore codé la DAO
                            // Je mets juste un code temporaire pour commencer le cours...
                            //int nbre = getDaoFactory().getCountTicket(pRechercheTicket);
                            //return 42;
                        }
                    
                    
                    	@Override
                    	public List<TicketStatut> getListTicketStatus() {
                    		List<TicketStatut> vList = getDaoFactory().getTicketDao().getListStatut();
                    		//List<TicketStatut> vList = null;
                    		return vList;
                    	}
                    
                    	@Override
                    	public List<Ticket> getListTicket() {  
                    		//List<Ticket> vList = getDaoFactory().getTicketDao().getListTicket(); 
                    		//List<Ticket> vList = getDaoFactory().getTicketDao().findAll();
                    		List<Ticket> vList = getDaoFactory().getTicketDao().findAll("anneau");
                    		
                    		
                    		/*List<Ticket> vList = new ArrayList<>();
                            for (int vI = 0; vI < 9; vI++) {
                                Ticket vTicket = new Evolution((long) vI);
                                vList.add(vTicket);
                            }*/
                    		return vList;
                    	}
                        
                    	@Override
                        public void changerStatut(Ticket pTicket, TicketStatut pNewStatut,
                                                  Utilisateur pUtilisateur, Commentaire pCommentaire) {
                    
                            TransactionStatus vTransactionStatus = platformTransactionManager.getTransaction(new DefaultTransactionDefinition());
                            try {
                                pTicket.setStatut(pNewStatut);
                                getDaoFactory().getTicketDao().updateTicket(pTicket);
                                // TODO : Ajout de la ligne d'historique + commentaire ...
                                
                                TransactionStatus vTScommit = vTransactionStatus;
                                vTransactionStatus = null;
                                platformTransactionManager.commit(vTScommit);
                            //} catch (Throwable vEx) {
                                platformTransactionManager.rollback(vTransactionStatus);
                            //    throw vEx;
                            //}
                            } finally {
                                if (vTransactionStatus != null) {
                                    platformTransactionManager.rollback(vTransactionStatus);
                                }
                            platformTransactionManager.commit(vTransactionStatus);
                            }
                        }
                    
                    
                    	/*@Override
                    	public void setDaoFactory(DaoFactory daoFactory) {
                    		// TODO Auto-generated method stub
                    		
                    	}
                    
                    
                    	@Override
                    	public DaoFactory getDaoFactory() {
                    		// TODO Auto-generated method stub
                    		//this.platformTransactionManager.
                    		return null;
                    	}*/
                    
                    	//@Override
                    	/*public DaoFactory getDaoFactory() {
                    		// TODO Auto-generated method stub
                    		this.platformTransactionManager.
                    		return null;
                    	}*/
                            
                      
                        
                        
                        
                    /*    
                        //@Override
                        public void changerStatut(Ticket pTicket, TicketStatut pNewStatut,  Utilisateur pUtilisateur, Commentaire pCommentaire) throws FunctionalException {
                        	
                        	MutableObject<TransactionStatus> vStatus = transactionHelper.beginTransaction();
                            try {
                                // le traitement transactionnel ...
                                throw new FunctionalException("...");
                    
                                transactionHelper.commit(vStatus);
                            } finally {
                                transactionHelper.rollback(vStatus);
                            }
                    
                            /*TransactionStatus vTransactionStatus = platformTransactionManager.getTransaction(new DefaultTransactionDefinition());
                            try {
                                pTicket.setStatut(pNewStatut);
                                getDaoFactory().getTicketDao().updateTicket(pTicket);
                                // TODO : Ajout de la ligne d'historique + commentaire ...
                                
                                platformTransactionManager.commit(vTransactionStatus);
                                vTransactionStatus = null;
                            } 
                            finally {
                            	if (vTransactionStatus != null) {
                                    platformTransactionManager.rollback(vTransactionStatus);
                                }
                            }
                            platformTransactionManager.commit(vTransactionStatus);*/
                     /*   }
                    
                        //@Override
                        public void changerStatut1(Ticket pTicket, TicketStatut pNewStatut,  Utilisateur pUtilisateur, Commentaire pCommentaire) {
                            TransactionTemplate vTransactionTemplate = new TransactionTemplate(platformTransactionManager);
                    
                            vTransactionTemplate.execute(new TransactionCallbackWithoutResult() {
                                @Override
                                protected void doInTransactionWithoutResult(TransactionStatus pTransactionStatus) {
                                    pTicket.setStatut(pNewStatut);
                                    getDaoFactory().getTicketDao().updateTicket(pTicket);
                                    // TODO Ajout de la ligne d'historique + commentaire ...
                                }
                            });
                            
                            /* Renvoyer un objet en sortie
                             HistoriqueStatut vHistorique =  vTransactionTemplate.execute(new TransactionCallback<HistoriqueStatut>() {
                            @Override
                            public HistoriqueStatut doInTransaction(TransactionStatus
                                                                        pTransactionStatus) {
                                pTicket.setStatut(pNewStatut);
                                getDaoFactory().getTicketDao().updateTicket(pTicket);
                    
                                HistoriqueStatut vHistoriqueStatut = new HistoriqueStatut();
                                // TODO Ajout de la ligne d'historique + commentaire ...
                                return vHistoriqueStatut;
                            }
                            });
                            
                            */
                            /* Demander vous-même l'annulation   setRollbackOnly()
                            vTransactionTemplate.execute(new TransactionCallbackWithoutResult() {
                            @Override
                            protected void doInTransactionWithoutResult(TransactionStatus
                                                                        pTransactionStatus) {
                               TicketStatut vOldStatut = pTicket.getStatut();
                               pTicket.setStatut(pNewStatut);
                               try {
                                getDaoFactory().getTicketDao().updateTicket(pTicket);
                                // TODO Ajout de la ligne d'historique + commentaire ...
                               } catch (TechnicalException vEx) {
                                pTransactionStatus.setRollbackOnly();
                                pTicket.setStatut(vOldStatut);
                               }
                           }
                             });
                            */
                    //    }
                    }
                    

                    the method getTicketDao() is undefined for the type DaoFactory




                    -
                    Edité par CoulYoul 24 octobre 2022 à 11:24:07

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 octobre 2022 à 12:21:50

                      Pourquoi veux tu le recuperer avec un getter alors que tu peux injecter la dependance?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 octobre 2022 à 12:28:07

                        je ne fais que suivre le tuto

                        classe TicketManagerImpl

                        https://openclassrooms.com/fr/courses/4504771-simplifiez-le-developpement-dapplications-java-avec-spring/4758625-gerer-les-transactions-avec-spring-tx

                        sinon comment injecter la dépendance sinon c'est ce que je croyais faire

                        @Inject
                         private TicketDao ticketDao;
                        
                        
                        public TicketDao getTicketDao() {
                                return ticketDao;
                            }
                        
                            public void setTicketDao(TicketDao ticketDao) {
                                this.ticketDao = ticketDao;
                            }
                        
                        
                        


                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 octobre 2022 à 12:36:53

                          Pas besoin de get pour injecter, un set ou mieux le constructeur suffit

                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 octobre 2022 à 12:41:13

                            franchement je ne vous suis pas

                            On voit bien que dans la classe TicketManagerImpl , on fait appel au getTicketDao()

                            -
                            Edité par CoulYoul 24 octobre 2022 à 12:41:51

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 octobre 2022 à 13:24:31

                              Et justement elle ne devrait pas, TicketManagerImpl est un bean, qu'est qui l'empeche de recevoir le DAO par injection de dependance?

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 octobre 2022 à 13:25:37

                                je conclue que le tuto est mal fait alors?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 octobre 2022 à 13:37:15

                                  Je ne l'ai pas lu, mais ca en a tout l'air.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 octobre 2022 à 13:45:33

                                    donc je n'ai plus besoin des propietés dans la classe DaoFactory

                                    <bean id="daoFactory" class="org.example.demo.ticket.business.impl.DaoFactory">
                                        </bean>

                                    @PropertySources({ @PropertySource("classpath:/org/example/demo/ticket/bash/db-ticket.properties") })
                                    public class DaoFactory {
                                        @Value( "${url}" )
                                        private static String url;
                                        @Value( "${username}" )
                                        private static String username;
                                        @Value( "${password}" )
                                        private static String password;
                                        @Value( "${driverClassName}" )
                                        private static String driver;
                                    
                                      public static Connection getConnection() throws SQLException {
                                            Connection connexion = DriverManager.getConnection(url, username, password);
                                            connexion.setAutoCommit(false);
                                            return connexion;
                                        }
                                    
                                    
                                    }

                                    public class TicketManagerImpl extends AbstractManagerImpl implements TicketManager {
                                    //public class TicketManagerImpl implements TicketManager {
                                    
                                        @Inject
                                        @Named("txManagerTicket")
                                        private PlatformTransactionManager platformTransactionManager;
                                        
                                        @Inject private TicketDao ticketDao;
                                    
                                    	private TransactionHelper transactionHelper;
                                    
                                         public TicketDao getTicketDao() {
                                    		return ticketDao;
                                    	}
                                    
                                          @Override
                                        public Ticket getTicket(Long pNumero) throws NotFoundException {        
                                            Ticket ticket = getTicketDao().getById(pNumero);
                                            //Ticket ticket = getDaoFactory().getTicketDao().getById(pNumero);
                                            return ticket;
                                        }
                                    }

                                    et

                                    getDaoFactory().getTicketDao() devient getTicketDao()



                                    -
                                    Edité par CoulYoul 24 octobre 2022 à 13:48:59

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 octobre 2022 à 13:53:21

                                      Pour definir les dependances, il faut savoir de quoi on a besoin, on peut synthetiser ca comme ca:

                                      credential/url <- sql connection <- dao <- services

                                      Donc tu dois avec un bean qui recoit les credentials/url en proprietes et fourni des connections, les DAO se voient injectees ce bean pour utiliser les connections, les services se voient injectes les beans DAO requis pour acceder aux resources requises

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      DaoFactory class

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown