osgi and spring dynamic module
Post on 23-Feb-2016
70 Views
Preview:
DESCRIPTION
TRANSCRIPT
OSGi and
Spring Dynamic Module
زاده شیخعلی وحیدزینالی فرشاد
: بهادر امیرسام مهندس راهنما استاد۹۲بهار
SpringDm
SpringDm مدل از استفاده واقع در که است جدید ورک فریم یکقدرتمنِد نویسی ورک Springبرنامه فریم بستر .میباشد OSGiدر
فریم این بهتره هرچه شناخت برای میاید بر تعریفهم از که همانطوربدانیم است نیاز ابتدا .OSGiورک چیست
ورک فریم با ادامه در منظور همین علل OSGiبه و میشویم آشنا. میکنیم برسی را ورک فریم این ظهور
OSGi
ورک تا OSGiAllianceتوسطشرکت OSGiفریم شد گذاری پایهنویسیسرویسگرا برنامه مدل از پشتیبانی بر عالوه بتواند
(SOP )م نویسی برنامه .ا،قابلیت کند اضافه جاوا زبان به را ژولهبرای یعل برنامه ،از جاوا نویسی برنامه زبان گیِر موفقیتچشم رغم
صورت به زبان بزرگ،این بسیار سازمانهای تا گرفته همراه تلفنهایماژول نویسی برنامه مدل .هخاصاز نمیکند پشتیبانی
OSGi را خٔال این بتواند تا است شده ارائه که است استانداردی پلتفرم. پوششدهد جاوا نویسی برنامه زبان در
Java limitation
از محدودی نوع همان modularity جاوا که میکند پشتیبانی راobject-oriented: دارد را زیر ایرادهای مدل این که است
۱( دسترسی. کنترِل در قابلیت(: codevisibilityمحدودیت جاوا اگرچهرا )دسترسی میکند فراهم ما اما( public,private,protectedبرای
تنها قابلیت پایین capsulationاین .OOسطح است پاسخگو را۲ .نام به مفهومی دیگر : classloaderمشکل یک به برنامهها میباشد
ولی libraryسری دارند این classloaderنیاز ویژگیهای به توجهی . و آزمون حل راه شرایط این در نمیکند آنها ورژِن جمله از الیبرریها
درست، طخ ورژِن انتخاب با تا که میباشد خ JVMا پیغام ما طدیگر به اندهد.
OSGi Solution
OSGi : کند حل را مشکالت این زیر موارد در میتواند۱.ClassNotFoundException: OSGi کدها وابستگی که زمانی تا که میدهد شما به را اطمینان این
. نشود اجرا برنامه نشده برطرف۲.Execution-TimeError : اشتباه ورژِن دلیِل classpathدر libraryبه۳ .صورت اقابلیت به برنامه در تغییرات Dynamicعمال۴ .موازی صورت به برنامه توسعه امکان۵( شده. نوشته کدهای از مجدد (reusabilityاستفاده۶.Real-timedevelopement
Container
بر مبتنی برنامههای سازی پیاده OSGi,برای ۳ container معروف: دارد وجو�د
۱.equinox(Eclipse)
۲.ApacheFelix
۳. Knopflerfish
Bundle
-در سازند :OSGiواحد
در سازند .OSGibundleواحد همان bundleمیباشد , واقع jarدرمحتویات اف بر عالوه که هستند ما دارای اف jarیلهای استاندارد یل
فایل META-INFپوشٔه پوشه این محتویات که میباشندMANIFEST.MF ب مربوط اطالعات و دارا jarآن هاست را فایل
میباشد.
Bundle
سازنده : اجزای
.classResources
MANIFEST.MF
Overview
OSGi Layers
OSGi الی معماری ی:ه و OSGi الیهها ۳از این از کدام هر و است شده تشکیل مفهومی الیه
. میکنند اضافه ما برنامٔه به را قابلیتی
:نیز اینجا الیه الیه مدلهای سایر مانند نکته الی .ههر است وابسته خود زیرین الیه به
Module
Module( :بستهبندی ی اشتراک( packagingوظیفه به همچنین و( میباشد الیه این به مربوط کدها (codevisibilityگذاری
MANIFEST.MF
میشود ۳به تقسیم دسته : manifest.mf اطالعاتفایل
.human-readable information.1
. bundle identification.2
.code visibility.3
Import and Export
شوند؟ دیده چه package هایی است؟ نیاز مورد چه package هایی
این به بهینه سال ۲پاسخ
Lifecycle
Lifecycle :حیاط چرخه همان واقع در الیه و bundleاین میباشددارد )bundleمدیریت عهد بر اجرا زمان در internal toرا
application) نصب شامل OSGi،startدر bundleوعملیات ، stop،update و
uninstall( آنexternal to application.)
Lifecycle
Lifecycle
install:bundle درونcontainerOSGi دستور از استفاده با Installfile:<directory >یک و میشود آن Idنصب به واحد
.هاختصاصداد میشود Resolve :نصب آن bundleپساز وابستگیهای همٔه که هنگامی ،
وضعیت در خودکار صورت به باندل شد .resolveرفع میگیرد قرارstart :وابستگیهای اینکه را bundleپساز آن میتوان برطرفشد
دستور .start<idبا کرد< راهاندازیActive:bundle. است اجرا حال در اکنون هم و کرده کار به شروعStop :متوقف را نظر مورد باندل و میشود صادر که است دستوری
میکنیم.
Lifecycle API
-۳interface الیه اصلی روح واقع در :lifecycleکه میدهند تشکیل را
۱.BundleActivator: با implement این با interfaceکردن osgiframeworkمیتو�ان
. عت وقتی واقع در کرد متد bundleامل و این)( start نصبشدهورک ،فریم میشود اینکالس instance ۱اینترفیسفراخوانی از
متدهای. واقع در یک stop)( و)( start میسازد instanceروی. میشوند کالساجرا آن از یکسان
public void start(BundleContext context) throws Exception;public void stop(BundleContext context) throws Exception;
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);
Lifecycle API
۳.Bundle: هر ایجاد bundleObjectیک framework نصبشده bundleبرای
لحاظ از تا . bundleآن logical میکند واقع در کند بیان راframework هر bundle اساس بر شده bundleObjectرا ایجاد
میشناسد.
که است این جالب اجرا OSGiنکته زمان درصورت به .bundleخود است
(systembundle)
long getBundleId();Dictionary getHeaders();Dictionary getHeaders(String locale);String getLocation();int getState();String getSymbolicName();
services
. میشود انجام دیگری برای که کاری میان ارتباط و تامل الیه این که bundleوظیفه است،اینگونه Aها
و Xسرویس میکند رجیستر مصرفمیکند Xسرویس Bرا را پایٔه بر نویسی برنامه مدل از استفاده میان interfaceبا ها،وابستگی
میرود بین از سرویسگیرنده و سرویسدهنده
services
نو�یسیسرویسگرا برنامه :مزایای
ها. ۱ کد قطعه کمتر وابستگیبا. ۲ نویسی .interfaceبرنامه ها ۳.metadata اضافه(Filter)
۴. سازی پیاده چند
Whiteboard Pattern
Listening for Services
osgi یک مدیریت ListenerAPIاز .Eventبرای میکند استفاده ها
۳ مدلEvent: داریم
۱.registered :کرد استفاده آن از میتوان و شده سرویسرجیستر۲.modified : سرویسmetaData. است کر�ده تغییر۳.unregistering :حال .unregisterسرویسدر است شدن
Details
کالس implementرا interfaceserviceListenerباید listenerهر.کند
هرinterface داشت سازی پیاده چند . همیتواند این در جالب نکتٔه باشداساس هبار بر که است پیاده metaDataاین روی میتوان آماده بدست
.filteringمل عسازیها داد های انجام ورک فریم در قابلیتی چنین! عملکرد نه کرد فیلتر توان می سازی پیاده روی از صرفا و ندارد وجود
ServiceRegistration registration =
bundleContext.registerService(serviceName, new IMP(), metadata);
Dictionary metadata =new Properties();
Metadata. setProperties(key,value);
Enterprise OSGi
که به E-OSGiمزایایی :webapplicationمیتواند بیاورد
الیٔهmodule بندی physicalساختار برای logicalو webapp بهتری. میاورد ها
الیٔهlifecycle دینامیک مدیریت بتوان که میکند ایجاد را قابلیت این.webappروی باشیم داشته
الیٔهservice استفاده امکان مختلفو بخشهای بین کمتر وابستگیها پروژه سایر در .آنها میکند فر�اهم
WAB
war از که است به metadataosgiفایلی و میکند پشتیبانی lifecycleالیٔه ورک .osgiفریم است منابعشنیازمند به دسترسی برای
Apache Aries
از از ApplicationServerیکی که است میکند EO هایی پشتیبانییک هم یک webserverو هم این servletcontainerاستو و
. شود آمیخته ورکها فریم سایر با سادگی به که دارد را قابلیت(websocket،osgi،JMX،JNDI،Clustering)...،
که است اینگونه کار پوشٔه WebContainerروند درونWEB-INF/web.xml باندل توسط سرولتهایی چه ببیند تا میگردد را
و شده پوشٔه OSGiContainerفراهم درونMETA-INF/MANIFEST.MF باندل خود به مربوط اطالعات دنبال به
میگردد.
classloader
Bootstrap (java/jre/lib)
Extension classloader (java/jre/lib/ext)
Application classloader (classpath)
Apache Aries
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آتی های
Spring dynamicچرا module
که مزایایی و فواید تمام جمله Spring Frameworkبا از دارد همراه و IOCبهAOP اما ، جمله :Springبودن از دارد هم مشکالتی
زیادی خیلی تعداد به کنیم می کار پیچیده و بزرگ های پروژه روی بر Beanزمانیکه داریم .configنیاز است مشکل بسیار آنها کردن مدیریت و
Spring تواناییmodule . روشی هیچ مثال برای ندارد را برنامه کردن بندیاینکه ، Visiilityبرای Bean هر و ندارد وجود کرد کنترل را توانایی Beanها
سایر ی از . beanمشاهده هم مستقیم صورت به اگر حتی دارد را ها beanهااز استفاده با نکنیم دنبال Spring application contextاستفاده به توانیم می
bean. باشیم نظر مورد
ادامه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انجام کنترل خود را مدیریت تواند نمی
ادامه حال این جمله :OSGIدر از ، بود هایی کمبود دارای هم لیتiقاب باشدAOP iو IOCدارای نمی
نام به جدiیدiی تکنولوژی ها کمبود همین خاطر آمد Spring DMبه وجود به
از استفاده ورک spring dmبا فریiم قدرت و ها ویژگی تمام از توانید می در springشمای استفاده تحت های .osgiبرنامه ببرید بهره
Spring dm تمام که دارد را این مدیریت bundleتوانایی کامال صورت به و iکند شناسایی را هایک آنها از کدام هر برای کند spring application contextشده ایجاد اختصاصی
ادامه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
ادامه مبحث یک osgiدر از استفاده مقدار Activator Bundleبا ، تعریف را خود باندل ،
و اولیه از serviceدهی یا و کرده .serviceثبت کنیم استفاده ها
Spring powered bundle یک شامل خود springاز instanceدرونcontainer این از استفاده با که ، باشد های containerمی ویژگی از توانیم می
IOC وAOP به نیازی دیگر و کنیم زیرا Bundle Activatorاستفاده باشد نمیspring container توسط اتوماتیک صورت .spring dmبه شود می فراخوانی
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 کرد خواهد
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ها ها. شود می
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ها ها. شود می
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
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که می دوم شرط دارای ما های
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می
ادامه های ویژگی است :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اولویت
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 دهد اختصاص
ادامه 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تمام می انجام
top related