0

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..

5 Answers 5

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)

Sign up to request clarification or add additional context in comments.

5 Comments

I have changed datasource to <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="url" value="jdbc:mysql://localhost:3306/test_amXX"/> <property name="username" value="root"/> <property name="password" value=""/> But i get a strange error..... THERE IS NO USER BY NAME 'sa' IN XML OR IN MYSQL.... java.sql.SQLException: Access denied for user 'sa'@'localhost' (using password: NO)
using org.springframework.jdbc.datasource.DriverManagerDataSource has worked.. But now i am not able to use DBCP. Is there a way to use pooling still in datasource???
what do you mean by polling?
i mean db 'connection' pooling service provided by DBCP. DBCP maintains a pool of connections to db and provide them when required instead of we creating a new connection when required.. This service is automatically provided when we use datasource from DBCP and is popular. we can set the max number of connections property in DBCP datasource. But in this case, i guess we wont get that facility.
Then you should have look at commons-dbcp (commons.apache.org/proper/commons-dbcp), which provides a good DataSource implementation with a lot of pooling options
1

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>

Comments

1

try to remove from hibernate.cfg.xml

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

Comments

1

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

Comments

-1

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

2 Comments

You cannot use the OracleDataSource for a MySQL database
I use mySQL db. oracle.jdbc.pool.OracleDataSource would be for oracle db right??

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.