Java на habrahabr

Май 12, 2012

 

Bomberman Online — HTML5 мультиплеер онлайн игра от хабраюзеров. Тестируем нагрузку!

Bombermine Online — результат последних двух недель тестирования и подготовки движка для большого кол-ва игроков онлайн.

Движок написан на Java + Jetty (бекэнд). Фронтэнд — HAProxy + Nginx + Node.js. Клиентсайд — GWT, который транслируется в HTML5/canvas + javascript + websockets. Хостится всё в облаке.

На данный момент рекорд — 50 игроков онлайн. Настроен весь необходимый софт для мониторинга нагрузки. После хабраэффекта обещаем выложить отчёт. Ждём гостей.

Ну а под катом: видео геймплея и немного предыстории создания движка

ru.java на livejournal

Ноябрь 22, 2011

 

Wicket и NetBeans

Начал изучать Wicket.
Поставил плагин для NetBeans 7.
К сожалению NetBeans не понимает тегов разметки Wicket и выдает множество варнингов..
Приложение при этом работает.
Можно впринципе отключить проверку разметки, но я как-то привык к подсказкам и вообще не люблю когда что-то не работает..
Иллюстрации с варнингами:





UPD: Собственно вопрос в проблеме - NetBeans не понимает тегов разметки Wicket..
Можно ли заставить понимать?

ru.java на livejournal

Октябрь 7, 2011

 

Вопросы по отправке form сервлету Spring MVC

Пытаюсь реализовать табличный ввод на веб-странице. Нужно будет отправлять в сервлет данные "таблицы" произвольной высоты. Количество колонок фиксировано. Сделал так:
JSP:
                <form:form name="tabtext" method="post" action="index.html"   >
                    <p>Введите:</p>
                    <table>
                        <tr>
                            <td><input type="file" name="column1" size="24" /></td>
                            <td><input type="text" name="column2" size="24" /></td>
                            <td><input type="checkbox" name="column3" /></td>
                        </tr>
                        <tr>
                            <td><input type="file" name="column1" size="24" /></td>
                            <td><input type="text" name="column2" size="24" /></td>
                            <td><input type="checkbox" name="column3" /></td>
                        </tr>
                    </table>
                    <input type="submit" id="sendbtn" value="Отправить" />
                </form:form>

- в JSP с помощью JavaScript могу удалять и добавлять куски <tr>...</tr>, т.е. количество строк может быть произвольным..
Поскольку в колонках таблицы у соответствующих input-ов одинаковый name, то данные получаю в сервлете в виде массивов с соответствующими именами.
Вот как это делается у меня:

    @RequestMapping(value = "/index", method = RequestMethod.POST)
    public ModelAndView getInputText(
                        @RequestParam("column1") String[] column1,
                        @RequestParam("column2") String[] column2,
                        @RequestParam("column3") String[] column3) {
        //  TODO
    }

И тут возникает 2 проблемы, которые я пока не придумал как решить без использования костылей..

1. Имена файлов приезжают без пути. А мне обязательно нужен полный путь и имя файла! Потому что в дальнейшем это имя будет использоваться в апплете. Как же всё-таки передавато полное имя файла?

2. column3 у нас соответствуют чекбоксы. Но в массиве я получаю только включенные чекбоксы, а не все. Например, если в таблице 3 строки, а включены только первый  и третий чекбокс, то результирующий массив не из 3, а из двух элементов "on". Соответственно, при разборе массива не удастся это сопоставить их column1 - поди разбериьс к какой именно строке относя включенные чекбоксы. А можно как-то передавать и "on" и "off"? Чтобы в массиве таки были все 3 значения column3.

Подозреваю, что и то и другое можно пофиксить с помощью hidden полей, куда жабаскриптом подставлять всё, что мне нужно.. (Gjrf yt ghjdthzk)/ Но что-то пока надеюсь на наличие стандартных методов решения моих проблем..
Помогите, пожалуйста, разобраться!

