2015-08-27 4 views
-4

Exception lors de l'attribution de l'usine de la sessionexception de pointeur nul générée par SessionFactory au printemps et en veille prolongée

java.lang.NullPointerException 
    at com.span.hotelmanagement.persistance.CustomerDAOImpl.saveCustomer(CustomerDAOImpl.java:41) 
    at com.span.hotelmanagement.business.CustomerRequestManagerImpl.saveUser(CustomerRequestManagerImpl.java:30) 

    at com.span.hotelmanagement.controller.CustomerBean.saveCustomer(CustomerBean.java:121) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:328) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:273) 
    at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) 
    at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java:65) 
    at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
    at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:775) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

ApplicationContext xml

<?xml version="1.0"?> 
 

 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xmlns:context="http://www.springframework.org/schema/context" 
 
\t xmlns:jee="http://www.springframework.org/schema/jee" 
 
\t xmlns:tx="http://www.springframework.org/schema/tx" 
 
\t xmlns:p="http://www.springframework.org/schema/p" 
 
\t xmlns:task="http://www.springframework.org/schema/task" 
 
\t xsi:schemaLocation=" 
 
\t http://www.springframework.org/schema/beans 
 
\t http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
 
\t http://www.springframework.org/schema/context 
 
\t http://www.springframework.org/schema/context/spring-context-3.2.xsd 
 
\t http://www.springframework.org/schema/jee 
 
\t http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
 
\t http://www.springframework.org/schema/tx 
 
\t http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
 
\t http://www.springframework.org/schema/task 
 
\t http://www.springframework.org/schema/task/spring-task-3.2.xsd 
 
\t http://www.springframework.org/schema/security 
 
\t http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 
 
\t \t 
 
\t <context:component-scan base-package="com.span.hotelmanagement"> 
 
\t <context:include-filter type="aspectj" expression="com.span.hotelmanagement.*" /> 
 
</context:component-scan> 
 
\t <context:annotation-config /> 
 
\t <!-- Newly changed query --> 
 
\t <!-- <context:property-placeholder location=classpath:database.properties/> --> 
 
\t 
 
\t <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
 
\t \t \t p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" 
 
\t \t \t p:password="${jdbc.password}"/>--> 
 
\t 
 
\t <!-- Create DataSource Bean --> 
 
     
 
    <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
 
     <property name="jndiName" value="java:comp/env/jdbc/TestDB"/> 
 
    </bean> 
 
    --> 
 
\t <!-- <jee:jndi-lookup id="dataSource" 
 
\t jndi-name="java:comp/env/jdbc/hotelmanagement" expected-type="javax.sql.DataSource" /> 
 
\t  --> 
 
\t  
 
\t  <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
 
    <property name="url" value="jdbc:mysql://localhost:3306/hotelmanagement" /> 
 
    <property name="username" value="root" /> 
 
    <property name="password" value="[email protected]" /> 
 
    </bean> 
 
\t <bean id="sessionFactory" 
 
\t \t class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
 
\t \t <property name="dataSource" ref="dataSource" /> 
 
\t \t 
 
\t \t <property name="configLocation"> 
 
\t \t \t <value>./WEB-INF/hibernate.cfg.xml</value> 
 
\t \t </property> 
 
\t \t <!-- <property name="configurationClass"> 
 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
 
     </property> --> 
 
\t \t <property name="hibernateProperties"> 
 
\t \t \t <map> 
 
\t \t \t \t <entry key="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
 
\t \t \t \t <entry key="hibernate.show_sql" value="true" /> 
 
\t \t \t \t <!-- <entry key="hibernate.hbm2ddl.auto" value="create"/> --> 
 
\t \t \t </map> 
 
\t \t </property> 
 
\t </bean> 
 
\t <tx:annotation-driven/> <!--transaction-manager="transactionManager"--> 
 
\t <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
 
     \t \t \t p:sessionFactory-ref="sessionFactory" /> 
 
\t <!-- <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> 
 
\t \t <property name="scopes"> 
 
\t \t \t <map> 
 
\t \t \t \t <entry key="view"> 
 
\t \t \t \t \t <bean class="com.span.hotelmanagement.common.SpringViewScoped" /> 
 
\t \t \t \t </entry> 
 
\t \t \t </map> 
 
\t \t </property> 
 
\t </bean> --> 
 
\t 
 
    \t <bean id="viewResolver" 
 
\t \t class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
 
\t \t <property name="cache" value="true" /> 
 
\t \t <property name="viewClass" 
 
\t \t \t value="org.springframework.web.servlet.view.JstlView" /> 
 
\t \t 
 
\t </bean> 
 
\t 
 
\t 
 
\t <task:annotation-driven /> 
 
</beans>

classe client OAC Impl

