Железный Felix

Этот материал — продолжение темы, начатой в предыдущем топике, так что у «вновьприбывших» может сложиться впечатление, что повествование начинается откуда-то с середины. В таком случае сначала следует ознакомиться с началом обсуждения.

Чтобы не пугать далекий от Java честной народ, сухой теорией и малопонятным кодом, я просто покажу на реальном примере, что Apache Felix во-первых, работает, во-вторых, имеет ряд преимуществ.



Итак, вы видите скриншот браузера, в котором открыта страничка, сгенерированная веб-сервером Jetty, включенным в качестве бундле в среду Felix. В принципе, такое можно реализовать и с помощью других веб-серверов — Tomcat, JBoss (варианты, не имеющие отношения к Java я не рассматриваю). Но вот какое дело. Допустим, вы заложили в ваш проект активное содержимое на сервлетах и эти сервлеты зависят друг от друга. Внося изменения в какой-либо из них, вы зачастую вынуждены перезапускать и сопутствующие веб-приложения, а иногда и весь веб-сервер из-за механизмов кэширования и прочей специфики. Felix же, благодаря своей модульной структуре, позволяет обновить именно то, что нужно. Связи с нужными «соседями» установятся автоматически, причем такими соседями могут быть не только сервлеты.

Иногда в серьезных проектах нужно установить связь веб-сервера с каким-нибудь специфическим сервисом, который оформлять в виде сервлета нежелательно (если «упадет» — может сопутствующие приложения «задеть», а то и весь сервер). Здесь Felix вообще незаменим: оформляем сервис в виде бундле, закидываем в Felix и всех делов. Не нужны всякие сложности типа связей через сокеты, RMI, CORBA и т.д. Ведь с помощью различных вариантов RPC можно передавать только объекты с определенным состоянием (сериализированные). А в Felix'е — пожалуйста, бундле могут обмениваться абсолютно любыми типами объектов, даже такими, как подключения к базам данных.

Для иллюстрации я создал простое веб-приложение. Запустил Felix, в состав которого включено бундле с веб-сервером Jetty, а также мое самописное бундле с простеньким контентом (см. строки 6 и 7 в списке):



Написал код (строк 20), упаковал в бундле, включил в среду Felix и… получил сообщение об ошибке.



Ну, с кем не бывает. Исправил ошибки, заодно добавил в html-код надпись «Powered by Yababay». Затем пересобрал бундле (это при настроенных скриптах занимает считанные секунды). Теперь просто в командной строке Felix'а пишем update 6 (т.е. обновить бундле на 6-й позиции списка):



Обновляем браузер — вуаля, видим изменения.



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

Но и это еще не всё. Те, из читателей, кто ради любопытства скачает прилагающийся к этой статье архив, запустит его на своем компьютере (а работать должно как под Linux, так и под Windows), и решит покопаться, с удивлением обнаружит, что нигде нет каталогов с html файлами, картинками и прочим статическим контентом. Где это всё? Да в бундле зашито. Скажите неудобно? Тогда попробуйте представить хакера, который решил задефейсить вашу страничку. Что легче — поменять содержимое файла на диске или залезть в бундле и что-то там изменить? Да, технологии Java — это вам не дырявый пожиратель памяти PHP.

Ну, на этом закончу. Вот ссылка на запакованый работающий вариант. Проверяйте, если не работает — подправим. В следующий раз постараюсь рассказать о технических деталях технологии.
  • +5
  • 04 декабря 2009, 01:35
  • yababay

Комментарии (15)

RSS свернуть / развернуть
+
0
Powered by Yababay
Сегодня доподниму Felix как освобожусь
Вижу кстати тут iPOJO — может его и не хватало для
работы Jetty?
Прикручу еще webconsole с http авторизацией и будем
копаться
avatar

Sergei_T

  • 04 декабря 2009, 12:16
+
+2
iPojo — умопомрачительная вещь, позволяющая писать простой как мычание код. Нужно только потратить несколько часов на вкуривание исходников и «пристрелку». Но в данном случае оно ни при чем, просто осталось от прежних экспериментов.
avatar

yababay

  • 04 декабря 2009, 13:38
+
0
Попробую из упакованного — может поможет
avatar

