Сохранение класса домена Grails 2.3 приводит к сбою приложения

Я создал веб-приложение на основе Grails, и оно аварийно завершает работу при запуске, если я пытаюсь сохранить что-либо в файле BootStrap.groovy. Если я закомментирую все операторы save() в файле BootStrap.groovy, приложение запустится, и все таблицы будут успешно созданы.

Вот мой файл BootStrap.groovy:

class BootStrap
{
    def init = { ServletContext context ->

        // Register Custom Object Marshallers
        WebApplicationContextUtils.getWebApplicationContext(context).getBean("customObjectMarshallers").register()


        // Contact Type Tags
        [
            [ tag: "preferred" ],
            [ tag: "default" ],
            [ tag: "mobile" ],
            [ tag: "cell" ],
            [ tag: "work" ],
            [ tag: "home" ],
        ].each {
            def type = TypeTag.findByTag(it.tag)
            if(!type) {
                TypeTag tag = new TypeTag(tag: it.tag)
                tag.validate()
                tag.save()

                def foo = "bar"
            }
        }
    }

И вот что происходит в журнале:

Configuring Spring Security Core ...
... finished configuring Spring Security Core
| Error 2014-03-19 18:47:41,439 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: null
Message: null
    Line | Method
->>  423 | initMetaDataColumnIndexes        in oracle.jdbc.driver.AutoKeyInfo
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    396 | initMetaData                     in     ''
|     77 | getMetaData . . . . . . . . . .  in oracle.jdbc.driver.OracleReturnResultSet
|     39 | doCall                           in BootStrap$_closure1_closure3
|     27 | doCall . . . . . . . . . . . . . in BootStrap$_closure1
|    308 | evaluateEnvironmentSpecificBlock in grails.util.Environment
|    301 | executeForEnvironment . . . . .  in     ''
|    277 | executeForCurrentEnvironment     in     ''
|    262 | run . . . . . . . . . . . . . .  in java.util.concurrent.FutureTask
|   1145 | runWorker                        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . . . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    744 | run                              in java.lang.Thread
Disconnected from the target VM, address: '127.0.0.1:60455', transport: 'socket'

В файле BootStrap.groovy строка 39 является оператором tag.save(). Если я прокомментирую строку, приложение запустится нормально. Строка tag.validate() выполняется нормально, и в этот момент в объекте нет ошибок.

Я использую Java 1.7 с обновлением 45 и Grails 2.3.7. Я обновил плагин grails-hibernate до версии 3.6.10.10. У меня также есть файл ojdbc7.jar в папке lib. Версия Oracle 11gR2.

Любая помощь горячо приветствуется.


person thewidgetsmith    schedule 20.03.2014    source источник


Ответы (1)


Похоже, проблема связана с вашим драйвером: см. здесь: Похожая проблема с документом

Похоже, по какой-то причине возникла проблема с некоторыми версиями драйверов и столбцами автоинкремента.

Я бы попробовал другую версию драйвера и посмотрел, повезет ли вам.

Надеюсь, это поможет.

person bschipp    schedule 20.03.2014