Какви ползи ви предоставя компонентната система на OSGi?
Е, ето доста голям списък:
Намалена сложност - Разработването с OSGi технология означава разработване на пакети: OSGi компонентите. Пакетите са модули. Те крият вътрешността си от други пакети и комуникират чрез добре дефинирани услуги. Скриването на вътрешни елементи означава повече свобода за промяна по-късно. Това не само намалява броя на грешките, но също така прави пакетите по-лесни за разработване, тъй като пакетите с правилен размер изпълняват част от функционалността чрез добре дефинирани интерфейси. Има интересен блог, който описва какво е направила OSGi технологията за техния процес на разработка.
Повторно използване - OSGi компонентният модел прави много лесно използването на много компоненти на трети страни в приложение. Все по-голям брой проекти с отворен код предоставят своите JAR файлове, готови за OSGi. Въпреки това търговските библиотеки също стават достъпни като готови пакети.
Реален свят - OSGi рамката е динамична. Той може да актуализира пакети в движение и услугите могат да идват и да си отиват. Разработчиците, свикнали с по-традиционната Java, виждат това като много проблематична функция и не виждат предимството. Оказва се обаче, че реалният свят е силно динамичен и наличието на динамични услуги, които могат да идват и си отиват, прави услугите перфектни за много сценарии от реалния свят. Например услуга може да моделира устройство в мрежата. Ако устройството бъде открито, услугата се регистрира. Ако устройството изчезне, услугата е нерегистрирана. Има изненадващ брой сценарии от реалния свят, които съответстват на този динамичен модел на обслужване. Следователно приложенията могат да използват повторно мощните примитиви на регистъра на услугите (регистриране, получаване, списък с експресивен филтърен език и изчакване услугите да се появят и изчезнат) в техния собствен домейн. Това не само спестява писане на код, но също така осигурява глобална видимост, инструменти за отстраняване на грешки и повече функционалност, отколкото би било приложено за специално решение. Писането на код в такава динамична среда звучи като кошмар, но за щастие има поддържащи класове и рамки, които премахват повечето, ако не и всички, от болката.
Лесно внедряване - OSGi технологията не е просто стандарт за компоненти. Той също така определя как компонентите се инсталират и управляват. Този API е използван от много пакети за предоставяне на агент за управление. Този агент за управление може да бъде толкова прост, колкото командна обвивка, драйвер за протокол за управление TR-69, драйвер за протокол OMA DM, облачен интерфейс за EC2 на Amazon или система за управление IBM Tivoli. Стандартизираният API за управление прави много лесно интегрирането на OSGi технология в съществуващи и бъдещи системи.
Динамични актуализации – OSGi компонентният модел е динамичен модел. Пакетите могат да бъдат инсталирани, стартирани, спрени, актуализирани и деинсталирани, без да се сваля цялата система. Много разработчици на Java не вярват, че това може да се направи надеждно и затова първоначално не го използват в производството. Въпреки това, след като използват това в разработката известно време, повечето започват да осъзнават, че действително работи и значително намалява времето за внедряване.
Адаптивен - OSGi компонентният модел е проектиран от самото начало, за да позволи смесването и съвпадението на компоненти. Това изисква зависимостите на компонентите да бъдат посочени и изисква компонентите да живеят в среда, в която техните незадължителни зависимости не винаги са налични. Регистърът на OSGi услугата е динамичен регистър, където пакетите могат да се регистрират, получават и слушат услуги. Този динамичен модел на услуга позволява на пакетите да открият какви възможности са налични в системата и да адаптират функционалността, която могат да предоставят. Това прави кода по-гъвкав и устойчив на промени.
Прозрачност - Пакетите и услугите са първокласни граждани в OSGi средата. API за управление предоставя достъп до вътрешното състояние на пакет, както и как е свързан с други пакети. Например, повечето рамки предоставят командна обвивка, която показва това вътрешно състояние. Части от приложенията могат да бъдат спрени за отстраняване на грешки при определен проблем или могат да бъдат въведени диагностични пакети. Вместо да се взират в милиони редове изходни данни и дълги времена за рестартиране, OSGi приложенията често могат да бъдат отстранени грешки с командна обвивка на живо.
Версии - Технологията OSGi разрешава ада на JAR. JAR адът е проблемът, че библиотека A работи с библиотека B;version=2, но библиотека C може да работи само с B;version=3. В стандартната Java нямате късмет. В OSGi средата всички пакети са внимателно версионирани и само пакети, които могат да си сътрудничат, са свързани заедно в едно и също класово пространство. Това позволява на двата пакета A и C да функционират със собствена библиотека. Въпреки че не се препоръчва да се проектират системи с този проблем с версиите, в някои случаи това може да бъде животоспасяващо.
Прост - OSGi API е изненадващо прост. Основният API е само един пакет и по-малко от 30 класа/интерфейса. Този основен API е достатъчен за писане на пакети, инсталирането им, стартирането, спирането, актуализирането и деинсталирането им и включва всички слушатели и класове за сигурност. Има много малко API, които предоставят толкова много функционалност за толкова малко API.
Малък - OSGi Release 4 Framework може да бъде внедрен в около 300KB JAR файл. Това са малки режийни разходи за количеството функционалност, която се добавя към приложението чрез включване на OSGi. Следователно OSGi работи на голям набор от устройства: от много малки, до малки, до мейнфрейми. Той изисква само минимална Java VM за стартиране и добавя много малко към него.
Бързо – Една от основните отговорности на рамката OSGi е зареждането на класовете от пакети. В традиционната Java JAR файловете са напълно видими и поставени в линеен списък. Търсенето на клас изисква търсене в този (често много дълъг, 150 не е необичайно) списък. Обратно, OSGi предварително свързва пакети и знае за всеки пакет точно кой пакет предоставя класа. Тази липса на търсене е значителен фактор за ускоряване при стартиране.
Мързелив - Мързелът в софтуера е добър и технологията OSGi разполага с много механизми, за да прави неща само когато наистина са необходими. Например, пакетите могат да бъдат стартирани с нетърпение, но също така могат да бъдат конфигурирани да стартират само когато други пакети ги използват. Услугите могат да бъдат регистрирани, но само когато се използват. Спецификациите са оптимизирани няколко пъти, за да позволят този вид мързеливи сценарии, които могат да спестят огромни разходи за изпълнение.
Сигурен - Java има много мощен фин модел за сигурност в долната част, но се оказа много труден за конфигуриране на практика. Резултатът е, че повечето защитени Java приложения работят с двоичен избор: без защита или с много ограничени възможности. Моделът за сигурност на OSGi използва модела за фина сигурност, но подобрява използваемостта (както и втвърдяването на оригиналния модел), като накара разработчика на пакета да уточни исканите подробности за сигурността в лесно проверена форма, докато операторът на средата остава изцяло отговорен. Като цяло OSGi вероятно осигурява една от най-сигурните среди за приложения, която все още може да се използва, освен хардуерно защитените компютърни платформи.
Ненатрапчиви - Приложенията (пакети) в OSGi среда са оставени сами. Те могат да използват практически всяко съоръжение на VM, без OSGi да ги ограничава. Най-добрата практика в OSGi е да се пишат обикновени стари Java обекти и поради тази причина не е необходим специален интерфейс за OSGi услуги, дори Java String обект може да действа като OSGi услуга. Тази стратегия прави кода на приложението по-лесен за пренасяне в друга среда.
Върви навсякъде - Е, зависи. Първоначалната цел на Java беше да работи навсякъде. Очевидно е, че не е възможно да се изпълнява целият код навсякъде, защото възможностите на Java VM се различават. VM в мобилен телефон вероятно няма да поддържа същите библиотеки като IBM мейнфрейм, работещ с банково приложение. Има два проблема, за които трябва да се погрижим. Първо, OSGi API не трябва да използват класове, които не са налични във всички среди. Второ, пакетът не трябва да стартира, ако съдържа код, който не е наличен в средата за изпълнение. И двата проблема са разгледани в спецификациите на OSGi.
Източник: www.osgi.org/Technology/WhyOSGi
person
Community
schedule
26.07.2013