Grails Enum在Jetty上运行,在Tomcat上休息

时间:2010-07-08 17:11:47

标签: tomcat grails jetty enums

我开发了这个小应用程序并在Jetty上运行它没有问题...

Bug.groovy:

package itsafeature

class Bug {

    String name
    String description
    Priority priority

    Project project

    static belongsTo = Project

    static constraints = {
        name(size:10..150)
        description(size:25..1500)
        project(nullable:false)
        priority(nullable:false)
    }

    String toString() {
        return "${priority}:${name}"
    }
}
enum Priority {HIGH(5), MEDIUM(3),LOW(1)
    private Priority(int val){
        value = val
    }
    private final int value
    int value() {
        value
    }
}

当我使用Netbeans直接部署到它的Grails Jetty Server时,这完全符合您的预期。优先级以字符串形式写入我的数据库,它可以实现我的目的。

但是,如果我接受项目并执行“构建”,它会创建应用程序的“生产”版本(我的数据源文件对于所有版本都是相同的),并且我将它放在我的“webapps”文件夹中本地tomcat服务器,我看到以下stacktrace:

SEVERE: Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        ... SNIP! ...
Caused by: java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: Priority(java.lang.String, java.lang.Integer)
        at Priority.<clinit>(Priority.groovy:10)
        ... 2 more

我应该考虑什么来缩小这个问题?我在Windows上只安装了一个groovy,GROOVY_HOME指向了这个,与GRAILS相同。 Jetty是否拥有自己的运行时版本?或者这真的是应用程序服务器问题吗?

有一个grails命令说“tomcat”,不确定这是否与此有关,但我没有使用它

1 个答案:

答案 0 :(得分:1)

将enum移动到src / groovy中的自己的文件中(在相同的包或其他包中,但它不能在默认包中,并且可以由包中的域类访问)。

btw - Grails不需要Groovy或GROOVY_HOME - 它附带了Groovy jar的版本,可以在你的战争中使用它。