GORM не может реализовать классы домена из плагина являются классами GORM


Я пытаюсь использовать проект Grails в качестве плагина, чтобы в основном иметь мои доменные классы в плагине, а затем использовать их в нескольких проектах Grails.

Я сделал это:

Grails create-app web

Grails create-App plugin

Создайте настройки.gradle в корневом каталоге обоих проектов с включить 'plugin', ' web '

Затем я добавил spring security к плагину и использовал S2-quickstart для создания класса домена пользователя и роли и добавил некоторые значения по умолчанию пользователи для начальной загрузки.отличный.

Запуск проекта плагина в одиночку не показывает никаких проблем.

Теперь я добавил плагин в качестве зависимости к веб-проекту: compile (': plugin') Таким образом, я могу получить доступ к классам домена из плагина внутри веб-проекта, он прекрасно компилируется. Я добавил конфигурацию spring в приложение.groovy и сейчас пытаюсь использовать доменные классы из плагина внутри веб-проекта.

Пробуя это, однако мой проект не запускается правильно и он говорит мне следующее:

java.lang.IllegalStateException: Either class [htcommon.HtRole] is not a domain class or GORM has not been initialized correctly or has already been shutdown. If you are unit testing your entities using the mocking APIs

Как только мой код попытается сделать новый HtRole(...).save ()

Похоже, что доменные классы из плагина не распознаются как классы GORM.

2 4

2 ответа:

Проблема с доменом, который не был распознан как класс GORM, была связана с конструкторами, предоставленными в них. Эти конструкторы были сгенерированы из s2-quickstart, но должны быть удалены (это ошибка в spring-security-core). Я удалил конструкторы и в одном месте, где вы их использовали, я использовалMap style default constructors . Затем я исправил звонок, который вы должны были получить от текущего пользователя.

Восстановленный источник находится в этом РЕПО на GitHub (патч-1 ветка работает, мастер - оригинальный сломанный код OP)

Я получил такое же сообщение об ошибке при запуске плагина, содержащего Домены GORM, используя grails run-app в Grails 3.1.6. Я исправил эту проблему, предоставив явную конфигурацию для инициализации Hibernate следующим образом:

Строить.грэдл:

dependencies {
    ...
    runtime "org.grails.plugins:hibernate4"
    runtime "org.hibernate:hibernate-ehcache"
}

Grails-приложение / conf / application.yml:

---
environments:
    development:
        hibernate:
            cache:
                queries: false
                use_second_level_cache: true
                use_query_cache: false
                region.factory_class: 'org.hibernate.cache.ehcache.EhCacheRegionFactory'

         dataSource:
             pooled: true
             jmxExport: true
             driverClassName: org.h2.Driver
             username: sa
             password:
             dbCreate: create-drop
             url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE