الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هي Jini ؟

بدأه shado في 21 يوليو 2008 · 4 رد · 1,697 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

ان كلمة jini كلمة مستقلة غير مشتقة من كلمات اخرىاي انها ليست اختصار لاي مجموعة كلمات ويمكن تعريفها بانها بيئة حوسبة موزعة توفر تقنية التركيب والتشغيل "network plug and play" كما ان هذه التقنية تعتبر الاولى من نوعها في مجال الانظمة الموجهة بالخدمة

service-oriented systems

ميزة هذه التقنية انها لا تتتمد فقد على القسم البرمجي بل ايظا تتعداه الى الجانب المادي hardware

يطلق احيانا على نظام jini اسم Djinn

ولو نوضح اكثر هذه التقنية دعونا ناخذ هذا المثال ..

لنفرض انه لدينا شبكة وعندئذ اذا توفرت تقنية jini قانه عند وصل جهاز ما (كاميرة -طابعة-.....ز) على احد الاجهزة في الشبكة فان هذا الجهاز سوف يخبر الزبائن الموجودين على الشبكة بوجود هذا الجهاز المادي وليكن طابعة مثلا ..وذلك من خلال ارسال رسالة broadcasting مستمرة لكافة الزبائن على الشبكة ...وعندئد يستطيع هؤلاء الزبائن استخدام هذا الجهاز ايا كان من خلال استدعاء هذا الجهاز ولازم بقلكون انو كمان من اهم الميزات انو الزبون المستثمر او المستخدم للجهاز ما رح يقوم باي اعدادات للجهاز ...

ما هي مكونات jini

بشكل رئيسي تتكون من ثلاث عناصر رئيسية وهي الخدمة service , الزبون clinte ,خدمة البحث lookup service

الخدمة: هي العنصر (جهاز مادي او برنامج معين ) الذي سيتم استخدامهمن قبل الزبائن او المستثمرين على الشبكة ويتم تقديمها من قبل مزود الخدمة

الزبون : اي جهاز على الشبكة يطلب استخدام الخدمة

خدمة البحث : وهي وصلة الوصل بين الخدمة بحد ذاتها وبين مستخدمي الشبكة

يجب ان اذكر نقطة مهمة وهي ان jini هي مستقلة حتى عن بروتوكول tcp كما انه ليس من الضروري ان تكون الخدمة او الزبائن مكتوبة بلغة الجافا

بل يمكن ان تتضمن شيفرات مكتوبة بلغة اخرى بالاضافة الى ان الزبائنوالخدمات تتخاطب مع بعضها باستخدام بروتوكول jini

كيف تعمل jini:

عندما يتم اضافة الجهاز الذي ممكن ان يكون اما hardware او software الى الشبكة فانه سيقوم اولا بالبحث عن خدمة البحث lookup service وعادة هذا يتم باحد الطريقتين :

1-اما ان يعرف عنوان خدمة البحث وعندها سيتصل مباشرة

2-او يقوم بعملية بحث عنها من خلال ارسال broadcasting

وعندها يتم تسجيل الخدمة ضمن مجموعات الخدمات الاخرى الموجودة في خدمة البحث وتسمى المرحلة هذه بعملية تسجيل الخدمة service registration

اما بالنسبة للزبون فانه ايضا عند ما يطلب الخدمة مباشرة من خدمة البحث وذلك اذا كان يعلم عنوان خدمة البحث او يقوم بارسال طلب عام

broadcasting ليحد مكان وجود خدمة البحث ومن ثم يطلب الخدمة بعد كل ما سبق يستطيع الزبون استخدام الجهاز الذي تم اضافته الى الشبكة.

كيف تتم عملية تسجيل الخدمة او service registration

عندما يصل طلب مزود الخدمة الى خدمة البحث lookup service على المنفذ 4444 مانها تقوم باعادة غرض الى المخدم (مزود الخدمة ) هذا

الغرض يعرف باسم المسجل registar وضيفة هذا المسجل انه بروكسي الى خدمة البحث بمعنى ان اي اتصال بين مزود الخدمة وبين خدمة البحث سيكون من خلال المسجل registar

وان عملية التسجيل ايضا يجب ان تتضمن نسخة من كائن الخدمة هذه النسخة يتم تخزينها ضمن خدمة البحث .

راقبو الشكل ..

tnce2gmjafbq.jpg

اما ما يحدث من جهة ازبون فهو التالي ..

8b66eolxt98p.jpg

ساقوم لاحقا بطرح بعض الاكود لعمليات الاتصال بالخدمة اي كيف تتم عملية تحدد موقع البحث ....

