пятница, 27 января 2012 г.

Spring Roo: 400 Bad Request из-за неправильного формата даты по умолчанию

Недавно используя Spring Roo для генерации админки столкнулся со следующей проблемой.
В БД имеется сущность. У нее множество разных полей, в том числе поля типа Date. Есть необходимость сделать выборку по дате. Как оказалось, при запуске автоматического сгенерированного кода для поиска по дате, я получил ошибку 400 Bad Request.

понедельник, 26 сентября 2011 г.

RedDwarf — cерверная платформа для разработки онлайн-игр на Java

Написал небольшую статью с обзором возможностей платформы RedDwarf и основных принципов её работы. Статья опубликована на Хабрахабре: http://habrahabr.ru/blogs/gdev/129174/

воскресенье, 4 сентября 2011 г.

Запуск нескольких экземпляров сервера Reddwarf на одной машине

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

понедельник, 28 февраля 2011 г.

Reddwarf Periodic Profiler 0.1

Для игровой платформы Reddwarf (бывший Darkstar) существует собственный профайлер.
Он работает таким образом: записывает информацию обо всех выполненных задачах в бинарный лог собственного формата. Этот лог можно открыть с помощью специальной программы, благодаря которой можно будет посмотреть, что за задачи были выполнены, как долго, сколько задач завершились неудачей. Недостаток данного профайлера в том, что необходимо записывать всю информацию о задачах в большой бинарный лог: на боевом сервере это быстро заполнит диск, к тому же файлы лога надо будет передавать на локальную машину для анализа и просмотра.

Для более удобной работы с результатами профилирования прямо на боевом сервере был написан специальный профайлер. Этот профайлер в прямом эфире собирает данные о выполняемых задачах и периодически (каждую минуту) скидывает суммарную информацию в текстовый файл. Открыв на боевом сервере текстовый файл, можно смотреть, какие задачи нагружают сервер в данный момент.

Страничка проекта: http://code.google.com/p/reddwarf-periodic-profiler/

среда, 16 февраля 2011 г.

Этот безумный JMX, jconsole и 127.0.1.1

В моем сервере на платформе Reddwarf для мониторинга производительности сервера используется JMX.
Для этого добавляю в параметры запуска java-машины -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false . В результате сервер запускается с JMX-агентом, к которому можно подключиться с помощью JConsole.

После успешных экспериментов с JConsole я настроил выгрузку данных в cacti. Для этого использовал jmxtrans. Он делает запрос к серверу, получает данные и сохраняет и в архив. Всё замечательно...

Проблемы начались при попытке подключиться к JMX-агенту на боевом сервере. Параметры добавил, перезагрузил...

JConsole подключаться не хочет:

Connection failed: Retry?
The connection to mygameserver.ath.cx:3333 did not succeed.
Would you like to try again?

Без объяснения причин.

пятница, 21 мая 2010 г.

Нестабильность Enum.hashCode() и HashMap

На днях обнаружилась любопытная особенность enum'ов. В коде сервера я использовал ScalableHashMap для хранения некоторых данных, где ключом является enum. ScalableHashMap - это специальная реализация хешмапа для сервера Reddwarf.

После первого запуска сервера и инициализации карты всё работало замечательно.
Потом ScalableHashMap был сериализован и сохранен на диск.
Дальше сервер был перезагружен, и ScalableHashMap десериализован с диска.
Делаю ScalableHashMap.get(key) и... получаю null!
Вывожу ScalableHashMap на экран с помощью toString() - там всё есть! Но почему-то он не хочет доставать записанные данные.

Оказалось загвоздка вот в чем:
Enum использует hashCode(), унаследованный от Object(). Следовательно, при перезапуске сервера меняются адреса ссылок, соответственно меняются хеш-коды объектов. И из карты невозможно вытащить объект с новым хеш-кодом, сохраненный по старому хеш-коду!

вторник, 20 апреля 2010 г.

Sun Tech Days 2010

"Как жаль, что эта конференция проходит не в Москве" - думал я в прошлом году, когда понял, что не получится внезапно поехать на Sun Tech Days 2009.
"Как хорошо, что эта конференция проходит не в Москве" - думал я в этом году, прогуливаясь по северной столице по прекрасной погоде, любуясь красотами этого замечательного города и предвкушая много нового и интересного на конференции.