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 :

Transactions Hibernate [Data]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 23
    Par défaut Transactions Hibernate
    Bonjour,


    Voila je suis débutant en Struts et j'ai quelques petit soucis pour lancer une petite application de test qui sert juste a créer un utilisateur en BDD afin d'apprendre les rudiements de Struts et le stockage en base via Hibernate le tout sous Tomcat 5.5.
    Pour cela je suis entrain de lire le livre Spring par la pratique dont je me suis inspiré pour me faire mon propre exemple

    Je n'ai pas completement terminé l'application, il me reste reste la partie jsp formulaire à coder.

    Mon application contient :

    - Un bean User avec getter et setter pour chaque propriétées
    - Une interface UserManager contenant les méthodes du bean User
    - Une classe UserManagerImpl implementant UserManager avec une méthode createUser.
    - Une interface UserDAO contenant les méthodes d'insertion en base.
    - Une classe UserDAOHibernate implementant cette derniere interface et utilisant org.springframework.orm.hibernate3.support.HibernateDaoSupport afin de passer par l'implementation hibernate de spring.


    L'erreur se situe au lancement le serveur Tomcat me sort l'erreur suivante :

    ERROR org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'userDAO' of bean class [com.testspring.service.impl.UserManagerImpl]: Bean property 'userDAO' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?...

    Voici mon fichier web.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
    61
    62
    63
    64
    65
    66
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    	<display-name>SpringTest</display-name>
     
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>/WEB-INF/applicationContext*.xml</param-value>
    	</context-param>
     
    	<filter>
    		<filter-name>Spring character encoding filter</filter-name>
    		<filter-class>
    			org.springframework.web.filter.CharacterEncodingFilter
    		</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>UTF-8</param-value>
    		</init-param>
    		<init-param>
    			<param-name>forceEncoding</param-name>
    			<param-value>true</param-value>
    		</init-param>
    	</filter>
     
    	<filter>
    		<filter-name>Hibernate Session In View Filter</filter-name>
    		<filter-class>
    			org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    		</filter-class>
    	</filter>
     
    	<filter-mapping>
    		<filter-name>Spring character encoding filter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
     
    	<filter-mapping>
    		<filter-name>Hibernate Session In View Filter</filter-name>
    		<url-pattern>*.action</url-pattern>
    	</filter-mapping>
     
    	<listener>
    		<listener-class>
    			org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
     
     
     
    	<servlet>
     		<servlet-name>action</servlet-name>
     		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
       		<init-param>
         		<param-name>config</param-name>
         		<param-value>/WEB-INF/struts-config.xml</param-value>
       		</init-param>
       		<load-on-startup>1</load-on-startup>
    	</servlet>
     
    	<servlet-mapping>
        	<servlet-name>action</servlet-name>
        	<url-pattern>*.action</url-pattern>
      	</servlet-mapping>
     
    </web-app>

    Mon fichier 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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    	  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    	  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
     
    	<bean id="userManager" class="com.testspring.service.impl.UserManagerImpl">
    		<property name="userDAO">
    			<ref bean="userDAO" />
    		</property>
    	</bean>
     
    	<aop:config>
    		<aop:advisor
    			pointcut="execution(* com.testspring.service.UserManager.*(..))"
    			advice-ref="txUserManager" />
    	</aop:config>
     
    	<tx:advice id="txUserManager">
    		<tx:attributes>
    			<tx:method name="create*" propagation="REQUIRED" />
    			<tx:method name="update*" propagation="REQUIRED" />
    			<tx:method name="delete*" propagation="REQUIRED" />
    			<tx:method name="*" propagation="REQUIRED" read-only="true" />
    		</tx:attributes>
    	</tx:advice>	
     
    </beans>
    Mon fichier applicationContext-hibernate.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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     
    	<bean id="sessionFactory"
    		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
     
    		<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="userDAO"
    		class="com.testspring.domain.dao.hibernate3.UserDAOHibernate">
    		<property name="sessionFactory">
    			<ref bean="sessionFactory" />
    		</property>
    	</bean>
    </beans>

    Pour finir mon fichier hibernate.cfg.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
     
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory>
    		<!-- datasource connection properties -->
    		<property name="connection.datasource">java:comp/env/jdbc/SpringTest</property>
     
    		<!-- dialect for MySQL -->
    		<property name="dialect">
    			org.hibernate.dialect.MySQLDialect
    		</property>
     
            <property name="hibernate.cache.provider_class">
    			org.hibernate.cache.EhCacheProvider
    		</property>
     
    		<property name="hibernate.cache.use_query_cache">true</property>
    		<property name="hibernate.show_sql">false</property>
    		<property name="hibernate.transaction.factory_class">
    			org.hibernate.transaction.JDBCTransactionFactory
    		</property>
     
     
    		<!-- mapping files -->
    		<mapping resource="com/testspring/domain/model/User.hbm.xml"/>
     
    	</session-factory>
    </hibernate-configuration>
    Tout est normalement ok au niveau de la connection à la BDD MySQL je n'ai plus d'erreur le contexte est normalement correctement configuré.

    Mais voila l'erreur citée plus haut m'empeche de démarrer, je pense avoir importer tout les librairies nécessaires.
    J'utilise Spring 2.0.2.



    Si qqun à une idée je suis preneur car là je vois pas trop et toutes mes recherches ce sont soldées par un échec...

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Citation Envoyé par g.greg45
    ERROR org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'userDAO' of bean class [com.testspring.service.impl.UserManagerImpl]: Bean property 'userDAO' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?...
    J'ai pas tout lu, mais ce pourrait-il que setUserDAO dans ta class UserManagerImpl se nomme setUserDao et non D A O en majuscule?
    L'erreur vient du fait qu'il n'arrive pas a setter le userDao dans UserManagerImpl.
    Alex

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 23
    Par défaut
    Bonjour,


    Effectivement j'avais un petit prb tout bete de majuscule pas au niveau que vous m'indiqiez mais effectivement une partie de mon prb venait de là.

    Maintenant que j'ai corrigé cela evidement j'ai un autre prb

    ERROR org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanDefinitionStoreException: Error 'Class that bean class [com.testspring.domain.dao.hibernate3.UserDAOHibernate] depends on not found' in resource 'ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]' at:
    Bean 'userDAO'; nested exception is java.lang.NoClassDefFoundError: com/testspring/domain/dao/UserDAO

    Pourtant l'interface com.testspring.domain.dao.UserDAO existe belle et bien...

    Mon prb avance mais d'erreur en erreur lol
    Si qqun à une idée

  4. #4
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Apparement il ne trouve pas la class com.testspring.domain.dao.hibernate3.UserDAOHibernate ou par extension le fichier dans ta webapp WEB-INF/classes/com/testspring/domain/dao/hibernate3/UserDAOHibernate.class
    Alex

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 23
    Par défaut
    Bonjour,


    Bon j'ai effectivement résolu tout mes petits problemes de chemin pour cause de majuscule....

    Le serveur Tomcat se lance maintenant correctement, le DataSource est trouvé...


    Par flemme de coder un formulaire en entier j'ai coder une petite classe Action qui fait appelle à mon UserManager pour insérer un objet en base.

    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
     
    public class InsertAction extends Action {
     
    	private UserManager userManager = null;
     
     
    	public void setUserManager(UserManager userManager) {
    		this.userManager = userManager;
    	}
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) throws Exception {
     
    		User usr = new User();
     
    		usr.setLastName("Toto");
    		usr.setFirstName("Tata");
    		usr.setAddress("22 rue titi");
     
    		userManager.createUser(usr);
     
    		return mapping.findForward("ok");
    	}
    }
    Tout se passe bien jusqu'a ce que je fasse appel à userManager.createUser(usr);

    Pour info voila mon interface userManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface UserManager {
     
    	void createUser(User user);
     
    }
    Ainsi que ma classe qui implemente cette derniere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class UserManagerImpl implements UserManager {
     
    	private UserDAO userDAO = null;
     
     
    	public void setUserDAO(UserDAO userDAO) {
    		this.userDAO = userDAO;
    	}
     
    	public void createUser(User user) {
    		userDAO.saveUser(user);
    	}
    }
    Enfin la méthode saveUser de mon DAO fait simplement getHibernateTemplate().save(user)


    Mon probleme est que j'obtiens un beau NullPointerException...

    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
     
    007-02-02 11:26:40,703 WARN org.apache.struts.action.RequestProcessor - Unhandled Exception thrown: class java.lang.NullPointerException
    2007-02-02 11:26:40,718 ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/SpringTest].[action] - "Servlet.service()" pour la servlet action a généré une exception
    at com.testspring.web.InsertAction.execute(InsertAction.java:32)
    	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Unknown Source)
    Et la je ne comprend pas bien pourquoi...
    Mes fichiers applicationContext sont posté dans le premier message et mon fichier de mapping User.hbm.xml est bien présent.

    Au passage j'utilise la version 3.1.2 d'Hibernate et 2.0 pour Spring
    Si qqun voit pourquoi ca bloque...

  6. #6
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private UserDAO userDAO
    n'est plus null? Spring injecte bien le dao?

    Pas facile de t'aider, parce que tu mets pas la bonne trace (ou complète), il y a quoi à com.testspring.web.InsertAction.execute(InsertAction.java:32)
    Alex

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

Discussions similaires

  1. Les types de transactions Hibernate
    Par ghir_ana dans le forum Hibernate
    Réponses: 0
    Dernier message: 03/05/2015, 15h15
  2. JSF et les Transactions hibernate
    Par mobuho dans le forum JSF
    Réponses: 4
    Dernier message: 01/03/2012, 13h54
  3. sessions et transaction hibernate
    Par fabien.larrieu dans le forum Hibernate
    Réponses: 1
    Dernier message: 21/09/2011, 10h05
  4. Utilisation des intercepteurs (session, transaction, hibernate).
    Par zuzuu dans le forum Persistance des données
    Réponses: 9
    Dernier message: 06/03/2009, 15h11

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