<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр / Комментарии к посту «The Art Of Programming — Выпуск №25 / Как готовить OSGi» в блоге «Подкасты»</title>
	<link>http://habrahabr.ru/rss/post/61939/</link>
	<description><![CDATA[Новые комментарии к посту «The Art Of Programming — Выпуск №25 / Как готовить OSGi» в блоге «Подкасты»]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 15:34:45 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	

	
	
	
	
	
		
	
		<item>
			<title>15.06.2009 09:43:22 pavelzuev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1709620</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1709620</link>
			<description><![CDATA[По одному пути идти оказалось гораздо проще в нашем случае. Сюрпризов меньше при знакомстве с творчеством другого отдела:)<br/>
А про хаки… Там все просто. Сделали, например, classloader, который видит вообще все содержимое всех бандлов, независимо от того, какие пакеты они экспортируют. Этот classloader используется хибернейтом, компилятором groovy, [де]сериализатором и т.п. библиотеками. Хак, конечно, но удобно.<br/>
И еще пришлось вручную добавлять кэш результатов поиска пакетов: при загрузке классов equinox может очень долго искать бандл, содержащий нужный пакет.<br/>
Еще какие-то мелочи сделали, но я уже не помню, какие.]]></description>
			<pubDate>Mon, 15 Jun 2009 09:43:22 GMT</pubDate>
			<author>pavelzuev</author>
		</item>
	

	
		<item>
			<title>14.06.2009 23:58:42 golodnyj</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708694</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708694</link>
			<description><![CDATA[спасибо мы старались +) <br/>
для начала так сказать +) ]]></description>
			<pubDate>Sun, 14 Jun 2009 23:58:42 GMT</pubDate>
			<author>golodnyj</author>
		</item>
	

	
		<item>
			<title>14.06.2009 23:58:06 golodnyj</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708692</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708692</link>
			<description><![CDATA[не сильнее обычного +) ]]></description>
			<pubDate>Sun, 14 Jun 2009 23:58:06 GMT</pubDate>
			<author>golodnyj</author>
		</item>
	

	
		<item>
			<title>14.06.2009 23:24:18 intr13</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708653</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708653</link>
			<description><![CDATA[То есть вы пошли путем создания жесткого фреймворка? Это когда разработчику дается только один рекомендованый путь:)<br/>
Интересно было бы услышать про хаки в класслоадерах:)<br/>
p/s<br/>
Я не сильно наглею?:)]]></description>
			<pubDate>Sun, 14 Jun 2009 23:24:18 GMT</pubDate>
			<author>intr13</author>
		</item>
	

	
		<item>
			<title>14.06.2009 23:21:00 intr13</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708647</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708647</link>
			<description><![CDATA[Я ждал этого ответа:) <br/>
Просто я тоже учавствовал в разработке веб-фреймворка где была динамическая подгрузка модулей. Решение добавить динамику привело к усложнению поддержки, да и в итоге все выродилось в: выложил новый модуль, перезапустил сервер приложений:)]]></description>
			<pubDate>Sun, 14 Jun 2009 23:21:00 GMT</pubDate>
			<author>intr13</author>
		</item>
	

	
		<item>
			<title>14.06.2009 20:12:55 pavelzuev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708343</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708343</link>
			<description><![CDATA[1. Может быть, когда-нибудь…<br/>
2. Момент, по сути, всего один — osgi был не самым удачным выбором:) Это контейнер для относительно независимых модулей, которые друг о друге не знают и друг другу не доверяют. Если же пилить одно большое приложение на мелкие osgi-бандлы, то возникает сразу куча проблем и неиспользуемых фич.<br/>
Во-первых, загрузка классов. Если положить hibernate в один бандл, а бизнес-логику — в другой, то hibernate без особой магии не сможет загружать классы из другого бандла. То же самое для всех библиотек, использующих загрузку классов по имени.<br/>
Во-вторых, обновление модулей «на ходу» и прочяя динамика. Они совсем не пригодились. Даже если обновляется только один модуль, то нужно останавливать работу с БД, завершать все выполняющиеся HTTP-запросы и фоновые процессы, выполнять миграции схемы БД, заставлять все библиотеки (тот же hibernate) перечитывать конфигурацию. В общем, downtime неизбежен, и проще перезапускать приложение целиком, чем реализовывать всю эту логику.<br/>
В-третьих, активация бандлов в произвольном порядке. Это сильно усложняет логику инициализации. Например, задача переопределения кусочка GUI, определенного в другом бандле, становится весьма нетривиальной: во время активации приходится собирать из всех бандлов все описания GUI и после сортировать их по зависимостям.<br/>
В-четвертых, ручной импорт-экспорт пакетов. Опечатки в длинных списках пакетов моментально сносили приложению крышу. При этом такая детализация была попросту не нужна. Проще оказалось работать не с отдельными пакетами, а с целыми бандлами.<br/>
В-пятых, пришлось отломать кэш бандлов (это такая штука, в которой живут локальные копии бандлов, распакованные и подготовленные equinox-ом к запуску). До этого equinox при запуске стирал кэш и распаковывал туда заново весь код и ресурсы. Иногда у него что-то шло не так, в кэше оставался старый код и приложению опять-таки срывало крышу. В production, при выкладке критичного обновления.<br/>
Могу еще много всего вспомнить:)]]></description>
			<pubDate>Sun, 14 Jun 2009 20:12:55 GMT</pubDate>
			<author>pavelzuev</author>
		</item>
	

	
		<item>
			<title>14.06.2009 19:18:15 just_vladimir</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708221</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708221</link>
			<description><![CDATA[1. Было бы интересно прочитать статью про Naumen Kernel от кого либо из ее создателей, думаю получится очень интересно. А то несмотря на то, что он под Naumen Public Licence (разновидность LGPL как я понимаю) информации по нему в сети нет (не считая запись выступления на jug.ru).<br/>
<br/>
2. На сколько мне известно все таки есть моменты в osgi/equinox, которые доставляют определенные проблемы, можете рассказать об этом?]]></description>
			<pubDate>Sun, 14 Jun 2009 19:18:15 GMT</pubDate>
			<author>just_vladimir</author>
		</item>
	

	
		<item>
			<title>14.06.2009 18:55:20 aib</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708162</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1708162</link>
			<description><![CDATA[offtop: 4 штуки за книгу на озоне, которая на амазоне стоит 30 баксов это крута.<br/>
<br/>
А так реально получилось osgi для блондинок какой-то. ]]></description>
			<pubDate>Sun, 14 Jun 2009 18:55:20 GMT</pubDate>
			<author>aib</author>
		</item>
	

	
		<item>
			<title>14.06.2009 17:04:40 pavelzuev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1707911</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1707911</link>
			<description><![CDATA[Во-первых, явный импорт-экспорт пакетов в манифесте — это геморрой. Забили на импорт, сделали так, чтобы по умолчанию пакет импортировался из первого же подходящего бандла (Eclipse-BuddyPolicy: global плюс какие-то хаки в класслоадерах).<br/>
Во-вторых, добавили параметры start-before и start-after для явного указания порядка запуска и зависимостей.<br/>
А масштабируемость и OSGi вообще перпендикулярны. OSGi не помогает и не мешает.]]></description>
			<pubDate>Sun, 14 Jun 2009 17:04:40 GMT</pubDate>
			<author>pavelzuev</author>
		</item>
	

	
		<item>
			<title>14.06.2009 16:58:29 pavelzuev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1707903</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1707903</link>
			<description><![CDATA[Насчет 2 — это мое решение было. Дело в безумной сложности поддержки всего этого динамического счастья в приложении.]]></description>
			<pubDate>Sun, 14 Jun 2009 16:58:29 GMT</pubDate>
			<author>pavelzuev</author>
		</item>
	

	
		<item>
			<title>14.06.2009 09:44:14 intr13</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1707093</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1707093</link>
			<description><![CDATA[Спасибо за развернутые ответы:)<br/>
<br/>
Продолжим?;)<br/>
<br/>
2. А в какой области вы расширили манифесты? Чего не хватило в стандартном OSGi? <br/>
3. Интересно было бы знать нагрузку на сервер. Сколько у вас одновременно работающих пользователей?<br/>
<br/>
Кстати я немного слукавил, с вашей системой (наумен кернел) мне уже приходилось сталкиваться два года назад. Судя по всему у вас больших изменений так и не случилось:) Зато стабильность наверно возросла в разы:)<br/>
]]></description>
			<pubDate>Sun, 14 Jun 2009 09:44:14 GMT</pubDate>
			<author>intr13</author>
		</item>
	

	
		<item>
			<title>14.06.2009 05:21:48 beq</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1706769</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1706769</link>
			<description><![CDATA[И вам привет :)<br/>
<br/>
1. Мы используем Equinox, единственное — стартуем его самостоятельно, т.к. Tomcat не имеет встроенной поддержки Equinox (да и OSGi вообще)<br/>
<br/>
2. У нас в Naumen Kernel такая фича, как динамическая подгрузка бандлов не используется. Мы слегка расширили манифесты и нужные бандлы стартуют в указанном порядке. Я не знаю, почему было принято такое решение, но скорее всего это связано с самостоятельным управлением ЖЦ бандла (см. ответ на 1-й вопрос). Если вы пользуетесь Eclipse, то можете замерить сколько раз у вас было OutOfMemory, у меня пока ни разу.<br/>
<br/>
3. Мы плотно работаем над улучшение производительности нашего приложения, но если упираемся во что-то, то покупаем более мощное железо.<br/>
<br/>
4. Нет, такой опыт отсутствует.<br/>
<br/>
5. С OSGi конечно тоже могут быть проблемы. Во-первых его не следует использовать, если вы не строите расширяемое приложение. Во-вторых, если у вас планируется 2-3 плагина или вы пишите для десктопа что-то маленькое (лишние 800к могут быть критичными). В остальных случаях — OSGi может быть удачным выбором. Но! Надо четко продумать стратегию управления ЖЦ бандлов, в частности кто, когда и какие бандлы будет стартовать. <br/>
<br/>
6. ДМС разрабатывается как «наследник» системы NauDoc, которая была написана на Python. Поэтому легаси кода, как такового нет. Если «легаси-решения», которые переписаны на java.<br/>
<br/>
7. Да, мы используем Hibernate, модель описываем xml. Дело в том, что разработка платформы началась еще во времена JDK 1.4 когда и аннотаций то не было.<br/>
<br/>
8. Для построения веб-интерфейса мы используем свой фреймворк. Особенностью нашей системы является то, что нет настраиваемых/сменяемых дизайнов (не сайты же делаем), поэтому мы отошли от концепции страниц и перешли к концепции объектов. Т.е. отображаемой единицей является объет, который естественно имеет класс, а класс имеет паблишер — xml-файл, описывающие его отображения. Ну и там же все формы, кнопки и т.д. В xml манипулируем компонентами, каждый компонент имеет jsp-файл, который описывает генерацию html для этого компонента. JSP-шки мы прекомпилируем в .class-файлы до деплоя приложения.]]></description>
			<pubDate>Sun, 14 Jun 2009 05:21:48 GMT</pubDate>
			<author>beq</author>
		</item>
	

	
		<item>
			<title>14.06.2009 04:12:22 intr13</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1706744</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1706744</link>
			<description><![CDATA[Если честно, то немного вяловато получилось. Хотя голодный изображающий блондинку это что-то:) <br/>
Предлагаю в следующий раз общаться с большей экспрессией и задавать побольше каверзных вопросов.<br/>
<br/>
Кстати у меня есть немного простых вопросов:)<br/>
1. Что за OSGi шину вы используете? Сами писали или взяли готовое решение? Если взяли готовое решение, то что пришлось дорабатывать напильником? (возможно я прослушал этот момент:))<br/>
2. Сколько ресурсов кушает OSGi, особенно когда используется динамическая подгрузка модулей? Есть ли проблемы OutOfMemory?<br/>
3. Как вы масштабируете OSGi приложения? Покупаете более мощное железо или кластеризуете ваши приложения?<br/>
4. Есть ли опыт кластеризации OSGi приложений с динамической подгрузкой модулей? <br/>
5. Почему не стоит использовать OSGi? Или OSGi «серебряная пуля» для всего?<br/>
6. Как в вашей дмс с легаси кодом дела обстоят? <br/>
7. Если вы используете Hibernate для работы с БД, то что вы используете: аннотации в модели или описываете модель в xml конфигах? (просто интересно:))<br/>
8. Что вы используете для построения интерфейса пользователя? (просто интересно:))<br/>
<br/>
p/s<br/>
Забыл передать привет городу Челябинску и всем суровым программистам оттуда:) Я мог быть среди вас:)<br/>
]]></description>
			<pubDate>Sun, 14 Jun 2009 04:12:22 GMT</pubDate>
			<author>intr13</author>
		</item>
	

	
		<item>
			<title>12.06.2009 09:38:19 golodnyj</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702981</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702981</link>
			<description><![CDATA[блин +) <br/>
эх забыли про такой кейс +) ]]></description>
			<pubDate>Fri, 12 Jun 2009 09:38:19 GMT</pubDate>
			<author>golodnyj</author>
		</item>
	

	
		<item>
			<title>12.06.2009 09:20:29 intr13</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702926</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702926</link>
			<description><![CDATA[Порой еще нужны программисты которые программируют на высоком уровне. Например, чтобы поставить что-нибудь на высокий шкаф:)]]></description>
			<pubDate>Fri, 12 Jun 2009 09:20:29 GMT</pubDate>
			<author>intr13</author>
		</item>
	

	
		<item>
			<title>12.06.2009 08:39:08 beq</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702807</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702807</link>
			<description><![CDATA[Не буду говорить, что это — мой первый подкаст, хотя так оно и есть. Поэтому прошу прощение за хрипы и скрипы на фоне моего голоса, постоянные «ну», «вот» и т.д. А вообще, думаю, получилось чудненько. Спасибо gamussa и golodnyj за приглашение поучаствовать.]]></description>
			<pubDate>Fri, 12 Jun 2009 08:39:08 GMT</pubDate>
			<author>beq</author>
		</item>
	

	
		<item>
			<title>12.06.2009 08:37:37 beq</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702797</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702797</link>
			<description><![CDATA[черт! Не догадался )))]]></description>
			<pubDate>Fri, 12 Jun 2009 08:37:37 GMT</pubDate>
			<author>beq</author>
		</item>
	

	
		<item>
			<title>12.06.2009 08:29:41 golodnyj</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702784</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702784</link>
			<description><![CDATA[+)]]></description>
			<pubDate>Fri, 12 Jun 2009 08:29:41 GMT</pubDate>
			<author>golodnyj</author>
		</item>
	

	
		<item>
			<title>12.06.2009 08:27:49 DeTeam</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702775</guid>
			<link>http://habrahabr.ru/blogs/hpodcasts/61939/#comment_1702775</link>
			<description><![CDATA[Надо было сказать не «как ни странно, программистом», а «как ни странно, _суровым_ программистом» :-)]]></description>
			<pubDate>Fri, 12 Jun 2009 08:27:49 GMT</pubDate>
			<author>DeTeam</author>
		</item>
	

	
</channel>
</rss>