Sergei_T

  • 04 декабря 2009, 13:40
+
0
А вообще-то наврал, iPojo там задействован. Но и без него Jetty работает.
avatar

yababay

  • 04 декабря 2009, 13:50
+
0
Вот все четко расписано
Хз — ребятам из Apache Foundation надо подумать над документацией
Вообще этот продукт не имеет ничего общего с web-сервером Apache
— основа и код и принципы работы у них разные
avatar

Gangsta

  • 04 декабря 2009, 12:42
+
+2
Дело в различии менталитета. Западные чуваки всё начинают с основ, от простого к сложному. Русские (точнее говоря россияне, т.к. одинаковые замашки я наблюдаю в школе как у русских, так и у татарских детей) познают окружающий мир по-другому. Смотрят вокруг, видят что-то эффектное и говорят: «О! Мне такое надо!». После этого выдирают то, что им надо, из контекста, отрывают всё лишнее и пользуются, пока незнание фундаментальных основ не приведет к какой нибудь дурацкой ситуации. Но, как правило, ситуации такие возникают спустя некоторое время и к этому моменту человек уже вдоволь напользуется стыреной вещью.

Это я к тому, что документация Apache Fundation, даже если ее перевести на русский язык, останется довольно темной для нас. Нужно переводить не текст, а смысл. Что я тут и попытался сделать
avatar

yababay

  • 04 декабря 2009, 13:47
+
0
Что в целом и получилось)))
Насчет менталитета — хз хз
У меня например хронический недостаток времени и поэтому
иногда мне нужно чтобы что-то просто РАБОТАЛО потому что
жизнь слишком коротка))))))

Так что Quick And Dirty тоже имеет место быть
avatar

Sergei_T

  • 04 декабря 2009, 13:50
+
+1
В корне не согласен. Недостаток времени — миф. Да и жизнь огромна. А вот тратить ее на Dirty как раз не стоит. Академик Королев говорил: «Если ты что-то сделаешь быстро, но плохо, люди быстро забудут, что ты сделал быстро, но долго будут помнить, что плохо». А если медленно и хорошо — то наоборот.
avatar

yababay

  • 04 декабря 2009, 13:54
+
0
Хы будем исправляццо))))))
avatar

Sergei_T

  • 04 декабря 2009, 14:11
+
+1
Попробовал — работает
Просто и можно даже сказать кроссплатформенно
avatar

Gangsta

  • 04 декабря 2009, 21:30
+
0
Проверил — работает
Поставил свой apache felix —
для работы jetty нужен org.apache.felix.ipojo-1.4.0.jar

А чем пакуются jar файлы
И вообще каким IDE пользуешься?
avatar

Sergei_T

  • 04 декабря 2009, 21:43
+
0
ipojo — не очевидная зависимость — нигде про это не встретил пока курил доки а может просто плохо смотрел
avatar

Sergei_T

  • 04 декабря 2009, 21:43
+
+1
IDE = Vim + Ant + Midnight Commander + собственная система организации каталогов и скриптов (3f-lab).

Jar-файлы не просто пакуются. Чтобы превратить их в бундле нужен специальный плагин для Ant. В последующих статьях постараюсь изложить подробности.

avatar

yababay

  • 04 декабря 2009, 23:03
+
+2
Ну просто добавить нечего. Согласен в филосовском и техническом смысле. Вчера бывшие коллеги вызвали на КАМАЗ запускать конвейер
(с моей программой управления). Там та же программная философия
была применена.
… Можно разбить сложную задачу на большое количество простых частей и маленькими порциями добиваться стабильности…
Причина простоя —
… пока незнание фундаментальных основ не приведет к какой нибудь дурацкой ситуации…
А какая талантливая экономия! 25руб. стоит сетап-батарейка, а
суточный простой линии — херня!
Потратил 4 часа на восстановление работоспособности линии.
А всего-то надо хорошее знание DOS 6.22(ROM DOS Octagon6030).
avatar

Markony

  • 05 декабря 2009, 12:55
+
0
Это Кайдзен фигли — сэкономим 100 р
но устроим простой на 1000000
узнаю КамАЗ — кузницу кадров
avatar

Sergei_T

  • 05 декабря 2009, 18:47

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.