package com.span.hotelmanagement.persistance; 
import java.io.Serializable; 
import java.util.List; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.stereotype.Repository; 
import com.span.hotelmanagement.entity.CustomerEntry; 

@Repository 
public class CustomerDAOImpl extends AbstractGenericDAOHibernate<CustomerEntry, Long> 
implements CustomerDAO,Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -276032705968481483L; 

/* @Autowired 
    @Qualifier("sessionFactory") 
    public SessionFactory sessionFactory;*/ 

    public void deleteCustomer(CustomerEntry customer) { 


    } 

    public CustomerEntry saveCustomer(CustomerEntry customer) { 

     CustomerEntry cObj=null; 
     Session session =null; 
     try 
     { 
      session = sessionFactory.getCurrentSession(); 

      AbstHibernateUtil.CreateSession(sessionFactory); 
      AbstHibernateUtil.beginTransaction(); 
      if(customer != null) 
      { 
       cObj= new CustomerEntry(); 
       cObj=(CustomerEntry)save(customer); 
      } 
      //AbstHibernateUtil.commit(); 
     } 
     catch(Exception e) 
     { 
     e.printStackTrace(); 
     } 
     finally{ 
      AbstHibernateUtil.endTransaction(); 
      AbstHibernateUtil.closeSession(); 
     } 
     return cObj; 
    } 

    public List<CustomerEntry> getCategoryList() { 
     return null; 
    } 
    // TODO Auto-generated method stub 


} 

lors du débogage du code seesionFactoru.getsession renvoie la valeur null. S'il vous plaît me aider comme il est d'arrêter la poursuite de la mise en œuvre

+1

Veuillez fournir votre configuration «CustomerDAOImpl» et de ressort et expliquer ce que vous allez faire. L'exception de publication seulement devrait fermer cette question. –

+0

salut j'ai posté toutes les classes liées – user3933293

Répondre

0

Bon si vous avez dans votre configuration de ressort ceci:

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 

     <property name="configLocation"> 
      <value>./WEB-INF/hibernate.cfg.xml</value> 
     </property> 
     <!-- <property name="configurationClass"> 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
     </property> --> 
     <property name="hibernateProperties"> 
      <map> 
       <entry key="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
       <entry key="hibernate.show_sql" value="true" /> 
       <!-- <entry key="hibernate.hbm2ddl.auto" value="create"/> --> 
      </map> 
     </property> 
    </bean> 

Cela signifie que le printemps gère votre sessionFactory.

Mais dans votre code que vous avez quelque chose comme ça (ce qui est grand non non):

//What is this ? You dont need to care about creating session here otherwise you will have serious problem with transaction management and besides that you can see other exceptions 
AbstHibernateUtil.CreateSession(sessionFactory); 

Comment ça devrait ressembler à:

@Repository 
    @Transactional 
    public class CustomerDAOImpl extends AbstractGenericDAOHibernate<CustomerEntry, Long> 
    implements CustomerDAO,Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -276032705968481483L; 

    @Autowired 
    @Qualifier("sessionFactory") 
    public SessionFactory sessionFactory; 

    public void deleteCustomer(CustomerEntry customer) {} 

    public CustomerEntry saveCustomer(CustomerEntry customer) { 
     CustomerEntry cObj=null; 
     Session session =null; 
     try { 
      session = sessionFactory.getCurrentSession(); 
      if(customer != null){ 
       cObj= new CustomerEntry(); 
       cObj=(CustomerEntry)save(customer); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
     return cObj; 
    } 

    public List<CustomerEntry> getCategoryList() { 
     return null; 
    } 
} 

Une autre chose que vous ne avez pas besoin de vous soucier de votre gestion des transactions. Puisque vous avez dit au printemps que:

<tx:annotation-driven/> <!--transaction-manager="transactionManager"--> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
       p:sessionFactory-ref="sessionFactory" /> 

Vous ne devez démarrer manuellement AbstHibernateUtil.beginTransaction(); et fin AbstHibernateUtil.endTransaction();. Vous devez marquer votre classe CustomerDAOImpl ou la méthode saveCustomer comme @Transactional

Un autre problème est le suivant: AbstHibernateUtil.closeSession();. Lorsque vous avez défini au printemps sessionFactory haricot vous lui avez dit quelque chose comme ça: Je ne me soucie pas d'ouverture et de fermeture de session. Le printemps, vous devez le faire maintenant. Alors maintenant ceci: sessionFactory.getCurrentSession(); est exactement ce dont vous avez besoin. Rien de plus.

Vous devez déplacer sessionFactory à cette classe car non seulement CustomerDAOImpl utilise l'usine.

Espérons que cela efface certains de vos problèmes pour le moment.

+0

Mis à jour avec 'sessionFactory' –