to post messages and comments.

Словил сегодня прекрасный косяк. Граблисы числа форматируют по 3 десятичных разряда (1 234 567), и даже в полях ввода(да, норкоманы они). Так вот вместо обычного пробела они вставляют какой-то иной символ. И в запросе он приходит, поэтому для превращения в строку надо пробелы поудалять. При этом регэксп его за пробельный символ не считает. Удалил с помощью replaceAll(/\D/, '')
И вот я не понимаю, что там за такой особый символ мог оказаться?.

Пишите код в текстовом редакторе, собирайте консольными тулзами.
Словил багу в граблесах в sts-эклипсе. Там криво компилялся код, а компилялся автоматически. В итоге я очень долго не мог понять, почему из класса пропадают методы. Благо, багу закрыли недели 2-3 назад (до этого я на неё забил), обновился, и проблема исчезла.

Ещё в граблисах местами в dev конфигурации можно неожиданно для себя работать с заглушкой вместо реального механизма. В результате на продакшене появятся совершенно необычные ошибки, ведь в dev-е всё работало.

Сраные навязанные соглашения. Вот на кой они FieldName приводят к field_name ?. Очень, сука, мешает, когда делаешь маппинг на существующую таблицу.
Или вот, есть спринговый плагин авторизации, но в одном случае в нём можно обнаружить в качестве атрибутов сессии структурку с именем юзера, а в другом просто строчку. Логика авторов от меня сбежала и спряталась.

Ещё одна заметка на тему множественных датасорсов. Хоть в настройках каждого датасорса есть флажок pooled, который указывает создание пула коннектов к базе, но всё равно значение он берёт из основного датасорса. Меняем его на true и получаем ~3хкратный прирост скорости выборки.
Желаю автору плагина зла. Чтоб он сдох, сука ламер грёбаный!!111 ]8-E~~~

Есть для граблисов паджинатор, странички делает. И под него есть кастомный тэг, в атрибутах которого есть поле 'params', куда можно передать параметры запроса для кнопок страниц. Очень хорошая штука, но ...
Атрибут принимает мапу, но мапа передаётся строкой почему-то. Ну да ладно, суть не в этом. В грувях мапа выглядит [a: 1, 'b':2] (кавычки для строковых ключей можно опускать, как в примере). И вот эта строчка передаётся с url кодированием двоеточий.. т.е. name=[a%3A1]. А потом на входе граблисы смотрят, что на мапу не похоже, и преобразуют это всё в строку.
Обходной путь, в принципе, понятен, там дополнительно передаётся аргумент в виде 'name.a', к чему можно обратиться, как params.'name.a'

Граблис снова "порадовали". Сделали там обёртку над хибернейтовским CriteriaBuilder, а метод add не положили. Прощайте любимые сосиско-вызовы. >_<
Нет, в целом это всё ещё юзабельно, но набивать по отдельности критерии фильтрации записей уже нельзя. Вместо add().add() приходится делать матрёшку с вложенными лямбдами. =\

