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 :

NullPointerException avec un intercepteur OpenSessionInView


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut NullPointerException avec un intercepteur OpenSessionInView
    Bonjour à tous,

    Après avoir écumé tous les forums d'internet (au moins), j'en viens à vous afin de résoudre mon problème de NullPointerException (l'un ou l'autre, même cause, différents effets )

    Le contexte est le suivant, nous sommes en train de développer une application web avec spring 2.5/hibernate (3.3).

    Tout allait bien jusqu'à quelques jours où nous avons rencontré des problèmes de performances: forcément, à force les relations à lazy="false" dans les mappings hibernate, il arrive un moment où on commence à être un peu juste en mémoire.

    Donc j'ai commencé à passer certains champs à lazy="true" et... c'est là que les problèmes sont apparus.

    J'ai commencé à mettre en place un intercepteur OpenSessionInView (osiv) dans l'application:

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    <?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:context="http://www.springframework.org/schema/context"
    	xmlns:security="http://www.springframework.org/schema/security"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xsi:schemaLocation="
                http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/security
                http://www.springframework.org/schema/security/spring-security.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
     
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    		<property name="driverClassName">
    			<value>oracle.jdbc.driver.OracleDriver</value>
    		</property>
    		<property name="url">
    			<bean class="org.springframework.jndi.JndiObjectFactoryBean">
                    <property name="jndiName">
                       <value>java:comp/env/url</value>
                    </property>
                </bean>
    		</property>
    		<property name="username">
    			 <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                    <property name="jndiName">
                       <value>java:comp/env/login</value>
                    </property>
                </bean>
    		</property>
    		<property name="password">
    			 <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                    <property name="jndiName">
                       <value>java:comp/env/pwd</value>
                    </property>
                </bean>
    		</property>
    	</bean>
     
    	<!-- ON ACTIVE LES TRANSACTIONS VIA LES ANNOTATIONS -->
    	<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    		<property name="properties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    				<prop key="hibernate.show_sql">false</prop>
     
    				<!-- Gestion du cache -->
    				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
    				<prop key="hibernate.second_level_cache">true</prop>
    				<prop key="hibernate.use_query_cache">true</prop>
    				<prop key="net.sf.ehcache.configurationResourceName">/conf/ehcache.xml</prop>
    				<prop key="hibernate.generate_statistics">true</prop>
    				<prop key="hibernate.cache.use_structured_entries">true</prop>				
    			</props>
    		</property>
    	</bean>
     
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="mappingLocations">
    		 	<value>classpath*:hibernate/**/*.hbm.xml</value>
    		 </property>
    		<property name="dataSource" ref="dataSource"></property>
    		<property name="hibernateProperties" ref="hibernateProperties" />
    	</bean>
     
    	<!--  Web Interceptors -->
    	<bean id="openSessionInViewInterceptor"
    	    class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
    	    <property name="sessionFactory">
    	        <ref local="sessionFactory"/>
    	    </property>
    	    <property name="flushModeName">
    	        <value>FLUSH_AUTO</value>
    	    </property>
    	</bean>
    </beans>
    J'ai ensuite modifié le "PersistenceContext" (Extended) de mes services ainsi:

    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
     
    @Service("I_AccountService")
    @RemotingDestination(value = "accountDest", channels = {"my-amf" })
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    public class AccountService extends IndividuService  implements I_AccountService {
     
    	/**
             * DAO individu.
             */
    	@Autowired
    	private IndividuDAO individuDAO;
     
    	/**
             * Methode get.
             * @param id identifiant du compte
             * @return individu
             */
    	public Individu get(Integer id) {
    		return individuDAO.get(id);
    	}
     
    	/**
             * Recherche par login.
             * @param login login
             * @return individu
             */
    	public Individu findByLogin(String login) {
    		return individuDAO.findByLogin(login);
    	}
    }
    Tout fonctionne bien en fait jusqu'à ce que je change de page. Lorsque l'application tente de faire un flush (grace au mode "auto" définit dans la configuration), j'ai une magnifique 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    java.lang.NullPointerException
    	org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
    	org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor.postHandle(OpenSessionInViewInterceptor.java:181)
    	org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter.postHandle(WebRequestHandlerInterceptorAdapter.java:61)
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:886)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
    	org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    	org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
    	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    	org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
    	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
    	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    Malgré mes différentes recherches, je n'ai pas pu trouver de correctif.

    D'avance merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Je crois que je suis allé un peu vite en besogne (un peu trop la tête dans le guidon avec des histoires d'OSIV ^^), j'ai une lazyInitializationException lorsque j'essaye d'accéder à une propriété dans mon controller.

    Il semble que l'objet ne soit accessible qu'au niveau du service. Dès lors que le service rend la main au controller, des Lazy Exceptions sont levées.

    Comment puis-je faire pour qu'au niveau des controllers, puis au niveau des vues, je puisse avoir accès aux propriétés en lazy?

Discussions similaires

  1. java.lang.NullPointerException avec sum
    Par newmar dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/06/2008, 16h20
  2. NullPointerException avec des ArrayList
    Par Mchupakabra dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/04/2008, 21h48
  3. problème avec l'intercepteur Preparable
    Par mrjeronimo dans le forum Struts 2
    Réponses: 1
    Dernier message: 03/04/2008, 10h07
  4. nullPointerException avec JBoss et Log4j
    Par ]matmat[ dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 03/05/2007, 17h33
  5. NullPointerException avec Graphics?
    Par charaf dans le forum Graphisme
    Réponses: 7
    Dernier message: 20/06/2006, 11h25

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