Grails Enum работает на причале, перерывы на Tomcat - PullRequest
0 голосов
/ 08 июля 2010

Я разработал это небольшое приложение и без проблем запускаю его на 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Сервер, это работает точно так, как вы ожидаете.Приоритет записывается в мою базу данных в виде строки, и он делает то, что я хочу.

Однако, если я беру проект и выполняю «сборку», он создает «производственную» сборку приложения (мойфайл источника данных одинаков для всех сборок), и я помещаю его в папку «webapps» локального сервера Tomcat, и я вижу следующую трассировку стека:

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

Что я должен посмотреть, чтобы сузитьвниз по этому вопросу?У меня есть только один Groovy, установленный на Windows, на что указывает GROOVY_HOME, то же самое с GRAILS.У Jetty есть своя собственная версия этих сред выполнения?Или это действительно проблема сервера приложений?

Есть команда grails, которая говорит "tomcat", не уверенная, имеет ли это какое-либо отношение к этому, но я не использую ее

1 Ответ

1 голос
/ 08 июля 2010

Переместить enum в свой собственный файл в src / groovy (в том же пакете или в другом, но он не может быть в пакете по умолчанию и доступен для класса домена в пакете).Кстати - вам не нужен Groovy или GROOVY_HOME с Grails - он поставляется с версией фляги Groovy, с которой он работает и которая используется в вашей войне.

...