Juravskiy Vitaliy`s blog

Январь 2, 2011

 

Стандарт Web Sockets

Ура свершилось! Можно отправить в trash что то типа ajax reverse, ajax push, comet и тому подобное.
W3 консорциум выделил отдельный стандарт из HTML 5 это Web Sockets. Разработчики ПО оперативно отреагировали на стандарт, так как это действительно прорыв в развитии Web.
Браузеры которые поддерживают стандарт:

  • Google Chrome начиная с релиза 4.0.249.0
  • Apple Safari
  • В FireFox 4 запланировали поддержку стандарта
  • Opera начиная с релиза 10.70
  • В Microsoft не все так гладко, поддержку стандарта обещают в Internet Explorer 9.

Поддержка в серверных приложениях:

  • В Apache модуль pywebsocket от Google
  • В PHP расширение phpwebsocket
  • J2EE контейнеры:
    • Jetty 7.0
    • GlassFish 3.0
    • Caucho Resin 4.0.2

Собственно говоря, а в чем дело, ну стандарт, ну реализовали, а в чем дело? А дело все в том, что теперь реализовывать “общение” браузера (клиента) с сервером, стало более оперативным, теперь все упирается в скорость обмена между сервером и клиентом.

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

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

Заголовок в классическом HTTP протоколе - лишний объем служебной информации, который постоянно приходиться передавать с клиента на сервер и обратно. В случае же с Web sockets количество заголовков уменьшено и равно одному, когда клиент устанавливает соединение.

Рассмотри пример кода клиентской стороны на JavaScript:

if ("WebSocket" in window) { var ws = new WebSocket("ws://localhost/service"); ws.onopen = function() { ... Web Socket is connected. You can send data by send() method. ws.send("message to send"); .... }; ws.onmessage = function (evt) { var received_msg = evt.data; ... }; ws.onclose = function() { .... websocket is closed. }; } else { ... the browser doesn't support WebSocket, use timers and ajax or comet. }

Обсуждение  Web Socket протокола еще не завершено, и возможны изменения как в API так и в протоколе.

В дальнейшем планирую рассмотреть реализации стандарта для северной части, говорят у jetty 7 наиболее просто в использовании API. Так же думаю взять за пример статью Jetty WebSocket Server, которая ориентированна на Jetty 7.  Так же говорят, что в jetty 8 войдет библиотека jwebsocket, на сайте которой много примеров по ее использованию и применению стандарта.


ru.java на livejournal

Ноябрь 4, 2010

 

Примите участие в тендере

 


Наш Клиент, британская софтверная компания, являющаяся мировым лидером в предоставление услуг в сфере контент-оптимизации и персонализации веб-сайтов для клиентов уровня SONY, HP, Mercedes-Benz и многих других, в связи с активным развитием в Украине, ищет партнеров - украинские IT-компании или команды, занимающиеся web-разработками.

Будет предлагаться проектное сотрудничество с успешно работающей командой, отвечающей следующим критериям:
- есть сработавшийся коллектив,
- существует налаженный менеджмент и процесс взаимодействия внутри команды и с Клиентами,
- численность команды не менее 5-7 человек с готовностью к последующему росту,
- используемые технологии JS, HTML/CSS,
- наличие офиса, инфраструктуры и организованных рабочих мест для разработчиков,
- готовность развиваться и следовать установленным Клиентом стандартам работы.

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

people.indigo@gmail.com, + 38067 383 04 40 - Анна Стеценко

ru.java на livejournal

Июль 2, 2010

 

Решение проблемы "mod_jk и ошибка jsessionid"

Некоторое время назад мне таки удалось победить ошибку, возникающую при использовании всяких J2EE приложений, в особенности JTrac, через апачевский модуль mod_jk.

 Ошибка, которую можно часто наблюдать при конфигурации mod_jk по-умолчанию выглядит примерно так:

Естественно, это пугает и портит впечатление от ресурса.
Оказалось, что исправить положение можно следующим набором параметров в mod_jk:
 
JkOptions +ForwardURICompatUnparsed

Подробнее можно прочесть в официальном мануале в разделе Forwarding.
Обидно конечно, но при этом не будет работать mod_rewrite:
rewriting URIs with mod_rewrite and then forwarding the rewritten URI will not work.