OSGi, Java Модульність та Jigsaw


95

Тож станом на вчорашній ранок я не мав уявлення про те, що таке OSGi. OSGi - це просто модне слово, яке я постійно бачив, що з’являється знову і знову, і, нарешті, я нарешті виділив трохи часу, щоб розглянути його.

Насправді це здається досить цікавою штукою, тому я хотів би розпочати, сказавши (для протоколу), що я не є анти-OSGi в будь-якому відношенні, і це не якесь "OSGi-bashing" питання.

Зрештою, схоже, OSGi - по суті - звернувся до JSR 277 щодо модульності Java, який визнав, що у JARспецифікації файлу є недоліки, які можуть призвести до вирішення простору імен та проблем із завантаженням класів у певних кутових випадках. OSGi також робить багато інших справді крутих речей, але з того, що я можу встановити, це її найбільша нічия (або одна з них).

Для мене - як досить нового (вже кілька років) розробника Java EE, абсолютно вражає те, що ми перебуваємо в 2011 році і в даний час живемо в еру Java 7, і що ці проблеми з завантаженням класів все ще присутні; особливо в корпоративних середовищах, де на одному сервері додатків можуть бути сотні JAR-файлів, причому багато з них залежать від різних версій один одного і всі працюють (більш-менш) одночасно.

Моє запитання:

Наскільки я зацікавлений в OSGi, і наскільки я хочу почати дізнаватися про нього, щоб побачити, де / чи це може бути корисним для моїх проектів, я просто не маю часу сісти і навчитися чогось такого великого, принаймні зараз.

То що робити розробникам, які не є OSGi, коли виникають ці проблеми? Які рішення Java (Oracle / Sun / JCP) наразі існують, якщо такі є? Чому лобзик вирізали з J7? Наскільки впевнена спільнота, яку Jigsaw запровадить наступного року в J8? Чи можна отримати Jigsaw для вашого проекту, хоча він ще не є частиною платформи Java?

Думаю, те, про що я тут прошу, - це поєднання паніки, інтриг та фейспалму. Тепер, коли я нарешті зрозумів, що таке OSGi, я просто не розумію, як щось на зразок Jigsaw знадобилося понад 20 років, щоб здійснитися, а потім, як це можна було консервувати з релізу. Це просто здається принциповим.

І, як розробнику, мені також цікаво, якими є мої рішення, без OSGi.

Крім того, Примітка : Я знаю, що це не питання " чистого програмування ", але перед тим, як у когось із вас ніс зіпсується, я хотів сказати (знову ж таки на протокол), що навмисно поставив це питання ТАК. Це тому, що я не маю нічого, крім найвищої поваги до своїх співвітчизників, і я шукаю відповіді на архітектурному рівні від деяких "богів ІТ", котрі бачу, що вони ховаються тут щодня.

Але для тих з вас, хто абсолютно наполягає на тому, щоб питання SO було підкріплено деяким сегментом коду:

int x = 9;

(Дякуємо всім, хто може зважити цей OSGi / Jigsaw / classloader / space names / JAR!)


Ну, Java 9 вже тут учора, з Jigsaw. Приємно читати: Розкрито 10
найпоширеніших хибних уявлень

Відповіді:


100

Спочатку зрозумійте, що основним варіантом використання Jigsaw є модулізація самого JRE. В якості другорядної мети він запропонує модульну систему, яка може використовуватися іншими бібліотеками та програмами Java.

Моя позиція полягає в тому, що щось на зразок Jigsaw, ймовірно, потрібно лише для JRE, але це створить набагато більше проблем, ніж вимагає вирішення, якщо їх використовувати інші бібліотеки або програми Java.

JRE - це дуже складний і особливий випадок. Йому більше 12 років і це жахливий безлад, пронизаний циклами залежностей та безглуздих залежностей. Одночасно використовується приблизно 9 мільйонами розробників і, можливо, мільярдами запущених систем. Тому ви абсолютно не можете рефакторингувати JRE, якщо це рефакторинг створює порушення.

OSGi - це модульна система, яка допомагає (або навіть змушує ) створювати модульне програмне забезпечення. Ви не можете просто посипати модульність поверх існуючої немодульної кодової бази. Перетворення немодульної кодової бази в модульну неминуче вимагає певного рефакторингу: переміщення класів у правильний пакет, заміна прямого створення екземпляра використанням розв’язаних служб тощо.

Це ускладнює застосування OSGi безпосередньо до кодової бази JRE, проте у нас все ще є вимога розділити JRE на окремі частини або "модулі", щоб можна було отримувати скорочені версії JRE.

Тому я розглядаю Jigsaw як своєрідний " крайній захід ", щоб зберегти живий код JRE, розділяючи його. Це не допомагає коду стати більш модульним, і я переконаний, що це насправді збільшить обслуговування, необхідне для розвитку будь-якої бібліотеки чи програми, яка його використовує.

Нарешті: OSGi існує, тоді як Jigsaw ще не існує і може ніколи не існувати. Спільнота OSGi має 12-річний досвід розробки модульних додатків. Якщо ви серйозно зацікавлені в розробці модульних додатків, OSGi - це єдина гра в місті.