الله معكم..

#2

السلام عليكم ,

نكمل ما توقفنا عند باذن الله ..لكن احب ان انوه ان سبب طرح هذه الطقنية هوا حاجتي اليها الان في العمل الذي اقوم به لخدمات لمزود خدمة احببت ان اشاركم بعض المعلومات.

نكمل باذن الله

كنت اريد ان اطرح فكرة كيفية تحديد موقع خدمة البحث

ذكرنا سابقا ان ذلك يتم بطريقتين اما ان يكون خدمة البحث lookupservice معروف وبشكل مباشر وعندها يتم الطلب مباشرة ( أي اتصال من نوع unicast)

او ممن ان يكون خدمة البحث عير معلومة عندها يتم البحث عنها باستخدام broadcasting

الحالة الاولى :عندما يكون العنوان معروف أي رقم الجهاز حيث يتم تشغيل خدمة البحث ورقم المنفذ معروفان فانه سيتم الاتصال بهذا الجهاز على المنفذ المحدد ويتم ذلك من خلال استخدام الصف LookupLocator وباستخدام سلسلة حرفية تدعى JiniURL

ان السلسلة JiniURL تمثل عنوان الجهاز مع المنفذ باستخدام بروتوكول jinni على النحو :

Jini://hostAddress:PortNo

بعد ذلك كل ما علينا القيام به استدعاء الطريقة getRegistrar التي ستعيد غرضا من نوع ServiceRegistrar


LookupLocator lookupLocator=new LookupLocator(jiniURL);
ServiceRegistrar registrar =lookupLocator.getRegistrar();
String jiniURL ="Jini://hostAddress:portNo";

الحالة الثانية :

عندما لايكون عنوان خدمة البحث معروفة عندها لا بد من القيام بعملية بحث لتحديد امكنتها (قد يوجد اكثر من خدمة بحث) ويتم ذلك من خلال ارسال رسالة multicast باستخدام بروتوكول UDP وعند تسليم الرسالة خدمة بحث معينة فانها ترسل الاجابة على شكل unicast باستخدام بروتوكول TCP

اما الان ساقوم بعرض بعض الصفوف المستخدمة في اطار هذه العمليات

الواجهة DiscoveryListener

أي كائن يحاج الى اكتشاف خدمات البحث ان يحقق هذه الواجهة

هذه الواجهة او interface تتكون من طريقتين 2method الاولى discovered والثانية discarded

هذه الطريقتني تاخذ وسيطا من نوع DidcoveryEvent

فلاولى يتم استدعائها بمجرد العثور على خدمة بحث جديدة والثانية يتم استدعائها في حالة خدمة قديمة أي تم استكشافها

الصف DiscoveryEvent

ما يهمنا في هذا الصف الطريقة getRegistrar والتي تعيد مصفوفة من نوع ServiceRegistrar كل عنصر من عناطر هذه المصفوفة يمثل بروكسي لخدمة بحث معينة موجودة في مكان ما على الشبكة

الصف LookupDiscovery

هذا الصف يحاول اولا العثور على خدمات البحث باستخدام طلبات من نوع multicast وبعد دقائق سيقوم بايجاد جميع خدمات البحث على الشبكة ثم يتحول للقيام بمهمة اخرى وهي التنصت من اجل التعرف على أي خدمة بحث جديدة يتم اضافتها الى الشبكة

الصف LookupLocatorDiscovery

يحقق هذا الصف بروتوكول Unicast فقط .لذلك يجعل عملية ايجاد خدمة بحث محددة اسهل لكل من المخدم والزبون

هذا مقدمة بسيطة عن تقنية جميلة في الانظمة الموزعة والتطبيقات الشبكية ...

ارجو من لديه المزيد ان يذكر لان قسمنا يحتاج لطرح افكار بهذا المجال وخصوصا بعد دروس الاخ وجدي بالشبكات

اي سؤال في هذا الموضوع انا في الخدمة لكنني ما زلت ابحث عن المزيد عن هذه التقنية

الله معكم..

#3

السلام عليكم ..

طبعا انا اسف انو عم قطع الموضوع بس مضطر اني واكب المشروع الخاص فيني

هلا بدنا نكمل اليه الكشف عن خدمات البحث وطبعا ضمن الحالة الثانية التي لم نقوم بشرح عملها في الردود الماضية فبعد ان يتم ارسال multicast من اجل البحث عن خدمات البحث وبمجرد العثور على خدمة بحث ما

