Grails 3 NPE, только если работает Application.groovy - PullRequest
0 голосов
/ 11 июля 2019

У меня есть рабочее приложение Grails 3, которое обычно запускается с grails run-app.Когда я пытаюсь запустить его, используя Application.groovy из моей IDE, я получаю исключение NullPointerException от GORM (трассировка стека ниже).

Не неверна ли моя конфигурация запуска?Почему поведение отличается?

Вот команда run-app, сгенерированная IntelliJ, которая работает:

"C:\Program Files\Java\jdk1e8.0_211\bin\java.exe" -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:CICompilerCount=3 -Dlogback.rootLogLevel=DEBUG -Djline.WindowsTerminal.directConsole=false -Dgrails.full.stacktrace=true -Dfile.encoding=UTF-8 -classpath C:\Users\rmorrise\AppData\Local\Temp\classpath634969171.jar org.grails.cli.GrailsCli run-app --plain-output

Вот команда отладки для Application.groovy, которая не работает:

"C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50806,suspend=y,server=n -Dlogback.rootLogLevel=DEBUG -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\rmorrise\.IntelliJIdea2019.1\system\groovyHotSwap\gragent.jar -javaagent:C:\Users\rmorrise\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath C:\Users\rmorrise\AppData\Local\Temp\classpath1916879940.jar elect.api.Application

Причина, по которой я запускаю с Application.groovy, заключается в том, что я могу запустить с агентом профилировщика YourKit.Ошибка происходит, даже если я не запускаю агент YourKit и просто использую команду «Отладка».

Используемое приложение имеет класс super / sub domain, использующий отображение discriminator.Не удается инициализировать дочернее сопоставление, так как аннотация gorm @Entity не применяется к родительской сущности во время инициализации дочернего элемента.

След стека следует:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.grails.orm.hibernate.HibernateDatastore]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271)
    ... 49 common frames omitted
Caused by: java.lang.NullPointerException: null
    at org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindSimpleId(GrailsDomainBinder.java:2512)
    at org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindIdentity(GrailsDomainBinder.java:1782)
    at org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindRootPersistentClassCommonValues(GrailsDomainBinder.java:1738)
    at org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindRoot(GrailsDomainBinder.java:1391)
    at org.grails.orm.hibernate.cfg.GrailsDomainBinder.contribute(GrailsDomainBinder.java:165)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:275)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
    at org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration.buildSessionFactory(HibernateMappingContextConfiguration.java:276)
    at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.create(HibernateConnectionSourceFactory.java:86)
    at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:39)
    at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:23)
    at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64)
    at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52)
    at org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24)
    at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:204)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
    ... 51 common frames omitted

Попытка обойти

Я попытался присоединить профилировщик YourKit, добавив следующий аргумент JVM в конфигурацию запуска run-app:

-agentpath:"C:\Program Files\YourKit Java Profiler 2019.8-b81\bin\win64\yjpagent.dll"

Это не 'Похоже, что профилировщик был применен к JVM Grails, так как я все еще зависал при запуске профилирования процессора.

...