configuring hibernate datasource in spring xml

白昼怎懂夜的黑 提交于 2019-12-23 04:33:19

问题


I get below error while running my web application. I had problems in configuring hibernate & spring with right jars. After i crossed that hurdle after working on it for hours, i am getting problem in hibernate datasource. The session factory and dao beans are getting initialized properly by spring but when i access method in dao i get error...

    INFO:   Attestation_spring_hibernate was successfully deployed in 11,309 milliseconds.
INFO:   before calling rateDAO.getCount()
INFO:   inside getSessionFactory()
WARNING:   StandardWrapperValve[dispatcher]: Servlet.service() for servlet dispatcher threw exception
java.lang.UnsupportedOperationException: Not supported by BasicDataSource
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1062)
    at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:214)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:157)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:56)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:161)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1859)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1836)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816)
    at org.hibernate.loader.Loader.doQuery(Loader.java:900)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
    at org.hibernate.loader.Loader.doList(Loader.java:2526)
    at org.hibernate.loader.Loader.doList(Loader.java:2512)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342)
    at org.hibernate.loader.Loader.list(Loader.java:2337)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1662)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374)
    at daoImpl.RateDAO.getRateById(RateDAO.java:149)
    at controller.Controller1.welcome(Controller1.java:47)

Below is my application context.xml..

   <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test_amar"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
    <property name="initialSize" value="2"></property>    
        <property name="maxActive" value="5"></property>    
    <property name="validationQuery" value="SELECT 1"/>
  </bean>

  <!-- Hibernate Session Factory -->
  <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="packagesToScan">
      <array>
        <value>entities</value>
      </array>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="dialect">org.hibernate.dialect.MySQLDialect</prop>
        </props>

    </property>
  </bean>

i use spring3 & hibernate4. It appears there is configuration error in my datasource. but i am not able to locate it.

From the server log below , i see that dao & session factory beans are instantiated properly.

INFO:   Loading XML bean definitions from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
INFO:   JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
INFO:   JSR-330 'javax.inject.Named' annotation found and supported for component scanning
INFO:   JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO:   Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1020cb7: defining beans [**controller1,rateDAO**,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping#0,urlMapping,viewResolver,indexController,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@fca094
INFO:   Mapped URL path [/controller1] onto handler 'controller1'
INFO:   Mapped URL path [/controller1/*] onto handler 'controller1'

Kindly assist..


回答1:


Accoording to the latest version, the method getConnection(user, password) is not supported, but hibernate should not be calling that method.

You can use the spring provided org.springframework.jdbc.datasource.DriverManagerDataSource or the com.mysql.jdbc.jdbc2.optional.MysqlDataSource from your MySQL connector package. (http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html)




回答2:


try to add the following code in hibernate property

         <prop key=" hibernate.dialect "> org.hibernate.dialect.MySQLDialect </prop>
         <prop key="hibernate.show_sql">true</prop>
         <prop key="hibernate.connection.username">root</prop>
         <prop key="hibernate.connection.password">root</prop>

  </props>




回答3:


try to remove from hibernate.cfg.xml

<property name="hibernate.connection.password">your-password</property>
<property name="hibernate.connection.username">your-username</property>



回答4:


The problem with

org.springframework.jdbc.datasource.DriverManagerDataSource

is that it does NOT provides pooling! I would move to Tomcat JDBC Connection Pool. That is by now IMHO the most efficient one.

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">

It requires the dependency

org.apache.tomcat tomcat-jdbc

Check documentation: https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html




回答5:


Try to use com.mysql.jdbc.jdbc2.optional.MysqlDataSource.



来源:https://stackoverflow.com/questions/20160876/configuring-hibernate-datasource-in-spring-xml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!