فان خدمة البحث تقوم بارسال اعلان من نوع multicast والذي يصل الى تطبيقك (ننبه ان تطبيقك يعمل كـــDiscoveryListtener) حيث يتم ارسال كائن من النوع DiscoveryEvent والذيي من خلاله نحصل على مصفوفة من نوع ServiceRegistrar

هذا كود للبحث عن خدمات البحث بطريقة او باسلوب multicast


Public Discovering(){
LookupDiscovery(LookupDiscover.ALL_ GROUP);
Lud.addDiscoveryListener(this);
}
Public void discovered(DiscoveryEnent e){
ServiceRegistrar registrars[]=e.getRegistrars();
}
}
Class Discovering implements DiscoverListener{

الكود السابق ليس مكتمل لكن يوضح الية الكشف عن خدمات البحث بشكل عام

اريد ان انوه الى السطر

LookupDiscovery(LookupDiscover.ALL_ GROUP);

حيث ALL_Group يمثل نوع المجموعة المراد الكشف عنها اما ماذا اقصد بالمجموعة يجب ان تعرف ان في خدمة البحث يوجد مجموعة من الخدمات مثلا مجموعة مسؤلة عن الطباعة أي خدمات الطباعة واخرا خاصة بخدمة المجادثة chat .....الخ كما توجد مجموعة افتراضية هي المجموعة العامة

نقوم بتوضيح بعض الامور ايضا بالنسبة للكود السابق

رأئنا كيف اننا مررنا وسيطا الى باني الصف LookupDiscovery وذكرنا انه يمثل نوع من المجموعات المتوفرة في خدمة البحث

وهلأ بدي اذكر بعض القيم التي ممكن انو بنمررها للصف السابق

Null او LookupDiscover.ALL_ GROUP ايا كانت المجموعة في خدمة البحث أي الكـــــــــــل

LookupDiscover.NO_GROUP لن يتم البحث عن أي مجموعة في خدمة البحث وفي هذه الحالة سنحتاج الى استدعاء الطريقة setGroups للقيام بالبحث عن مجموعة

بالاضافة الى الكود

ServiceRegistrar registrars[]=e.getRegistrars();

مصفوقة سلاسل غير فارغة هنا سيتم البحث عن المجموعة ذات الاسماء الموجودة ضمن السلاسل الممررة لذلك بعد ان نحدد موقع خدمة البحث ونحدد المجموعة المطلوبة نقوم بتسجيل الخدمة من خلال تحميل كائن الخمة اليها

نشكر لكم حسن الاستماع .

الله معكم

تم تعديل هذه المشاركة بواسطة shado في 22 يوليو 2008 في 17:27

#4

رائع يا شادي

بالمناسبة أين أجد هذه الفئات؟

هل لديك مثال كامل على الموضوع؟

اطرحه إن وجد

هل تستقي معلوماتك من كتاب معين؟

اكتبه من فضلك

في النهاية أنت تستحق كل الاحترام شادي

قلة من هم مثلك يأخذون ويعودون ليعطوا

تقبل احترامي

الله معك :lol:

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

نعم علاء المشكلة من كثر الضغوطات التي اتعرض لها انسا احيانا توضيح بعض الامور

لكن لن يخسر هذا المنتدا اي شي بوجود رجل مثلك يحث على المعلومة

كما ذكرت علاء ان هذه التقنية لا تقتصر على الجافا ونسيت ان اذكر ذلك وذلك لسبب انني اقوم بترك كل ما تعلمت من لغات برمجة

والتفت الى الجافا هذه التقنية ليست حكر على الجافا لكنها مستمدا من الجافا وهي للجافا

اما بالنسبة للمكاتب التي تسائل عنها فعلا توجد مكاتب ناخذ منها الفئات ولكن ليست موجود بال jdk الذي هوا افتراضي

http://www.jini.org/

زور هذا الموقع وستجد الحزمة البرمجية الخاصة بالتقنية jini تحت مكتب net. التي لا استطيع ان اعبر عنها بالكلام بما تحويه من تراث

قد يتجاوز تراث الحكم العثاني التي امتدت 400 عام ...

الحزم الموجودة بالموقع توجد الفئات التي تكلمت عنها ويوجد الكثير الكثير ... تحتاج الحزمة الى ربط مع jdk ولن اتطرق لهذا الموضع الان

اما بالنسبة لما اقره من كتب نعم هناك كتاب ولكن ليس الكتروني يتكلم عن تقنيات البرمجة الموزعة والشبكية من jini و corba و rmi

واتوقع بانني احتاج احداهما قريبا ولن ابخل عليكم بما املك ...

الله معك