Це ти теж? slideshare.net/mfrancis/… майже однаковий вміст.
Jin Kwon

Існують також модулі JBoss: docs.jboss.org/author/display/MODULES/Introduction Він також використовується Цейлоном (ceylonlang.org). Дивіться цю тему на форумі користувачів Цейлону: groups.google.com/forum/?hl=de#!topic/ceylon-users/RmDskLDNkug
OlliP

Чи дотримується останнє твердження: "Якщо ви серйозно зацікавлені в розробці модульних додатків, OSGi - це єдина гра в місті" ?
Адам Арольд,

1
@AdamArold Я так вважаю. Jigsaw досі не існує в жодній випущеній версії Java. JSR 376 (Java Platform Module System) все ще формує свою експертну групу і ще навіть не розпочав роботу над першим проектом. Java 9 не вистачає на термін більше року, і навіть після випуску не гарантується наявність модульності (вона зісковзнула з Java 7, потім з Java 8 і може легко прослизнути знову). Нарешті, опубліковані вимоги до JSR376 стверджують, що необхідна взаємодія OSGi ... тому прийняття OSGi залишається безпечним вибором і сьогодні єдиним практичним вибором.
Ніл Бартлетт

2
@AdamArold Добре, це трохи інше питання! Можна сказати, що OSGi - це архітектура мікропослуг, але я знаю, про що ви говорите. Для мене ідея моделювання кожної послуги як процесу є набагато складнішою проблемою з точки зору управління та безпеки та накладних витрат на комунікації. OSGi простіший і швидший. Сказавши це, дуже легко використовувати віддалені служби OSGi для переходу служб у і поза бар’єром процесу, тому я вважаю, що це хороший вибір для технології реалізації мікросервісів.
Ніл Бартлетт,

21

Це просто, якщо ви хочете сьогодні розробити реальну компонентну розробку в Java, то OSGi - це єдина гра в місті.

На мою думку, Jigsaw - це комбінація компромісу того, що можна зробити в JDK, та попередніх поганих стосунків між SUN та хлопцями OSGi. Можливо, він буде поставлятися з Java 8, але нам доведеться почекати і подивитися.

OSGi не є панацеєю, якщо ви працюєте в типовому корпоративному середовищі, і вам потрібно буде ознайомитись з тим, як працює завантаження класів, оскільки ряд відомих бібліотек (дивлячись на вас, Hibernate) зробив припущення щодо видимості класу, які більше не діють всередині OSGi.

Мені подобається OSGi, але я б не намагався модернізувати його до існуючої системи. Я б також зважив плюси і мінуси з точки зору розвитку нових територій - я б порадив поглянути на продукти Apache або Eclipse, які спрощують життя OSGi, а не робити все це самостійно.

Якщо ви не робите OSGi, то вам пощастило, якщо ви придумали систему, яка має залежності від різних версій однієї і тієї ж бібліотеки - все, що ви можете зробити, це спробувати уникнути проблеми, хоча потрібні кілька версій бібліотека здається мені «запахом» архітектури.


Так, я припустив, що між Сонцем та Альянсом OSGi було багато "поганої крові". Однак я не уявляю, що Oracle дозволить речам вийти з-під їх контролю. Ви дійсно говорите мені, що не планується найближчим часом справді виправити (не зламати) цю пекельну штуку JAR? Це мене вражає!
IAmYourFaja

6
@Mara Не зовсім чесно стверджувати, що там погана кров. Зрештою, Сан був одним із співавторів OSGi приблизно 12 років тому (JSR 8). Sun також приєднався до альянсу OSGi як повноправний член, приблизно за рік до придбання Oracle. Вони також розробили досить багато програмного забезпечення поверх OSGi, до Oracle. Найбільш очевидний приклад - Glassfish. Однак справедливо сказати, що існують тертя між окремими людьми в Sun / Oracle та OSGi.
Ніл Бартлетт

15

Мені подобається ваше вживання фрази "кутові справи" для опису поточної ситуації.

є недоліки у специфікації файлу JAR, які в певних кутових випадках можуть призвести до вирішення простору імен та завантаження класів

У будь-якому випадку, протягом багатьох років мене цікавлять інструменти та техніки, які підтримують створення та, ще краще, примусове застосування коду, який є більш чистим, більш відокремленим, більш цілісним та ремонтопридатним, ніж те, що, мабуть, могло б бути результатом без них. Таке поєднання було у тестовому дизайні та Junit.

Провівши пару місяців, перекладаючи значну частину нашої кодової бази на OSGi, я б сказав, що OSGi є ще кращим інструментом у цьому відношенні. І це справді достатня причина перейти до OSGi. Зрештою це заощадить вам багато грошей.

І, як бонус, це дасть вам шанс зробити багато цікавих речей. Уявіть, під час демонстрації, плавно модернізуючи модуль автентифікації, без втрати трафіку, для підтримки OAuth ... раптом знову стає радістю створювати речі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.