Hi,
peopools, whatsup?
Я тут заимплементил пруф оф консепт (ПОК) нашего группового задания (хотя все пришлось писать одному ) за пару послерабочих вечеро-ночей на Grails + MySQL. Суть системы: University Admission Process, вобщем-то функционал для ПОКа минимальный: 0) разделение юзеров по ролям, 1) посылка сообщений, 2) загрузка документов, 3) менеджмент юзеров, 4) редактирование своего профиля.
Код выложил на гитхаб может кому интересно будет: https://github.com/chupakabr/uol-sp-poc. Баги там есть, я даже знаю о них, но не скажу никому, сами найдутся
Выглядит эта ботва примерно так (индекс пейж):
Такие дела.
Ушел курить бамбук.
Hi,
Рябы рябские, как дела?
Меня тут вдруг запарила проблема с оптимистик локинг фейлур (StaleObjectStateException, OptimisticLockingFailureException, HibernateOptimisticLockingFailureException) в Grails, когда слишком частые запросы на сервер приводят к синхронному обновлению домена в персистенс, что в свою очередь приводит к падению одного из запросов, т.к. version уже обновлен другим потоком (запросом). Собсно я решил написать небольшой хелпер для сохранения доменов, в итоге это оказало не хелпером, а заижекченым методом во все доменные классы проекта. Ща покажу как это юзается, а потом уже саму имплементацию.
Домен
Стандартное сохранение домена
Сохранение с optimistic locking with retry вариант 1
Сохранение с optimistic locking with retry вариант 2
Сохранение с optimistic locking with retry вариант 3
Имплементация optimistic locking with retry
—
Хорошего дня!
PS Можно вобщем-то подменить и сам метод save() у доменов, добавив в него имплементацию ретрая при оптимистик логинг фейлуре ексепшене.
Hi,
Just a note: А вы знали, что Grails не будет создавать индексы в базе (например, строковые), если в датасурсе (DataSource.groovy) прописан режим dbCreate = «update», индексы буду создавать только при dbCreate = «create» или dbCreate = «create-drop».
Hey.
Grails замечательная штука, но иногда чтобы понять как оно работает, нужно все таки в код посмотреть
Например задача: нужно на один и тот же урл в зависимости от HTTP метода заюзать различные контроллеры. Для различных экшенов и одного контроллера это делается легко:
Т.е. на «/api/stuff/123 DELETE» мы вызовем StuffController::deleteAction().
А мы хотим различные контроллеры:
Тогда нужно немножко копнуть в грейлс код. В таком замечательном интерфейсе как org.codehaus.groovy.grails.web.mapping.UrlMapping можно увидеть, что в getActionName() и getControllerName() возвращается Closure или String. Собсно нас интересует closure. Раз это замыкание, то мы легко можем сделать свитч по текущему методу из реквест объекта и таким образом динамически сказать какой контроллер нужно бы сейчас заюзать.
В итоге:
Hi.
Ох уж этот оракл, юзабильность это не о нем.
На этот раз проблема с Oracle 9i драйвером для Java. Возникла проблема сохранения CLOB / BLOB данных в базу, используя драйвер для Oracle 9i. На 10g все вроде как даже работает..
Так вот когда пытаешься работать с CLOB / BLOB, то возникают различные ексепшены типа