Проблема рендеринга GSP после простоя сервера в течение ночи

В течение нескольких недель я периодически сталкиваюсь с трудной копируемой проблемой. Кажется (то есть я пока не могу быть уверен), что, если приложение Grails не будет затронуто в одночасье, возможно, что-то выгружается, вызывая:

GSP отображается с такими значениями, как:

<meta http-equiv="org.apache.commons.lang.StringUtils@72cd722b" content="org.apache.commons.lang.StringUtils@4e520b18">

<link href="/appname/static/bundle-bundle_application_head.css" type="org.apache.commons.lang.StringUtils@31da0262" rel="org.apache.commons.lang.StringUtils@774121fe" media="org.apache.commons.lang.StringUtils@6008482c" />

<body style="org.apache.commons.lang.StringUtils@49533701">

<a href="/appname/register/forgotPassword" name="org.apache.commons.lang.StringUtils@815a651" class="org.apache.commons.lang.StringUtils@5689bde">Forgotten Password?</a>

Это происходит при развертывании на Tomcat в автономном режиме, а также позволяет Grails работать в IntelliJ на ночь.

Это происходит не каждую ночь, но в большинстве, и я пока не могу отследить, в чем разница между работой и не работой.

Ничто в журналах приложения или Tomcat не дает подсказки.

На данный момент мне интересно, если это связано с плагином ресурсов. Но любые мысли о том, что посмотреть, приветствуются

Среда:

   OS Win7 x64 and Redhat 5
Tomcat 7.0.x (also was occuring on latest Glassfish)
Grails 2.0.4
Plugins: 
plugins.cache=1.0.0.RC1
plugins.cache-headers=1.1.5
plugins.compress=0.4
plugins.console=1.1
plugins.executor=0.3
plugins.export=1.3
plugins.fields=1.1
plugins.google-visualization=0.5.2
plugins.grails-melody=1.13
plugins.joda-time=1.4
plugins.mail=1.0
plugins.p6spy=0.5
plugins.quartz-monitor=0.2
plugins.spring-security-core=1.2.7.3
plugins.springcache=1.3.1
plugins.zipped-resources=1.0

Обновление № 1:

Произошло снова в эти выходные, при использовании диспетчера Tomcat для перезагрузки веб-приложения происходит сбой со следующим сообщением, но это не происходит при новом запуске Tomcat:

 INFO: Initializing Spring root WebApplicationContext
Jun 3, 2012 7:53:01 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ExceptionInInitializerError
    at java.lang.Class.forName(Class.java:247)
    ... 3 more
Caused by: groovy.lang.MissingMethodException: No signature of method: static org.joda.time.DurationFieldType.hour() is applicable for argument types: () values: []
Possible solutions: hours(), wait(), days(), eras(), years(), any()
    at grails.plugin.jodatime.taglib.PeriodTagLib$_getPeriodTypeForFields_closure3.doCall(PeriodTagLib.groovy:87)
    at grails.plugin.jodatime.taglib.PeriodTagLib.getPeriodTypeForFields(PeriodTagLib.groovy:87)
    at grails.plugin.jodatime.taglib.PeriodTagLib.<clinit>(PeriodTagLib.groovy:84)
    ... 4 more

Во что я не верю, так как код в плагине jodaTime выглядит нормально:

   Line 84: private static final PeriodType DEFAULT_PERIOD_TYPE = getPeriodTypeForFields("hours,minutes,seconds")

    private static PeriodType getPeriodTypeForFields(String fields) {
    Line 87:    def fieldTypes = fields.split(/\s*,\s*/).collect { DurationFieldType."$it"() } as DurationFieldType[]

Обновление № 2

Мелодия показывает, что постепенно вся физическая память сожралась

Может быть связано с этими записями журнала, если приложение перезагружается (и всегда принудительно завершает работу Tomcat и запускается с зависанием java-процесса)

SEVERE: The web application [/appname] appears to have started a thread named [Timer-1] but has failed to stop it. This is very likely to create a memory leak.
May 31, 2012 6:04:51 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/appname] appears to have started a thread named [DefaultQuartzScheduler_Worker-1] but has failed to stop it. This is very likely to create a memory leak.
May 31, 2012 6:04:51 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

или это что-то вроде этого: http://wiki.apache.org/tomcat/MemoryLeakProtection

Обновление № 3

Проблема с физической памятью решена, и приложение все еще не работает, как в оригинальной публикации. На этот раз после менее простоя (пару часов)

2 ответа

Решение

Проблема была с этой строкой в ​​Bootstrap.groovy:

String.metaClass.mixin StringUtils

В конце концов я удалил это и проверял в порядке более 24 часов при всех условиях, которые обычно вызывали проблему.

Это я следовал из этой публикации давным-давно здесь: Groovy GDK-эквивалент Apache Commons StringUtils.capitalize(str) или Perl's ucfirst(str)

Есть ошибка в коде ошибки и кода, который это выдал, но, честно говоря, я все еще в растерянности относительно того, что происходит в миксине, чтобы сделать это со временем... назад к книгам для меня.

Weird. К сожалению, я затрагиваю проблему также, но имею мало информации о причине; лучшее, что я могу предложить, это то, что это не произошло в Grails 1.1, действительно произошло в Grails 2.2.0 и было зарегистрировано как http://jira.grails.org/browse/GRAILS-10462.

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