2014-11-04 62 views
1

我正在做一個Spring 3 MVC Hibernate Web應用程序。我面臨的問題是應用程序正常工作,但問題出現時,我打電話多6或7數據庫調用.Means嘗試通過執行少量查詢來訪問數據。首先執行6到7個查詢,但在那之後,查詢停止執行意味着所有應用程序都沒有響應。非常奇怪的情況。我正在粘貼小服務程序的XML服務,實現控制器和DAO請指導我在哪裏,我錯了尋找,但仍然沒有解決春季3 MVC查詢不會執行幾個調用

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/MyData/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <!-- Spring Database DataSource --> 
    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <beans:property name="url" 
      value="jdbc:mysql://localhost:3306/health" /> 
     <beans:property name="username" value="***" /> 
     <beans:property name="password" value="***" /> 
    </beans:bean> 

    <!-- Hibernate 3 Session Factory --> 

    <beans:bean id="enversListener" class="org.hibernate.envers.event.AuditEventListener" /> 

    <beans:bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <beans:property name="dataSource" ref="dataSource" /> 
     <beans:property name="packagesToScan" value="com.***.model"/> 
     <beans:property name="hibernateProperties"> 
      <beans:props> 
        <beans:prop key="dialect">org.hibernate.dialect.HSQLDialect</beans:prop> 
        <beans:prop key="hibernate.jdbc.batch_size">20</beans:prop> 
        <beans:prop key="show_sql">true</beans:prop> 
        <beans:prop key="hbm2ddl.auto">update</beans:prop> 
      </beans:props> 
     </beans:property> 

     <beans:property name="eventListeners"> 
      <beans:map> 
       <beans:entry key="post-insert"><beans:ref local="enversListener" /></beans:entry> 
       <beans:entry key="post-update"><beans:ref local="enversListener" /></beans:entry> 
       <beans:entry key="post-delete"><beans:ref local="enversListener" /></beans:entry> 
       <beans:entry key="pre-collection-update"><beans:ref local="enversListener" /></beans:entry> 
       <beans:entry key="pre-collection-remove"><beans:ref local="enversListener" /></beans:entry> 
       <beans:entry key="post-collection-recreate"><beans:ref local="enversListener" /></beans:entry> 
     </beans:map> 
     </beans:property> 

    </beans:bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <beans:property name="sessionFactory" ref="sessionFactory" /> 
    </beans:bean> 

    <!-- Bean Defination --> 
    <beans:bean id="userDao" class="com.***.DAO.UserDaoImpl"/> 
    <beans:bean id="packDao" class="com.***.DAO.PackageDaoImpl"/> 
    <beans:bean id="adminDao" class="com.***.DAO.AdminDaoImpl"/> 
    <beans:bean id="branchDao" class="com.***.DAO.BranchDaoImpl"/> 
    <beans:bean id="companyDao" class="com.***.DAO.CompanyDaoImpl"/> 
    <beans:bean id="SubpackDao" class="com.***.DAO.SubpackageDaoImpl"/> 

    <!-- Services Bean --> 
    <beans:bean id="userService" class="com.***.services.UserServiceImpl"/> 
    <beans:bean id="packageService" class="com.***.services.PackageServiceImpl"/> 


</beans:beans> 
接收到請求並調用服務

1.控制器類實現。

@Controller 
    @RequestMapping(value="/PackageController") 
    public class PackageController implements PackageService{ 

     private PackageService packService; 

     @Autowired 
     @Qualifier("packageService") 
     public void setPackService(PackageService packService) { 
      this.packService = packService; 
     } 

     @RequestMapping(value="/get_package_list",method=RequestMethod.POST,produces="application/json") 
     public @ResponseBody String callgetPackageList(){ 
      System.out.println("Get the package list"); 
      List<Package> packageList = this.getPackageList(); 
      Iterator <Package> itTemp = packageList.iterator(); 
      JSONObject json=null; 
      JSONArray json_data_array= new JSONArray(); 

      while(itTemp.hasNext()) 
      { 
       Package packageTemp = itTemp.next(); 
       json = new JSONObject(); 
       try { 
        json.put("Id", packageTemp.getPackageId()); 
        json.put("PackageName", packageTemp.getPackageName()); 
        json_data_array.put(json); 

       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

      json = new JSONObject(); 
      try { 
       json.put("Id", "custom"); 
       json.put("PackageName", "Customise Package"); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      json_data_array.put(json); 

      return json_data_array.toString(); 
     } 
    @Override 
     public List<Package> getPackageList() { 
      // TODO Auto-generated method stub 
      return packService.getPackageList(); 
     } 
    } 

3.服務實現,其中調用dao方法並應用事務性註釋。

public class PackageServiceImpl implements PackageService{ 

     private PackageDao packageDao; 

     @Autowired 
     @Qualifier("packDao") 
     public void setPackageDao(PackageDao packageDao) { 
      this.packageDao = packageDao; 
     } 

     @Override 
     @Transactional 
     public List<Package> getPackageList() { 
      return packageDao.getPackageList(); 
     } 
    } 

4.將實際查詢寫入執行主要問題的Dao實現在於serviceimplementation和package我猜測。

public class PackageDaoImpl implements PackageDao{ 

      private SessionFactory sessionFactory; 
      private SubpackageDao subpack; 

      @Autowired 
      @Qualifier("sessionFactory") 
      public void setSessionFactory(SessionFactory sessionFactory) { 
       this.sessionFactory = sessionFactory; 
      } 

      @Override 
      public List<Package> getPackageList() { 

       Session session=sessionFactory.openSession(); 
       List<Package> packageListTemp = null; 
       Criteria criteria = session.createCriteria(Package.class); 
       criteria.setFetchMode("subpackages", FetchMode.SELECT); 
       packageListTemp = criteria.list(); 
       return packageListTemp; 
      } 
     } 

回答

2

終於拿到誰作爲我 問題的根源是在同樣的問題絆倒希望它可以幫助別人的答案

Session session=sessionFactory.openSession(); 

按當我們使用的openSession相關HibernateTransaction後而不是getCurrentSession,會話在作用域彈簧容器之外打開。由於結果會話沒有關閉,因此該應用程序未響應查詢調用。