【问题标题】:Grails app fails to runGrails 应用程序无法运行
【发布时间】:2013-11-03 01:43:51
【问题描述】:

所以,我刚刚创建了一个全新的 grails 应用程序,创建了一个包含几个字段的域,然后创建了一个控制器和一组基于域的视图(使用 grails 内置的 generate 命令)。

然后我尝试运行它并得到以下错误,任何线索?:-

| Error 2013-10-24 12:08:11,643 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error executing bootstraps: Error creating bean with name 'transactionManagerPostProcessor': 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': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Can not set java.lang.String field test.PC.MyName to java.lang.Class
Message: Error creating bean with name 'transactionManagerPostProcessor': 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': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Can not set java.lang.String field test.PC.MyName to java.lang.Class
    Line | Method
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    166 | run       in java.util.concurrent.FutureTask
|   1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    603 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
Caused by 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': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Can not set java.lang.String field test.PC.MyName to java.lang.Class
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    166 | run       in java.util.concurrent.FutureTask
|   1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    603 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
Caused by BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Can not set java.lang.String field test.PC.MyName to java.lang.Class
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    166 | run       in java.util.concurrent.FutureTask
|   1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    603 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
Caused by IllegalArgumentException: Can not set java.lang.String field test.PC.MyName to java.lang.Class
->>    6 | doCall    in test.PC$__clinit__closure1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    334 | innerRun  in java.util.concurrent.FutureTask$Sync
|    166 | run . . . in java.util.concurrent.FutureTask
|   1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    603 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker

冒着过度填充数据的风险,一个快速的谷歌建议这可能与我的数据源有关?如果是这样,我的数据源文件看起来像这样,这是第一次生成项目时的标准模板,所以应该可以工作..? :-

dataSource {
    pooled = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
            pooled = true
            properties {
               maxActive = -1
               minEvictableIdleTimeMillis=1800000
               timeBetweenEvictionRunsMillis=1800000
               numTestsPerEvictionRun=3
               testOnBorrow=true
               testWhileIdle=true
               testOnReturn=true
               validationQuery="SELECT 1"
            }
        }
    }
}

它还提到了引导程序的失败,我再次将其包含在此处,但它是在设置时创建且未修改的标准文件...?

class BootStrap {

    def init = { servletContext ->
    }
    def destroy = {
    }
}

域名代码是:-

package test

class PC {

    static constraints = {
        MyName()
        MyVal1()
        MyVal2() 
    }
    String MyName
    String MyVal1
    String MyVal2
}

【问题讨论】:

  • 你的 Grails 版本和你的 JDK 版本是多少?
  • JDK 是 1.7.0,我使用的是 GGTS 版本 3.2.0,它在我生成域之前加载良好,虽然在那个阶段没有很多,但是一旦域被创建它爆炸了...添加了上面的域代码以防万一这有帮助...
  • 您如何使用您的test.PC.MyName 变量?似乎您正在将一个 Class 对象分配给该字符串变量。
  • 据我所知,我还没有做任何事情。我确实使用了 GGTS 的内置功能来创建一个 Grails 项目,在其中生成了一个域(有关域的内容,请参见上文,其中几乎没有任何内容)然后使用内置功能再次生成控制器和视图试图运行它:S
  • 将变量名更改为以lowercase 开头并重新生成控制器和视图。

标签: grails run-app


【解决方案1】:

Java 和 Groovy 的命名约定是以 class 开头,命名为 uppercase 和变量和 instances lowercase。要利用 Grails 约定,建议遵循与 java 和 groovy 相同的约定。 Grails 根据变量名做了一些魔术,例如,Grails 通过名称将域字段与其数据库字段匹配,或者 Grails bean 自动装配基于 bean 的名称,因此,在您的情况下,使用大写创建变量可能会混淆它。

【讨论】:

  • 干杯!合二为一!您会认为 GGTS 已经可以检查大量语法和其他内容,因此也可以进行简单的检查来检查这些内容(实际上,它在生成告诉您使用大写字母的类时确实如此,它只是变量和实例没有检查发生,非常令人沮丧!)
猜你喜欢
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2010-09-28
相关资源
最近更新 更多