49
OSGi and Spring Dynamic Module اده یز عل خ ی ش د ی ح و ی ل ا ی ی اد ز رش ف: هادز ب رشام می دس ا ی ه م ما ن هد زا ا( ی ش ا هاز ب۹۲

OSGi and Spring Dynamic Module

  • Upload
    sirius

  • View
    55

  • Download
    3

Embed Size (px)

DESCRIPTION

OSGi and Spring Dynamic Module. وحید شیخعلی زاده فرشاد زینالی استاد راهنما:مهندس امیرسام بهادر بهار۹۲. SpringDm. SpringDm یک فریم ورک جدید است که در واقع استفاده از مدل برنامه نویسی قدرتمندِ Spring در بستر فریم ورک OSGi میباشد . - PowerPoint PPT Presentation

Citation preview

Page 1: OSGi  and  Spring  Dynamic  Module

OSGi and

Spring Dynamic Module

زاده شیخعلی وحیدزینالی فرشاد

: بهادر امیرسام مهندس راهنما استاد۹۲بهار

Page 2: OSGi  and  Spring  Dynamic  Module

SpringDm

SpringDm مدل از استفاده واقع در که است جدید ورک فریم یکقدرتمنِد نویسی ورک Springبرنامه فریم بستر .میباشد OSGiدر

فریم این بهتره هرچه شناخت برای میاید بر تعریفهم از که همانطوربدانیم است نیاز ابتدا .OSGiورک چیست

ورک فریم با ادامه در منظور همین علل OSGiبه و می‌شویم آشنا. می‌کنیم برسی‌ را ورک فریم این ظهور

Page 3: OSGi  and  Spring  Dynamic  Module

OSGi

ورک تا OSGi‌Allianceتوسطشرکت OSGiفریم شد گذاری پایهنویسیسرویسگرا برنامه مدل از پشتیبانی بر عالوه بتواند

(SOP )م نویسی برنامه .ا،قابلیت کند اضافه جاوا زبان به را ژولهبرای یعل برنامه ،از جاوا نویسی برنامه زبان گیِر موفقیتچشم رغم

صورت به زبان بزرگ،این بسیار سازمان‌های تا گرفته همراه تلفن‌هایماژول نویسی برنامه مدل .هخاصاز نمیکند پشتیبانی

OSGi را خٔال این بتواند تا است شده ارائه که است استانداردی پلتفرم. پوششدهد جاوا نویسی برنامه زبان در

Page 4: OSGi  and  Spring  Dynamic  Module

Java limitation

از محدودی نوع همان modularity جاوا که می‌کند پشتیبانی‌ راobject-oriented: دارد را زیر ایرادهای مدل این که است

۱( دسترسی‌. کنترِل در قابلیت(: code‌visibilityمحدودیت جاوا اگرچهرا )دسترسی می‌کند فراهم ما اما( public,private,protectedبرای

تنها قابلیت پایین capsulationاین .OOسطح است پاسخگو را۲ .نام به مفهومی دیگر : classloaderمشکل یک به برنامه‌ها میباشد

ولی‌ libraryسری دارند این classloaderنیاز ویژگی‌‌های به توجهی‌ . و آزمون حل راه شرایط این در نمیکند آنها ورژِن جمله از الیبرری‌ها

درست، طخ ورژِن انتخاب با تا که می‌باشد خ JVMا پیغام ما طدیگر به اندهد.

Page 5: OSGi  and  Spring  Dynamic  Module

OSGi Solution

OSGi : کند حل را مشکالت این زیر موارد در میتواند۱.Class‌Not‌Found‌Exception: OSGi کد‌ها وابستگی که زمانی‌ تا که میدهد شما به را اطمینان این

. نشود اجرا برنامه نشده برطرف۲.Execution-Time‌Error : اشتباه ورژِن دلیِل classpathدر libraryبه۳ .صورت اقابلیت به برنامه در تغییرات Dynamicعمال۴ .موازی صورت به برنامه توسعه امکان۵( شده. نوشته کد‌های از مجدد (reusabilityاستفاده۶.Real-time‌developement

Page 6: OSGi  and  Spring  Dynamic  Module

Container

بر مبتنی‌ برنامه‌های سازی پیاده ‌OSGi,برای ۳ container معروف: دارد وجو�د

۱.equinox(Eclipse)

۲.Apache‌Felix

۳. Knopflerfish

Page 7: OSGi  and  Spring  Dynamic  Module

Bundle

-در سازند :OSGiواحد

در سازند .OSGi‌‌bundleواحد همان bundleمی‌باشد , واقع jarدرمحتویات اف بر عالوه که هستند ما دارای  اف jarیل‌های استاندارد یل

فایل META-INFپوشٔه پوشه این محتویات که میباشندMANIFEST.MF ب مربوط اطالعات و دارا jarآن هاست را فایل

میباشد.

Page 8: OSGi  and  Spring  Dynamic  Module

Bundle

سازنده : اجزای

.classResources

MANIFEST.MF

Page 9: OSGi  and  Spring  Dynamic  Module

Overview

Page 10: OSGi  and  Spring  Dynamic  Module

OSGi Layers

OSGi الی معماری ی‌:ه و OSGi الیه‌ها ۳از این از کدام هر و است شده تشکیل مفهومی الیه

. میکنند اضافه ما برنامٔه به را قابلیتی

:نیز اینجا الیه الیه مدل‌های سایر مانند نکته الی .ههر است وابسته خود زیرین الیه به

Page 11: OSGi  and  Spring  Dynamic  Module

Module

Module( :بسته‌بندی ی اشتراک( packagingوظیفه به همچنین و( میباشد الیه این به مربوط کد‌ها (code‌visibilityگذاری

Page 12: OSGi  and  Spring  Dynamic  Module

MANIFEST.MF

میشود ۳به تقسیم دسته : manifest.mf اطالعاتفایل

.human-readable information.1

. bundle identification.2

.code visibility.3

Page 13: OSGi  and  Spring  Dynamic  Module

Import and Export

شوند؟ دیده چه package هایی است؟ نیاز مورد چه package هایی

این به بهینه سال ۲پاسخ

Page 14: OSGi  and  Spring  Dynamic  Module

Lifecycle

Lifecycle :حیاط چرخه‌ همان واقع در الیه و bundleاین میباشددارد )bundleمدیریت عهد بر اجرا زمان در internal toرا

application) نصب شامل OSGi‌،startدر bundleوعملیات ، stop‌،update و

uninstall( آنexternal to application.)

Page 15: OSGi  and  Spring  Dynamic  Module

Lifecycle

Page 16: OSGi  and  Spring  Dynamic  Module

Lifecycle

install:‌bundle درونcontainer‌‌OSGi دستور از استفاده با Install‌file‌:<‌directory >یک و میشود آن‌ Idنصب به واحد

.هاختصاصداد میشود Resolve :نصب آن bundleپساز وابستگی‌‌های همٔه که هنگامی ،

وضعیت در خودکار صورت به باندل شد .resolveرفع می‌گیرد قرارstart :وابستگی‌‌های اینکه را bundleپساز آن می‌توان برطرفشد

دستور .start‌<idبا کرد< راه‌اندازیActive:‌bundle. است اجرا حال در اکنون هم و کرده کار به شروعStop :متوقف را نظر مورد باندل و میشود صادر که است دستوری

می‌کنیم.

Page 17: OSGi  and  Spring  Dynamic  Module

Lifecycle API

-۳interface الیه اصلی‌ روح واقع در :lifecycleکه میدهند تشکیل را 

۱.BundleActivator: با implement این با interfaceکردن osgi‌frameworkمی‌تو�ان

. عت وقتی‌ واقع در کرد متد bundleامل و این)( start نصبشدهورک ،فریم میشود اینکالس instance ۱اینترفیسفراخوانی از

متد‌های. واقع در یک stop)( و)( start می‌سازد instanceروی. میشوند کالساجرا آن از یکسان

public void start(BundleContext context) throws Exception;public void stop(BundleContext context) throws Exception;

Page 18: OSGi  and  Spring  Dynamic  Module

Lifecycle API

۲.BundleContext: این :۲به interfaceمتد‌های میشو�ند تقسیم دست۱ .حیاط )bundleمدیریتچرخه‌ (lifecycle managementها ۲.عت. سرویسها با امل واقع .bundleری اج object‌,BundleContext در این است طریق� از

. کرد پیدا دسترسی سرویسرجیستری به اینترفیسمیتوان

void addBundleListener(BundleListener listener);void removeBundleListener(BundleListener listener);void addFrameworkListener(FrameworkListener listener);void removeFrameworkListener(FrameworkListener listener);

Page 19: OSGi  and  Spring  Dynamic  Module

Lifecycle API

۳.Bundle: هر ایجاد bundle‌Objectیک framework نصبشده bundleبرای

لحاظ از تا . bundleآن logical می‌کند واقع در کند بیان راframework هر bundle اساس بر شده bundle‌Objectرا ایجاد

میشناسد.

که است این جالب اجرا OSGiنکته زمان درصورت به .bundleخود است

(system‌bundle)

long getBundleId();Dictionary getHeaders();Dictionary getHeaders(String locale);String getLocation();int getState();String getSymbolicName();

Page 20: OSGi  and  Spring  Dynamic  Module

services

. میشود انجام دیگری برای که کاری میان ارتباط و تامل الیه این که bundleوظیفه است،اینگونه Aها

و Xسرویس می‌کند رجیستر مصرفمی‌کند Xسرویس Bرا را پایٔه بر نویسی برنامه مدل از استفاده میان interfaceبا ها،وابستگی

میرود بین از سرویسگیرنده و سرویسدهنده

Page 21: OSGi  and  Spring  Dynamic  Module

services

نو�یسیسرویسگرا برنامه :مزایای

ها. ۱ کد قطعه کمتر وابستگیبا. ۲ نویسی .interfaceبرنامه ها ۳.metadata اضافه(Filter)

۴. سازی پیاده چند

Page 22: OSGi  and  Spring  Dynamic  Module

Whiteboard Pattern

Page 23: OSGi  and  Spring  Dynamic  Module

Listening for Services

osgi یک مدیریت ListenerAPIاز .Eventبرای می‌کند استفاده ها

۳ مدلEvent: داریم

۱.registered :کرد استفاده آن‌ از میتوان و شده سرویسرجیستر۲.modified : سرویسmetaData. است کر�ده تغییر۳.unregistering :حال .unregisterسرویسدر است شدن

Page 24: OSGi  and  Spring  Dynamic  Module

Details

کالس implementرا interface‌serviceListenerباید listenerهر.کند

هرinterface داشت سازی پیاده چند . همیتواند این در جالب نکتٔه باشداساس هبار بر که است پیاده metaDataاین روی میتوان آماده بدست

.filteringمل عسازی‌ها داد های انجام ورک فریم در قابلیتی چنین! عملکرد نه کرد فیلتر توان می سازی پیاده روی از صرفا و ندارد وجود

ServiceRegistration registration =

bundleContext.registerService(serviceName, new IMP(), metadata);

Dictionary metadata =new Properties();

Metadata. setProperties(key,value);

Page 25: OSGi  and  Spring  Dynamic  Module

Enterprise OSGi

   که به E-OSGiمزایایی :web‌applicationمیتواند بیاورد   

 الیٔهmodule  بندی   physicalساختار برای logicalو web‌app بهتری. میاورد ها

  الیٔهlifecycle دینامیک مدیریت بتوان که می‌کند ایجاد را قابلیت این.web‌appروی   باشیم داشته

  الیٔهservice استفاده امکان مختلفو بخشهای بین کمتر وابستگیها پروژه سایر در .آنها میکند فر�اهم

Page 26: OSGi  and  Spring  Dynamic  Module

WAB

 war از که است به metadata‌osgiفایلی و می‌کند پشتیبانی lifecycleالیٔه  ورک   .osgiفریم است  منابعشنیازمند به دسترسی‌ برای

Page 27: OSGi  and  Spring  Dynamic  Module

Apache Aries

از از Application‌Serverیکی‌ که است می‌کند EO هایی‌ پشتیبانییک هم یک web‌serverو هم این servlet‌containerاستو و

. شود آمیخته ورک‌ها فریم سایر با سادگی‌ به که دارد را قابلیت(websocket،osgi،JMX،JNDI،Clustering)...،

که است اینگونه کار پوشٔه WebContainerروند درونWEB-INF/web.xml باندل توسط سرولت‌هایی‌ چه ببیند تا میگردد را

و شده پوشٔه OSGiContainerفراهم درونMETA-INF/MANIFEST.MF باندل خود به مربوط اطالعات دنبال به

میگردد.

Page 28: OSGi  and  Spring  Dynamic  Module

classloader

Bootstrap (java/jre/lib)

Extension classloader (java/jre/lib/ext)

Application classloader (classpath)

Page 29: OSGi  and  Spring  Dynamic  Module

Apache Aries

Page 30: OSGi  and  Spring  Dynamic  Module

Spring dynamicمعرفی module

Spring DM از است OSGIو Springترکیبی

Spring DM iنویسی برنامه تحت Springمدل های برنامه باشد OSGIدر iمی

Spring DM از iتوانیم iمی iآن وسیله به که دهد iمی پیشنهاد برنامه کردن بنiدی ماژول مبنای بر حل راه یکهای ویژگی قالبOSGI iتمام کنیمSpring . iدر استفاده

اصلی هدف واقع که Spring DMدر است تعامل Springو OSGIاین در هم با شکل ترین ساده به بتوانند. دهند پوشش را همدیگر های iضعف بتوانند شکل این به تا باشند

Spring DM یک ی extenderدارای وظیفه که باشد iمیextender شرایط بررسی با که iاست OSGIاینBundle یک iاختصاصی صورت به آنها به کار Spring application contextها این با که OSGIبدهدBundle به قسمت ) Spring powered bundleها در تر مفصل صورت به رابطه این در هند می نوع تغییر

شد ( خواهد iصحبت iآتی های

Page 31: OSGi  and  Spring  Dynamic  Module

Spring dynamicچرا module

که مزایایی و فواید تمام جمله Spring Frameworkبا از دارد همراه و IOCبهAOP اما ، جمله :Springبودن از دارد هم مشکالتی

زیادی خیلی تعداد به کنیم می کار پیچیده و بزرگ های پروژه روی بر Beanزمانیکه داریم .configنیاز است مشکل بسیار آنها کردن مدیریت و

Spring تواناییmodule . روشی هیچ مثال برای ندارد را برنامه کردن بندیاینکه ، Visiilityبرای Bean هر و ندارد وجود کرد کنترل را توانایی Beanها

سایر ی از . beanمشاهده هم مستقیم صورت به اگر حتی دارد را ها beanهااز استفاده با نکنیم دنبال Spring application contextاستفاده به توانیم می

bean. باشیم نظر مورد

Page 32: OSGi  and  Spring  Dynamic  Module

ادامهconfigure مجدد شده dependency graphکiردن اعمال های وابستگی برای

(dependency injection : ) بین که هایی وابستگی به سوم ها beanمشکلکنید : فرض مثال برای گردد می بر دارد می bean Bاز bean Aوجود استفاده

صورت این در که . Bبه Aکند کنید فرض را زمانی حال کند می پیدا وابستگیصد چند دارای ما در beanبرنامه که باشد داشته وجود وابستگی آنها بین و باشدdependency graph و باشد اجرا حال در برنامه اگر حال ، باشد شده مشخص

بین کiه beanما زمانی تا ها وابستگی این ، آوریم وجود به جدیدی های وابستگی هابار یک برنامه که restartتمام است این آن دلیل و شد نخواهد اعمال نشود

بین وابستگی شدن در beanمشخص هم آن و گیرد می صورت یکبار فقط هاامکان spring containerشدن start upزمان و ها updateاست وابستگی

مدیریت . و ندارد وجود اجرا حین ی dependencyدر وسیله به تماما Springهاو شود می نمایید .developerانجام کنترل خود را مدیریت تواند نمی

Page 33: OSGi  and  Spring  Dynamic  Module

ادامه حال این جمله :OSGIدر از ، بود هایی کمبود دارای هم لیتiقاب باشدAOP iو IOCدارای نمی

نام به جدiیدiی تکنولوژی ها کمبود همین خاطر آمد Spring DMبه وجود به

از استفاده ورک spring dmبا فریiم قدرت و ها ویژگی تمام از توانید می در springشمای استفاده تحت های .osgiبرنامه ببرید بهره

Spring dm تمام که دارد را این مدیریت bundleتوانایی کامال صورت به و iکند شناسایی را هایک آنها از کدام هر برای کند spring application contextشده ایجاد اختصاصی

Page 34: OSGi  and  Spring  Dynamic  Module

ادامهspring dm از خاصی نوع نام : bundleیک به کند می معرفی را Spring powered bundlesها

Spring powered bundle :از نوع یک bundleاین اتوماتیک صورت به که دارند را این توانایی هاspring application context توسط تماما که باشند داشته می spring dmاختصاصی مدیریت

های ویژگی تمام از توانند می و کنند springشوند استفاده

Spring powered bundle همانند توانند osgi bundleها می را packageها خود نیاز مورد هایimport وexport کنند

Spring powered bundle از های spring containerها توانایی کند spring dmو می استفادهبا باشد : osgi containerتا روش دو به تواند می تعامل این و ، باشند ارتباط (xml base 2( 1در

annotation base

Page 35: OSGi  and  Spring  Dynamic  Module
Page 36: OSGi  and  Spring  Dynamic  Module

ادامه مبحث یک osgiدر از استفاده مقدار Activator Bundleبا ، تعریف را خود باندل ،

و اولیه از serviceدهی یا و کرده .serviceثبت کنیم استفاده ها

Spring powered bundle یک شامل خود springاز instanceدرونcontainer این از استفاده با که ، باشد های containerمی ویژگی از توانیم می

IOC وAOP به نیازی دیگر و کنیم زیرا Bundle Activatorاستفاده باشد نمیspring container توسط اتوماتیک صورت .spring dmبه شود می فراخوانی

Page 37: OSGi  and  Spring  Dynamic  Module

Spring DM’s extender mechanisms

Spring DM یکextender bundle به دادن گوش آن وظیفه که آورد می وجود بهbundle روی بر خواهند می که است این osgi containerهایی اگر ، شوند ها bundleنصب

، بودند الزم شرایط به extenderدارای را و . spring powered bundleآنها کند می تبدیلیک اختصاصی صورت به کدام هر .spring application contextبرای کند می ایجاد

: سوالspring extender کدام که گیرد می تصمیم به bundleچگونه springبایدpowered bundle یک اینکه برای ؟ شود به bundleتبدیل spring poweredبتواند

bundle شامل باید شود باشد :2تبدیل ویژگیدایرکتوری 1( دارای دایرکتوری META-INF/springباید داخل که فایل springباشد یک باید

xml برایconfigure کردنspring باشد داشتهفایل 2( داخل دایرکتوری MANIFEST.MFدر در یک META-INFواقع نام headerدارای به

Spring-Context این مقدار واقع در که ، که headerباشد است فایلی محل کننده مشخصspring راconfigure کرد خواهد

Page 38: OSGi  and  Spring  Dynamic  Module
Page 39: OSGi  and  Spring  Dynamic  Module

Kinds of supported bundles

Spring DM 2 نوعbundle: کند می ساپورت را(1standard Spring-powered bundles(2web bundles

از نوع یک با ما قبلی اسالیدهای در spring extender bundleدر که شدیم آشنابرای تنها می standard Spring-powered bundlesواقع قرار استفاده مورد

از دیگری نوع اما ، برای extenderگیرد آنها از که دارند وجود ها web bundleهاگویند می آنها به اصطالحا که شوند می از web extenderاستفاده که ،web

extender سازی پیاده سمت bundleبرای در استفاده web applicationها ها. شود می

Page 40: OSGi  and  Spring  Dynamic  Module
Page 41: OSGi  and  Spring  Dynamic  Module

Kinds of supported bundles

Spring DM 2 نوعbundle: کند می ساپورت را(1standard Spring-powered bundles(2web bundles

از نوع یک با ما قبلی اسالیدهای در spring extender bundleدر که شدیم آشنابرای تنها می standard Spring-powered bundlesواقع قرار استفاده مورد

از دیگری نوع اما ، برای extenderگیرد آنها از که دارند وجود ها web bundleهاگویند می آنها به اصطالحا که شوند می از web extenderاستفاده که ،web

extender سازی پیاده سمت bundleبرای در استفاده web applicationها ها. شود می

Page 42: OSGi  and  Spring  Dynamic  Module
Page 43: OSGi  and  Spring  Dynamic  Module

Equinox container for web

Spring DM ازversion 1.1 سازی پیاده ، بعد محیط web applicationبه روی بر را OSGIها. کند می ساپورت

سازی به web applicationپیاده نسبت نیازمند desktop applicationها و است متفاوت حدودی تا ها.web containerیک باشد می

واقع میان spring dmدر کند می عمل پلی web containerو osgi containerمشابه سمت ، webدر spring dm ازweb extender آن ی وسیله به تا کند می را web bundleاستفاده ها

کند نصب و شناسایی

Spring DM سمت کند :web container، 2از webدر می ساپورت(1Apache Tomcat ورژن بعد 5.5از به(2Jetty

Tomcat is the default container in Spring DM

Page 44: OSGi  and  Spring  Dynamic  Module

Packaging a web bundle

سمت از web applicationدر استفاده برای روی web bundleها 2نیازمند web containerبرهستیم : مرحله

(1Deploy کردنweb bundle روی یک osgi containerبر معمولی bundleهمانندگرفتن 2( قرار بین spring dm web extenderواسط ارتباط برقراری توانایی osgi containerبرای

web containerو

اینکه روی bundleبتواند spring dm web extenderبرای بر ، web containerرا deploy ، کندbundle دارای باید نظر باشد :2مورد ویژگی

فایل .1( باشد warپسونددایرکتوری 2( شامل باشد WEB-INFفایل

مقاله این در باشند bundleکه می دوم شرط دارای ما های

Page 45: OSGi  and  Spring  Dynamic  Module

Spring DM standard extender mechanisms

iاصلی وظiایف از iیکیSpring dm standard extender به دادن گوشbundle روی بر خواهند iمی که است iهاییosgi container صورت در تا بگیرند قرار

الزم شرایط به extenderداشتن را کند powered bundleآنها تبدیل

Extender بر روی bundleعالوه بر خواهند iمی که به containerهایی شوند نصبspring powered bundle روی بر که iهاییosgi container حتی یا و هستند نصب

حالت کiند activeدر می بررسی مرتبا را آنها شرایط و دهد iمی گiوش باشند iمی نیز

دیدگاه میان osgi containerاز تفاوتی standard poweredو osgi bundleهیچbundle از دو هر زیرا ندارد دو packageوجود هر و کنند می استفاده یکسانی های

jar دایرکتوری دارای که هستند هایی باشند .META-INF/MANIFEST.MFفایل iمی

Page 46: OSGi  and  Spring  Dynamic  Module

ادامه های ویژگی است :2داشتن powered bundleاز چیز(1META-INF/spring فایل یک شامل است xmlکه(2Spring-Context manifest header

Spring extender ابتداMETA-INF/spring فایل شامل اگر کند می چک xmlرابرای فایل آن از فایل springکردن configureبود اگر اما ، کند می xmlاستفاده

به استفاده extenderنباشد springکiردن configureمربوط تواند نمی آن ازو داد .exceptionبکند خواهد

با است Spring-Context manifest headerاولویت

Page 47: OSGi  and  Spring  Dynamic  Module

HOW SPRING DM CREATES APPLICATION CONTEXTS

Spring powered bundle با رابطه در نگرانی یا createهیچگونه destroyووظایف spring application contextکردن جزو کار این و springندارد

extender باشد می

Spring dm extender اولین حالت bundleجزو به کiه است می activeهاییحالت در باید که دلیل این به ، سایر activeرود بتواند تا را bundleباشد ها

آنها به و کند دهد spring application contextشناسایی اختصاص

Spring dm extender که دارد را این در bundleتوانایی خودش قبل که هاییcontainer لزوم صورت در آنها به و کند شناسایی را اند شده springنصب

application context دهد اختصاص

Page 48: OSGi  and  Spring  Dynamic  Module

ادامه Usually, Spring-powered bundles are deployed after the Spring extender.

Spring extender تا کند می به spring application contextتالش اختصاص bundleرا هاییحالت در که هستند activeدهد

: است ترتیب این به کار روال پس)1Spring extender حالت activeدر)2Osgi bundle حالت activeدرbundleبه spring application contextاختصاص 3(

باال مراحل شوند Tread baseتمام می انجام

Page 49: OSGi  and  Spring  Dynamic  Module