IllegalStateException при попытке запроса класса домена MongoDB с помощью Grails 2.3.7

Я работаю над устаревшим проектом, который использует Grails 2.3.7 (с Maven) и Java 7, и мне нужно добавить соединение с базой данных MongoDB, сохранив существующие Hibernate.

Я добавил следующее в мой файл pom.xml:

<dependency>
    <groupId>org.grails.plugins</groupId>
    <artifactId>mongodb</artifactId>
    <type>zip</type>
    <version>3.0.2</version>
</dependency>

И это в файл BuildConfig.groovy:

plugins {
    compile ':mongodb:3.0.2'
    compile 'org.grails.plugins:mongodb:3.0.2'    
}

(Я пробовал как с, так и без компиляции 'org.grails.plugins:mongodb:3.0.2')

В файле DataSource.groovy я настроил соединение с БД следующим образом:

grails {
    mongodb {
        host = "xxx.xxx.xxx.xxx"
        port = "27017"
        databaseName = "db"
        username = "user"
        password = "pass"
    }
}

и само соединение, кажется, работает, потому что, если я изменю какое-либо значение, приложение Grails даже не запустится.

Затем я создал простой класс домена, Thingy.groovy:

class Thingy {

    String identifier  
    String description    

    static mapWith = "mongo"

    static constraints = {
    }
}

И теперь, когда я запускаю приложение, любой вызов методов этого класса вызывает исключение IllegalStateException: "Method on class [Thingy] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.", Однако, если в одном месте я вызываю какие-либо методы старых классов Domain, которые используют другой источник данных, они работают как чудо.

Кроме того, при запуске сервера я получаю еще одно исключение, которое, я думаю, может быть связано, но я не уверен, что с ним делать: ERROR - Error configuring dynamic methods for plugin [mongodb:3.0.2]: org/grails/datastore/mapping/query/api/BuildableCriteria java.lang.NoClassDefFoundError: org/grails/datastore/mapping/query/api/BuildableCriteria,

Я также попытался использовать плагин MongoDB 3.0.3, но с теми же результатами.

1 ответ

Решение

Этот ответ /questions/6995658/noclassdeffounderror-orggrailscompilergormgormentitytransformation/6995661#6995661 дал мне подсказку. Я должен был обновить grails-datastore-core а также grails-datastore-gorm версии также вручную:

<dependency>
    <groupId>org.grails</groupId>
    <artifactId>grails-datastore-gorm</artifactId>
    <version>3.1.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.grails</groupId>
    <artifactId>grails-datastore-core</artifactId>
    <version>3.1.4.RELEASE</version>
</dependency>

В случае, если это поможет кому-то еще, я узнал, какие версии использовать, посмотрев на <dependencies> в файле POM плагина mongodb ( https://repo.grails.org/grails/plugins/org/grails/plugins/mongodb/3.0.3/mongodb-3.0.3.pom)

Другие вопросы по тегам