Железный 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.
Ну, на этом закончу. Вот ссылка на запакованый работающий вариант. Проверяйте, если не работает — подправим. В следующий раз постараюсь рассказать о технических деталях технологии.
Чтобы не пугать далекий от 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.
Ну, на этом закончу. Вот ссылка на запакованый работающий вариант. Проверяйте, если не работает — подправим. В следующий раз постараюсь рассказать о технических деталях технологии.
Комментарии (15)
RSS свернуть / развернутьСегодня доподниму Felix как освобожусь
Вижу кстати тут iPOJO — может его и не хватало для
работы Jetty?
Прикручу еще webconsole с http авторизацией и будем
копаться
Sergei_T
yababay
Sergei_T
yababay
Хз — ребятам из Apache Foundation надо подумать над документацией
Вообще этот продукт не имеет ничего общего с web-сервером Apache
— основа и код и принципы работы у них разные
Gangsta
Это я к тому, что документация Apache Fundation, даже если ее перевести на русский язык, останется довольно темной для нас. Нужно переводить не текст, а смысл. Что я тут и попытался сделать
yababay
Насчет менталитета — хз хз
У меня например хронический недостаток времени и поэтому
иногда мне нужно чтобы что-то просто РАБОТАЛО потому что
жизнь слишком коротка))))))
Так что Quick And Dirty тоже имеет место быть
Sergei_T
yababay
Sergei_T
Просто и можно даже сказать кроссплатформенно
Gangsta
Поставил свой apache felix —
для работы jetty нужен org.apache.felix.ipojo-1.4.0.jar
А чем пакуются jar файлы
И вообще каким IDE пользуешься?
Sergei_T
Sergei_T
Jar-файлы не просто пакуются. Чтобы превратить их в бундле нужен специальный плагин для Ant. В последующих статьях постараюсь изложить подробности.
yababay
(с моей программой управления). Там та же программная философия
была применена.
… Можно разбить сложную задачу на большое количество простых частей и маленькими порциями добиваться стабильности…
Причина простоя —
… пока незнание фундаментальных основ не приведет к какой нибудь дурацкой ситуации…
А какая талантливая экономия! 25руб. стоит сетап-батарейка, а
суточный простой линии — херня!
Потратил 4 часа на восстановление работоспособности линии.
А всего-то надо хорошее знание DOS 6.22(ROM DOS Octagon6030).
Markony
но устроим простой на 1000000
узнаю КамАЗ — кузницу кадров
Sergei_T
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.