How do I fix the org.springframework.beans.factory

2019-09-18 03:25发布

问题:

I am receiving a huge error list when tying to run a grails application. The application worked fine until I migrated the database from MySQL to SQL Server. I used the SQL Server Migration Assistant and everything worked fine there. I also added the sqljdbc4.jar to the lib directory and updated DataSource.groovy to work with SQL Server. I have been trying to solve this problem for days now and would really appreciate your input. I am fairly new to Grails, Databases, Servers, etc. so I apologize if I have not described this error appropriately.

Thank you for your help!

Versions: Grails 1.3.9, JDK 1.7.0_21, NetBeans IDE 7.3.1, and Microsoft SQL Server 2008

This is the error I get when running the grails run-app command:

     context.GrailsContextLoader Error executing bootstraps:

     Error creating bean with name 'messageSource': 
     Initialization of bean failed; nested exception is 
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'transactionManager': 
     Cannot resolve reference to bean 'sessionFactory' 
     while setting bean property'sessionFactory'; nested exception is 
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'sessionFactory': 
     Cannot resolve reference to bean 'hibernateProperties' 
     while setting bean property 'hibernateProperties'; nested exception is 
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'hibernateProperties': 
     Cannot resolve reference to bean 'dialectDetector' 
     while setting bean property 'properties' with key [hibernate.dialect]; nested exception is 
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'dialectDetector': 
     Invocation of init method failed; nested exception is          
     org.springframework.jdbc.support.MetaDataAccessException: 

     Error while extracting DatabaseMetaData; nested exception is 
     org.apache.commons.dbcp.SQLNestedException: 

     Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
     org.springframework.beans.factory.BeanCreationException:

     Error creating bean with name 'messageSource': 
     Initialization of bean failed; nested exception is          
     org.springframework.beans.factory.BeanCreationException:

     Error creating bean with name 'transactionManager': 
     Cannot resolve reference to bean 'sessionFactory' 
     while setting bean property 'sessionFactory'; nested exception is 
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'sessionFactory': 
     Cannot resolve reference to bean 'hibernateProperties' 
     while setting bean property 'hibernateProperties'; nested exception is 
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'hibernateProperties': 
     Cannot resolve reference to bean 'dialectDetector' 
     while setting bean property 'properties' with key [hibernate.dialect]; nested exception is          
     org.springframework.beans.factory.BeanCreationException: 

     Error creating bean with name 'dialectDetector': 
     Invocation of init method failed; nested exception is 
     org.springframework.jdbc.support.MetaDataAccessException:


     Error while extracting DatabaseMetaData; nested exception is 
     org.apache.commons.dbcp.SQLNestedException:

     Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
        at org.grails.tomcat.InlineExplodedTomcatServer.doStart(InlineExplodedTomcatServer.groovy:112)
        at org.grails.tomcat.InlineExplodedTomcatServer$doStart.callCurrent(Unknown Source)
        at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:97)
        at grails.web.container.EmbeddableServer$start.call(Unknown Source)
        at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
        at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
        at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
        at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
        at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
        at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
        at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
        at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy)
        at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59)
        at RunApp$_run_closure1.doCall(RunApp.groovy:33)
        at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
        at gant.Gant.withBuildListeners(Gant.groovy:427)
        at gant.Gant.this$2$withBuildListeners(Gant.groovy)
        at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
        at gant.Gant.dispatch(Gant.groovy:415)
        at gant.Gant.this$2$dispatch(Gant.groovy)
        at gant.Gant.invokeMethod(Gant.groovy)
        at gant.Gant.executeTargets(Gant.groovy:590)
        at gant.Gant.executeTargets(Gant.groovy:589)

    Caused by: org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'transactionManager': 
    Cannot resolve reference to bean 'sessionFactory' 
    while setting bean property 'sessionFactory'; nested exception is 
    org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'sessionFactory': 
    Cannot resolve reference to bean 'hibernateProperties' 
    while setting bean property 'hibernateProperties'; nested exception is 
    org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'hibernateProperties': 
    Cannot resolve reference to bean 'dialectDetector' 
    while setting bean property 'properties' with key [hibernate.dialect]; nested exception is 
    org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'dialectDetector': 
    Invocation of init method failed; nested exception is 
    org.springframework.jdbc.support.MetaDataAccessException: 

    Error while extracting DatabaseMetaData; nested exception is 
    org.apache.commons.dbcp.SQLNestedException: 

    Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
        ... 25 more



    Caused by: org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'sessionFactory': 
    Cannot resolve reference to bean 'hibernateProperties' 
    while setting bean property 'hibernateProperties'; nested exception is 
    org.springframework.beans.factory.BeanCreationException:

    Error creating bean with name 'hibernateProperties': 
    Cannot resolve reference to bean 'dialectDetector' 
    while setting bean property 'properties' with key [hibernate.dialect]; nested 
    exception is org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'dialectDetector': 
    Invocation of init method failed; nested exception is 
    org.springframework.jdbc.support.MetaDataAccessException: 

    Error while extracting DatabaseMetaData; nested exception is         
    org.apache.commons.dbcp.SQLNestedException: 

    Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
        ... 25 more



    Caused by: org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'hibernateProperties': 
    Cannot resolve reference to bean 'dialectDetector' 
    while setting bean property 'properties' with key [hibernate.dialect]; nested exception is 
    org.springframework.beans.factory.BeanCreationException: 

    Error creating bean with name 'dialectDetector': 
    Invocation of init method failed; nested exception is 
    org.springframework.jdbc.support.MetaDataAccessException: 

    Error while extracting DatabaseMetaData; nested exception is         
    org.apache.commons.dbcp.SQLNestedException: 

    Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
        ... 25 more



    Caused by: org.springframework.beans.factory.BeanCreationException:

    Error creating bean with name 'dialectDetector': 
    Invocation of init method failed; nested exception is 
    org.springframework.jdbc.support.MetaDataAccessException:

    Error while extracting DatabaseMetaData; nested exception is 
    org.apache.commons.dbcp.SQLNestedException: 

    Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
        ... 25 more


    Caused by: org.springframework.jdbc.support.MetaDataAccessException: 

    Error while extracting DatabaseMetaData; 
    nested exception is org.apache.commons.dbcp.SQLNestedException: 

    Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)
        ... 25 more


    Caused by: org.apache.commons.dbcp.SQLNestedException: 
    Cannot create PoolableConnectionFactory (Login failed for user 'dev'.)

        at  org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at com.sun.proxy.$Proxy10.getMetaData(Unknown Source)
        ... 25 more

    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'dev'.

        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
        at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2529)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1905)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1893)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1045)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:817)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842)
        at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
        at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
        at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
        at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
        ... 28 more

