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

Erreur NullPointerExecption pour SessionFactory


Sujet :

Spring Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Par défaut Erreur NullPointerExecption pour SessionFactory
    Bonjour,

    Je suis en train de commencer un projet web utilisant Spring 3.1.1 et Hibernate.
    Les dépendances de librairie sont gérés par Maven.
    J'utilise certaines annotations pour éviter de déclarer tous mes contrôleurs, mes vues. Par contre, je ne sais pas si je les utilise correctement en ce qui concerne les Dao.
    Comme beaucoup je n'aime pas recoder plein de fois les mêmes fonctions. Alors j'ai décidé de faire des classes génériques :
    • Model : GenericEntity
      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
      import java.io.Serializable;
      import javax.persistence.GeneratedValue;
      import javax.persistence.GenerationType;
      import javax.persistence.Id;
      import javax.persistence.MappedSuperclass;
       
      @MappedSuperclass
      public abstract class GenericEntity implements Serializable {
       
          /**
           * Element Identified an Entity
           */
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          private Integer id;
       
          public Integer getId() {
              return id;
          }
       
          public void setId(Integer id) {
              this.id = id;
          }
      }
    • Dao : GenericEntityDao
      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
      import java.util.List;
       
      public interface GenericEntityDao<T extends GenericEntity> {
       
          T save(T entity);
          T merge(T entity);
          void delete(T entity);
       
          T getById(Long id);
       
          List<T> getAll();
          List<T> getAllWithPagination(int start, int count); 
          int count();
       
          Class<T> getEntityClass();
      }
    • Implémenation Dao : HibernateGenericEntityDao
      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
      67
      68
      import java.util.List;
      import javax.transaction.Transactional;
      import org.hibernate.Criteria;
      import org.hibernate.Session;
      import org.hibernate.SessionFactory;
      import org.hibernate.criterion.Projections;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Repository;
      
      @Repository
      @Transactional
      public abstract class HibernateGenericEntityDao<T extends GenericEntity> implements GenericEntityDao<T> {
       
          @Autowired
          private SessionFactory sessionFactory;
       
          private Class<T> entityClass;
       
          public HibernateGenericEntityDao(Class<T> entityClass) {
              this.entityClass = entityClass;
          }
       
          public T save(T entity) {
              getSession().saveOrUpdate(entity);
              return entity;
          }
       
          public T merge(T entity) {
              return (T) getSession().merge(entity);
          }
       
          public void delete(T entity) {
              getSession().delete(entity);
          }
       
          public T getById(Long id) {
              return (T) getSession().get(getEntityClass(), id);
          }
       
          public List<T> getAll() {
              return createCriteria().list();
          }
       
          public List<T> getAllWithPagination(int start, int count) {
              return createCriteria()
                      .setFirstResult(start)
                      .setMaxResults(count)
                      .list();
          }
       
          public int count() {
              Criteria criteria = createCriteria();
              criteria.setProjection(Projections.rowCount());
              return ((Number) criteria.list().get(0)).intValue();
          }
       
          public Class<T> getEntityClass() {
              return this.entityClass;
          }
       
          protected Session getSession() {
              return sessionFactory.getCurrentSession();
          }
       
          protected Criteria createCriteria() {
              return getSession().createCriteria(getEntityClass());
          }
      }


    Voici les fichiers de configurations :
    • 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
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
          <context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/applicationContext.xml</param-value>
          </context-param>
          <listener>
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
          <servlet>
              <servlet-name>dispatcher</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              <load-on-startup>2</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>dispatcher</servlet-name>
              <url-pattern>/</url-pattern>
          </servlet-mapping>
          <session-config>
              <session-timeout>
                  30
              </session-timeout>
          </session-config>
          <welcome-file-list>
              <welcome-file>/</welcome-file>
          </welcome-file-list>
      </web-app>
    • 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
      <?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:p="http://www.springframework.org/schema/p"
             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-3.1.xsd
             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
       
          <bean id="propertyConfigurer"
                class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
                p:location="/WEB-INF/properties/jdbc.properties" />
       
          <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          p:driverClassName="${jdbc.driverClassName}"
          p:url="${jdbc.url}"
          p:username="${jdbc.username}"
          p:password="{jdbc.password}" />
       
          <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
             <property name="dataSource" ref="dataSource"/>
             <property name="packagesToScan" value="com.shouwy.series.dao" />
             <property name="hibernateProperties">
                 <props>
                     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                 </props>
             </property>
          </bean>
          <!--Transactional--> 
          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" autowire="byName">
              <property name="sessionFactory" ref="sessionFactory" />
          </bean>
          <tx:annotation-driven transaction-manager="transactionManager"/>
          <!--DAO-->
          <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
       
      </beans>
    • dispatcher-servlet.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
      <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:context="http://www.springframework.org/schema/context"
         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-3.0.xsd
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.0.xsd">
       
         <context:component-scan base-package="com.shouwy.series" />
       
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
         </bean>
       
      </beans>


    Maintenant il manque le model et le Controller:
    • Controller : SeriesController
      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
      import com.shouwy.series.dao.hibernate.HibernateSerieDao;
      import com.shouwy.series.model.Serie;
      import java.util.ArrayList;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.servlet.ModelAndView;
       
      @Controller
      public class SeriesController {
       
          @RequestMapping(value = "/series", method = RequestMethod.GET)
          public ModelAndView series(){
              HibernateSerieDao hsd = new HibernateSerieDao();
              ArrayList<Serie> listSeries = (ArrayList<Serie>) hsd.getAll();
       
              ModelAndView model = new ModelAndView();
              model.setViewName("listseries");
       
              model.addObject("list", listSeries);
              return model;
          }
      }
    • Model : Serie
      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
      import com.shouwy.series.dao.generic.GenericEntity;
      import javax.persistence.Column;
      import javax.persistence.Entity;
      import javax.persistence.Table;
       
      @Entity
      @Table(name = "serie")
      public class Serie extends GenericEntity {
       
          @Column(name = "Nom")
          private String nom;
          @Column(name = "Synopsis")
          private String synopsis;
          @Column(name = "IdType")
          private int idType;
          @Column(name = "idEtat")
          private int idEtat;
          @Column(name = "idEtatPersonnel")
          private int idEtatPersonnel;
      }


    Je ne sais pas vraiment si il s'agit d'une erreur de configuration de spring, hibernate ou si il s'agit d'une erreur/oubli dans mon code.
    Je vous ai mis en rouge la ligne qui me crée le NullPointerException

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Ajoute la déclaration de package à scanner dans applicationContext.xml.

    A+.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Par défaut
    Merci de ta réponse mais j'ai mis une déclaration comme celle-ci dans le dispatcher-servlet.xml.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <context:component-scan base-package="com.shouwy.series" />
    Et j'ai aussi mis dans les properties du sessionFactory un packagesToScan.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
           <property name="dataSource" ref="dataSource"/>
           <property name="packagesToScan" value="com.shouwy.series.dao" />
           <property name="hibernateProperties">
               <props>
                   <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
               </props>
           </property>
        </bean>
    Cela n'est-il pas suffisant pour la création du Factory?

    Sinon j'ai testé de mettre ce qui était dans dispatcher dans applicationContext.xml mais l’opération n'a pas été plus concluante que ce que j'avais avant.

    Ou alors je me suis trompé de déclaration et pas les properties nécessaires.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="packagesToScan" value="com.shouwy.series.dao" />
    ça c'est pour les Entités.
    Tu ne dois pas mettre dans applicationContext ce qui est dans dispatcher-servlet. Ce qui se trouve dans applicationContext est visible dans dispatcher-servlet mais pas l'inverse, tu ne dois pas les mélanger.

Discussions similaires

  1. [MySQL] Erreur sql pour inserer des checkbox
    Par digger dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/11/2005, 11h06
  2. erreur code pour désactiver molette souris.
    Par rangernoir dans le forum Access
    Réponses: 2
    Dernier message: 27/09/2005, 10h14
  3. [Débutant(e)] Message d'erreur JDBC pour oracle
    Par krakatoe dans le forum JDBC
    Réponses: 1
    Dernier message: 14/09/2005, 16h44
  4. Erreur lancement pour DTS
    Par HULK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/08/2005, 12h46
  5. [ODBC] erreur SQL pour les unions qui renvoient vide
    Par fabriceMerc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/11/2003, 11h06

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