Grails — платформа для быстрой разработки сайтов. Но в ней и в groovy нет лёгких высокоуровневых способов для создания тривиального post-запроса. >_<''' Ручная запись через стримы в коннект, ручная запись аргументов запроса(тут я надеюсь всё же я не нашёл). Свежая платформа!

Мде, fails вместо того, чтобы сделать нормальное наследование темплейтов, делает генерированные темплейты по прототипам. В принципе, решение нормальное, но при изменении темплейтов-прототипов и последующей перегенерёжке оно предложит затереть существующие темплейты. Со всем тюнингом и прочими рукописными вещами. So sad..

Как делается поддержка нескольких источников данных в grails.
Берём грельсы в левую руку, ставим на них плагин datasources, прописываем конфиги источников данных для нужных моделей(модели указываются списком), запускаем. Обнаруживаем, что грельсы сначала мапят все модели в основную базу, и только потом указанные модели мапятся в другие. При этом в основной базе таблицы для перемапленных моделей останутся пустыми.
Grails — образец кривого фреймворка с кучей костылей.

грельсовские скрипты для создания проекта/моделей/етк — это редкостное тормозное говно.. не пользуйте их..
real 0m11.091s
user 0m14.020s
sys 0m0.430s
похоже, они томкат поднимают.. иного объяснения этому феерическому пиздецу я не нахожу..

Как ведёт себя джава если на одной машине нужно разместить 2 или более веб-приложения, допустим, на GRails? Требуется ли запуск ещё одной JVM? Если не требуется и запуск приложений производится в одной JVM, то компенсируется ли относительная прожорливость джавы на небольших приложениях в случае если их будет много?

Цирк groovy.codehaus.org
interface X
{ void f(); void g(int n); void h(String s, int n); }
def logger = [
log : { Object[] params -> println "LOG: ${params[0]}"; if( params.length > 1 ) params[1].printStackTrace() },
close : { println "logger.close called" }
].asType( loggerInterface )

И всё в таком духе. В официальной документации. Ужас.

Или вот такой:
def bar = foo?.something?.myMethod()
С виду ничего не понятно, но, как оказывается, это лучшее решение проблемы, которой нет:
If you are walking a complex object graph and don't want to have NullPointerExceptions thrown you can use the ?. operator rather than . to perform your navigation.

Почитал о грейлс. Вроде как хороший фреймворк, пользуется саппортом "гигантов", разрабатывается "гигантами" же. Но и то в нём не так, и это не то, а там вообще взяли плохую часть из РоР, а там чистый руби и ужас, кровь кишки. Не смотря на этом, видно что там работали люди, которые хотели сделать мир лучше grails.org

Если не получается сгенерировать контроллер и виды из базового класса с помощью generate-all и при этом выводится сообщение "Domain class not found in grails-app/domain, trying hibernate mapped classes...", не забудьте включить название пакета. И вместо grails generate-all Animal надо писать grails generate-all zoo.Animal

Начав с груви, открыл для себя Scala.
А, ведь, во всём виноват AppEngine )
Кабы Grails на нём пахал без сбоев, не начались бы мои искания )
В общем, читаю, сейчас книжку Мартина Одерски, чего и вам желаю, хотя бы просто для расширения кругозора, как в случае с груви.
Для справки, Одерски, родитель Scala — один из разработчиков компилятора javac и дженериков.

Вот смешно, при достижении определённого количества файлов, или даже создании файлов определённого типа, например, фильтров или таглибов, под виндой grails app-engine перестаёт работать, но прекрасно работает под другими средами.
gant падает во время сборки на задаче DataNucleus Enhancer с ошибкой incorrect parameter при вызове java. Проблема кроется в ограниченой длине строки.
Да, есть способ уменьшить количество просматриваемых файлов на предмет сущностей JPA, но даже сами разработчики говорят о нём как о крайней мере и обещают выпустить исправление.

Всё-таки, не очень удобно, что плагины, которые ты ставишь в проект, хранятся не в нём самом, а в
~/.grails/<версия грааля>/projects/<имя проекта>/plugins.
Да, есть способ переопределить настройки в BuildConfig.groovy через grails.plugin.location для каждого плагина отдельно.
Или для всех оптом: grails.project.plugins.dir="./plugins".
Но почему так было сделано по-умолчанию, я пока объяснения не нашёл. Причём до версии 1.1 они хранились именно в проекте.
Всё вышесказанное было к тому, что при таком раскладе, часто возникают проблемы при переключении веток, если разнится состав плагинов или их версии.

Радость оказалась недолгой.
Через некоторое время, отваливаются инъектированные в ShiroUser методы, типа save().
Просто, во время очередного запуска через grails app-engine, ругается на их отсутствие.
Почему так происходит, для меня полная загадка.

Appengine с Nimble не собирается в следствие то ли длинных имён файлов, то ли из-за большого их количества, к сожалению, не разобрался окончательно.
Acegi не работает, так как требует hibernate. Appengine поставляется либо с JPA, либо с JDO на выбор. Но есть способ перегрузить некоторые классы и отвязаться от хибернэйта.
Чистый Shiro, поверх которого построен Nimble, работает сразу из коробки.

На случай, если кто-то вдруг не знает ещё.
Grails обновился до 1.3.4
springsource.org

Примечание к релизу:
grails.org

Странно, что в таком навороченном FW отсутствует автоматическое обновление самого себя, ну или хотя бы уведомление о релизе.
В том же, ROR, который взят за образец подражания, возможность апгрейда присутствует.