Here is my DataSource.groovy file

    dataSource {
    pooled = true
    //driverClassName = "com.mysql.jdbc.Driver" (driver for mysql)
    driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver" 
    dialect = "org.hibernate.dialect.SQLServer2008Dialect" 
    username = "dev"
    password = "dev"
    properties {
        maxActive = 30
        maxIdle = 5
        validationQuery = "/* ping */"
        testWhileIdle = true
        timeBetweenEvictionRunsMillis = 10000
        minEvictableIdleTimeMillis = 120000
    }
}

hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=false
    cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "update" // one of 'create', 'create-drop','update'
            //url = "jdbc:mysql://localhost/timesheet_development?autoReconnect=true"
            url = "jdbc:sqlserver://localhost:1433;instanceName=sqlexpress;databaseName=timesheet_development"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            //url = "jdbc:mysql://localhost/timesheet_test?autoReconnect=true"
            url = "jdbc:sqlserver://localhost:1433;instanceName=sqlexpress;databaseName=timesheet_test"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            //url = "jdbc:mysql://localhost/timesheet_production?autoReconnect=true"
            url = "jdbc:sqlserver://localhost:1433;instanceName=sqlexpress;databaseName=timesheet_update"
            username = "********"
            password = "********"           
        }
    }
}

回答1:

After working all day on this problem and getting valued input from comments, I have found the solution to my problem.

1) Dev was not a valid user for SQL Server so I added it in phpMyAdmin as well as the security folders for the database. I also re-migrated the database after adding user dev to MySQL.

2) plugins.searchable=0.6.4 needed be commented out from the application.properties file in order to fix the stack trace errors.

3) The Grails Runtime Exceptions were solved by going through the database tables and correcting the data types that were improperly migrated. All binary data types had to be changed to bit type. The grails app now runs flawlessly. Hope this helps anybody else out there with this problem!