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)