|
J2SE1.4 در
داخل
مجموعه CORBA
زندگي جديد خود
را آغاز ميكند قسمت
اول نويسنده:
Tarak Modi Javaworld مترجم:
محمدرضا
معظمي خلاصه CORBA محيط
كار Java را با
فراهم كردن
يك چارچوب distributed-object كامل
ميكند كه
براي
پشتيباني
آن چارچوب
و قابليت
استفاده
مفيد از ديگر
زبانهاي
برنامهنويسي،
سرويس
ارائه ميدهد. محيط
كار Java نيز
براي CORBA موارد
زير را فراهم
ميكند؛ يك
بار بنويس، و
هر جايي كه
ميخواهي
ببر و اجرا
كن، يك محيط
عملياتي
شديدا
سودمند و يك
محيط كار
تنومند. از
تركيب Java با CORBA و ديگر
تكنولوژيهاي
enterprise كليدي،
محيط كار Java2 يك
محيط كار
نهايي براي
حل مشكلات
تكنولوژي distributed ميباشد.
در اين چهار
بخشي كه به
موضوع
توسعه نسخه enterprise از CORBA ميپردازد،
آقاي Tarak Modi ويژگيهاي
جديد CORBA در (java2 Platform, Standart
Edition) J2SE 1.4 را
مورد
كندوكاو
قرار ميدهد
و در مورد
چگونگي
استفاه از
آن براي
ساخت
برنامههاي
شديدا قوي و
ماهرانه به
بحث و بررسي
ميپردازد.
بخش اول با
بررسي اين
ويژگيها
آغاز شده و
با يك Tutorial
مختصري بر
روي ساخت
يك نمونه
ساده از
برنامههاي CORBA-base با
استفاده از J2SE
1.4 خاتمه مييابد. Tarak Modi در
دههاي كه
گذشت، CORBA يا Common
Object Request Broker Architecture با وعده
نخستين
خودش به
توسعهدهندگان،
به حيات
خود ادامه
داده است،
به اين
مضمون كه
يك مشخصه
باز،
استاندارد و
بدون
طرفداري از
شركت
فروشنده،
محيط كاري
و زبان به
منظور
محاسبات
ناهمگن
براي آنها
فراهم نكند.
استفاده از IIOP يا Internet
Inter-ORB Protocol به عنوان
يك برنامه
تحت CORBA از هر شركت
فروشندهاي
كه ميباشد
ميتواند بر
روي اكثر
كامپيوترها،
سيستم
عاملها،
زبانهاي
برنامهنويسي
و شبكهها
اثرپذيري
متقابلي را
با يك
برنامه تحت CORBA از
همان شركت
فروشنده و
يا يك شركت
ديگر، بر روي
اكثر
كامپيوترهاي
ديگر، سيستم
عاملها،
زبانهاي
برنامهنويسي
و شبكهها
داشته باشد. Java به
طور مشابهي Has
lived up equaliy well براي
قولش به
منظور فراهم
كردن محيط
يك بار
بنويس و هر
جايي كه ميخواهي
ببر و اجرا كن
و يك محيط
عملياتي
شديدا
سودمند و يك
محيط كار
تنومند. آيا
امري
غافلگيرانهتر
از اين است
كه ازدواج
بين CORBA و Java عقدي است
كه در
آسمانها
بسته شده
است؟ اين
مقاله در
اولين بخش
از 4 بخش خود
با يك
پيشينه
مختصري از
سير تكاملي CORBA شروع
خواهد شد و
سپس بخش
عمدهاي كه
به CORBA2.3.1 اضافه
شده و J2SE 1.4 را
پشتيباني
ميكند، به
طور مختصر
بيان خواهم
كرد و در آخر
نيز با بررسي
اين كه ما
در چه
مواردي يك
برنامه با
استفاده از CORBA و J2SE
خواهيم
ساخت، به
مقاله
پايان
خواهم داد. بررسي
سريع
تاريخچه در
سال 1991 OMG يا Object
Management Group، نرمافزار
CORBA1.1 را معرفي
كرد كه IDL يا Interface
Definition Language و APIها
را معين ميكرد
و به صورتي
كه اثر
متقابل از
يك Object
به نام Client/server را
همراه يك
عملكرد
معيني از يك ORB يا Object
Request Broker فعال ميساخت.
CORBA2.0 كه
در دسامبر 1994
تنظيم شد يك
گام بزرگي
را پيش برد و
به شكلي
واقعي
قابليت
استفاده
مفيد بين ORBها
را از شركتهاي
متفاوتي از
طريق IIOP، كه IP/TCP
mapping
از GIOP يا General Inter-ORB Protocol ميباشد،
تعيين كرد. CORBA2.0
متعهد
اين قضيه
است كه همه ORBهاي
آماده، IIOP را
براي اطمينان
كه
اثرپذيري
متقابل
پشتيباني
ميكند. از
آن پس CORBA به
آرامي نسخههاي
خود را ارائه
كرد (نسخه
كنوني 2.6.1 است) ولي
در اين سير
تكاملي هر
محله شاهد
افزايش
ويژگيهاي
استواري
است كه به
سمت ساخت
سيستمهاي
ماهرانه enterprise جهتدار
شده است.
شركت Sun Microsystem در سال
1998 پشتيباني
از CORBA را همراه
نسخه release شده JDK1.2 و
موارد اضافه
شده Java IDL و يك ORB ساده
شروع كرد و
اين امر
آغاز يك
رابطه دور و
دراز بين Java و CORBA شد.
امروزه بعد
از گذشت 4 سال J2SE
1.4
اين ازدواج
را با
پشتيباني
از CORBA2.3.1 ميدهد.
(همانطور كه
قبلا اشاره
شد تازهترين
نسخه CORBA شماره 2.6.1 ميباشد؛
تنها تفاوت
مهم با نسخه 2.3.1 وجود CORBA
messaging است كه
در نسخه 2.4 اضافه شد) اساس
معماري CORBA
CORBA
هيچگونه
ضمانتي را
درباره
چگونگي
انجام اين
درخواستهاي on-way توسط ORBها
متعهد نميشود.
بطور مثال،
يك ORB كه
هيچگونه
درخواست on-way را
تحويل نميدهد،
ميخواهد
مورد قبول CORBA هم
باشد (عجب
توقعي!)
بالاخره CORBA2.4 نيز يك
سبك پيامرساني
asynchronous خبرهاي
را ارائه ميدهد
كه از آن
جايي كه
جزيي از J2SE
1.4 نميباشد
به خارج از
محدوده اين
سري مقالات
كشيده ميشود.
(همانطور كه
به ياد
داريد CORBA2.3.1 را
پشتيباني
ميكند). نكته
ديگر اينكه
من به شرح
و تفصيل در
مورد پروتكلهاي
ارتباطي
درگير با روش invocation و
تشكيلات ORB
پرداختم.
براي تصور
مطلب، ORB از 2
بخش اصلي
تشكيل شده
است: يك زمان
اجرا client-side (runtime) و يك
زمان اجرا server-side. Stubها
بخشي از
زمان اجراي client-side بوده
و skeletonها
بخشي از
زمان اجراي server-side ميباشند.
در شكل
تصوري
قضيه، وقتي
كه فقط يك ORB درگير
ميشود،
همانطور كه
در مثالمان
تاكنون
مطرح شد،
پروتكل
ارتباطي
استفاده
شده بين
زمان اجراي client-side و server-side، ممكن
است IIOP يا هر
پروتكل
ديگري كه
موردپسند vendor است
باشد. شكل 2
همين مطلب
را بيان ميكند.
در چنين
مواقعي
بسياري از ORBهاي
تجاري يك
پروتكل
بسيار
كارآمد و
بهينه شدهاي
را مورد
استفاده
قرار ميدهند.
ولي به
خاطر داشته
باشيد: تمام ORBهايي
كه با نسخه 2
يا بالاتر CORBA كار ميكنند
بايد
ارتباطي كه IIOP را
استفاده ميكند،
به خوبي
پشتيباني
كنند. تا
اثرپذيري
متقابل با ORBها
را مطمئن
سازد. اكنون
به شكل 3 كه
همان
عملكرد شكل 1
را با يك
تفاوت عمده
نشان ميدهد
توجه كنيد:
نرمافزار client براي
كار با اولين vendor مربوط
به ORB ساخته ميشود
و نرمافزار server با
دومين ORB vendor كار ميكند.
خوشبختانه
هر دوي ORBها
حداقل با CORBA2.0
كار ميكنند
و ميتوانند
از طريق IIOP نيز
ارتباط
داشته
باشند، در
غير اين
صورت (منظور
سازگاري)
ارتباطات
بين آنها
نميتوانست
تضمين شود. حالا
بياييد به
سراغ
جزييات
بيشتري در
مورد ORB runtime مربوط
به client-side برويم.
همانطور كه
در بالا ذكر
شد stub بخشي از ORB مربوط
به client-side است. يك stub به
صورت precompile شده و
دستدوز! (به
احتمال
خيلي زياد (Compile-generated براي
يك نرمافزار
كاربردي
خاص تحت server ميباشد.
ولي client مجبور
نيست براي
ارتباط
متقابل با
نرمافزار server اين stubها
را استفاده
كند. CORBA، dynamic
invocation interface يا (DII) را تعريف
ميكند كه
يك API با اهداف
عمومي (general-purpose) براي
درخواست methodهايي
بر روي نرمافزار
remort
server
ميباشد. در
بسياري از
حالات، DII
اثباتميكند
كه براي
استفاده،
مشكلتر از stub ميباشد
و يك مقدار
ناچيزي هم
كارآيي
كمتري دارد.
هر چند كه
شما بعضي
وقتها
احتياج به
استفاده از DII
داريد، به
عنوان مثال:
براي توسعه
ابزارهاي general-purpose و يا
براي
فراخواندن methodهاي
deferred synchronous.
چه
چيزهايي در J2SE 1.4 جديد هستند؟ همانطور
كه اخيرا به
آن اشاره
كردم،
ارتباط بين Java و CORBA در سال
1998 با JDK1.2
آغاز شد،
زماني كه
شركت Sun، Java IDL را به
عنوان يك Java
API
براي
اثرپذيري
متقابل و
كامل شدن با CORBA معرفي
نمود. Java IDL شامل ORBهاي
مبني بر Java كه IIOP را
پشتيباني
ميكنند و
كامپايلر IDL-to-Java، IDL به Java ميباشد
كه به
منظور توليد stubهاي
client-side و skeletonهاي
server-side است. در
سال 1999، شركت JDK
1.3 Sun
را release كرد، كه
اخيرا به
شكل (rechristened) J2SE و يك
كامپايلر 100
درصد خالص
جاوا به نام IDL-to-Java، idij را معرفي
كرد كه به
همراه
پشتيباني
از IDL abstract interface و value Typeها
ميباشد. امروزه،
با J2SE 1.4، شركت Sun، Portable
Object Adopter يا (POA)، Interceptorهاي
قابل حمل، Interoperable
Naming Service يا (INS)، dynamic anys,
GIOP1.2 را به
طور كامل
پشتيباني
ميكند. J2SE
1.4
شامل انجام
خدمات naming جديد
به نام Object
Request Broker Daemon يا (ORBD) ميباشد،
كه به Clientها
اجازه ميدهد
تا در محيط CORBA به
صورت Transparent مستقر
شده و Objectهاي
مقاوم را
براي Server
درخواست كنند. ORBD يك
پردازش Daemon است كه
سرويس Bootstrap،
سرويس Transient
naming،
سرويس Persistent
naming و
مدير Server را
شامل ميشود. J2SE
1.4
نيز (به منظور
سازگاري با
موارد قبلي) tnameserv را كه
انجام سرويس Transient
naming
است را
پشتيباني ميكند،
اين امر از JDK1.2
سرچشمه
گرفته است. من
استفاده از ORBD را در
تمام برنامههاي
كاربردي
جديدتان
توصيه ميكنم.
ما اين مطلب
را در مثال Hello
World
در اين مقاله
استفاده
خواهيم كرد.
من در بخش 2 و بخش
3 از اين سري
مقالات
درباره
مراجع objectهاي
پايدار و
ناپايدار
بيشتر صحبت
خواهم كرد. به
علاوه، J2SE 1.4 شامل
يك ابزار
جديد به نام Servertool ميباشد
كه يك Command-Line را
براي برنامهنويسهاي
نرمافزارهاي
كاربردي
فراهم ميكند
تا يك Persistent Server را
توسط ORBD Register، Unregister، Startup و Shutdown كنند. من از
اين ابزار در
بخشهاي 2 و 3 از
اين سري
مقالات
استفاده
خواهم كرد. Portable Object Adopter يك
object adopter در CORBA، نرمافزارهاي
كاربردي (يا objectهاي)
server و ORB را به هم
ميچسباند.
يك object adopter موارد
زير را ايجاد
ميكند:
مراجع object،
مديريت
دورههاي
عمر object (life cycles)،
ارسال
درخواستهاي client از ORB به object صحيح
و
بازگرداندن
نتيجه
درخواست به .ORB مشخصه CORBA تا
نسخه 2.2 فقط يك object
adopter
ساده و
مبهمي را
توصيف ميكرد
كه بدين
دليل Basic Object Adopter يا (BOA)
ناميده شد.
از آن جايي
كه BOA به عنوان
يك مشخصه
توصيف شده
است و براي
ايجاد نرمافزارهاي
كاربردي enterprise
غيركافي ميباشد،
هرORB Vendor،extentionهاي
اختصاصي
خودش را
اضافه كرد،
گاهي اوقات
حتي اسامي
مشابه ديگر Vendorها
براي ايجاد
يك توهم از
اثرپذيري
متقابل و code
portability استفاده
ميكنند. CORBA
2.2، POA را
معرفي كرد
كه بسياري
از كمبودهاي BOA را
مرتب و درست
نمود. POA با توجه
به اسمش، code
portability را در ميان ORBها
ضمانت ميكند.
POA نيز شرايط
جديدي را
براي CORBA ايجاد
كرده است،
مانند Servnts وServant
manager.
بخش 2 و 3 از اين
سري
مقالات،
جزييات POA را
همراه چند
مثال پوشش
ميدهد. Portable interceptors Portable
interceptors يا (PIS) تلههايي (hooks) در ORB ميباشد
كه سرويسهاي
ORB را قادر ميسازد
تا جريان
اجراي
طبيعي ORBها
را قطع نمايد.
من در بخش 4
چندين نوع
از PIS را مطرح
خواهم كرد. Interoperable Naming Serving INS سعي
دارد تا نقاط
سخت و دشوار
را توسط CORBA object refrence و naming device ساده
سازد. يكي از
مشكلاتي كه
توسعهدهندگان
با IORها
(Interoperable object refrences) داشتهاند
اين است كه
آنها فقط
براي
خواندن و
حتي به
خاطر سپردن
بسيار سخت و
دشوار ميباشند. INS، URLهاي
object كه سادهتر
و خواناتر ميباشد
را پشتيباني
ميكند،
شبيه آن
دسته از URLهايي
كه objectهاي
RML را (remote method invocation) تعيين ميكند. توسعهدهندگان
همچنين
خطايي در
مسير names كه بايد
براي
استفاده با naming
service
ايجاد شده
باشد، يافتهاند.
INS، stringified nameهايي
مانند Acme/Finance/Accountspayable را
پشتيباني
ميكند. در
بخش 4، من به INS خواهم
پرداخت و
همچنين يك naming
service browser مبتني بر GUI را
ايجاد خواهم
كرد. Dynamic anys براي
آن دسته از
شماهايي كه
با CORBA آشنايي
نداريد،
لازم به
ذكر است كه
يك any يك Universal data type ميباشد
كه ميتواند
تمام data typeهاي
ديگر را در
دست داشته
باشد. تا نسخه 2.2 از CORBA، يك any نميتوانست
به صورت
پويا (dynamically) ايجاد
شود و يك
مانع طاقتفرسايي
براي بعضي
از نرمافزارهاي
كاربردي
بود. براي
مثال، debuggerها،
واسطه
كاربرهاي
عمومي (generic user
interface) براي objectها
و خدماتي
مانند OMG Notification
Service،
همه قابليت
تفسير كردن (interpret)
مقادير بدون
دانستن IDL Typeهاي
مقادير در
زمان
كامپايل را
احتياج
دارند. DynAny
interface در نسخه 2.2 نرمافزار
CORBA اضافه شد
تا به نرمافزارهاي
كاربردي
اجازه دهد
مقادير any را
تجزيه و
تركيب كنند. DynAny به نرمافزارهاي
كاربردي
اجازه ميدهد
تا در زمان
اجراي (runtime) يك
مقدار كه
نوع آن
زمان
كامپايل
شدن نرمافزار
ناشناس
است، درست
شود و به
صورت يك any
فرستاده
شود و به
همين نحو Dynany به
برنامههاي
كاربردي
اجازه ميدهد
تا يك مقدار
از نوع any را از
يك عملكرد invocation
دريافت
دارد و نوع any را
تفسير كند (با
استفاده از (Typecode
interface) و مقدارش
را استخراج
كند (با
استفاده از (Dynamy Intgerface بدون
آگاهي در
مورد زمان
كامپايل (Compile-time) كه
نوعهاي IDL درگير
آن ميباشند.
من در اين
سري از
مقالات dynamic any بحث و
صحبت
نخواهم كرد. يك مثال
سريع Hello World حالا
كه شما ميدانيد
J2SE 1.4 چه چيزي
را ارائه ميدهد،
من قدمهاي
بنيادي را
كه احتياج
به ساختن
يك نرمافزار
كاربردي CORBA دارد
را امتحان
خواهم نمود.
از آن جايي
كه من
بسياري از
جزييات را
در 3 بخش
باقيمانده
از اين سري
مقالات
مطرح خواهم
كرد، لذا
زمان بسيار
زيادي را
براي توضيح code صرف
نخواهم
نمود. براي
ساخت يك
نرمافزار
كاربردي CORBA، اين
قدمهاي
اصلي را
دنبال كنيد: 1- methodها
را با
استفاده از IDL تعريف
كنيد. 2- IDL را با
استفاده از
يك Compiler كامپايل
نماييد،
بدينگونه
بناي Programming-language-Specific ساخته
ميشود. 3- نرمافزار
Server را اجرا
كنيد، كه
شامل
اجراهاي method و يك host كه
اجراي
همراه با ORB
runtime
را راهاندازي
و رجيستر ميكند. 4- نرمافزارهاي
client را براي
استفاده از server ايجاد
كنيد. همانطور
كه در بالا
اشاره
كردم، من در
اين مقاله
به سمت اين
گامها روي
آوردم. آخرين
بخش از اين
سري مقالات
مفاهيم
مهمي را با
مثالهاي
بهتري
توضيح
خواهم داد.
به دور از
مشغلههاي
بعدي،
بياييد با
مثال Hello World آغاز
كنيم: قدم اول:
تعريف متدها
با استفاده
از IDL اينجا
براي مثال Hello
World، IDL است. module hello قدم دوم:
كامپايل
كردن IDL با
استفاده از
كامپايلر idlj اينجا
دستوري است
كه IDL بالا را
براي ايجاد Java
interface و obstract
classes،
كامپايل ميكند idlj -fall Hello.idl idlj در
دايركتوري bin از
برنامه نصب J2SE
1.4
قرار دارد.
اين
كامپايلر خصوصيات
ترسيمي IDL-to-Java مربوط
به CORBA را اجرا ميكند
و برخي از
فايلهاي
جاوا را به
عنوان
خروجي
توليد ميكند
كه من به
طور خلاصه
در زير توضيح
ميدهم: abstract class :Hello
POA.Java كه object سرور
ما آن را بسط
خواهد داد. :Hello Helper.Java تابعي
كمكي را
فراهم ميسازد
و به طور
قابل
ملاحظهاي
متد narrow() احتياج
به قرار
گرفتن در
قالب مراجع object مربوط
به CORBA براي
نوعهاي
مناسب
خودشان
دارد. Hello
Holder.Java: هر وقت كه interface
(يا (Type مربوط به Hello يك
پارامتر Out يا inout براي يك
متد تعريف
شده در IDL باشد
استفاده ميشود. client Stub :-HelloStub.Java
عملكرد
تابعي CORBA را
براي client فراهم
ميكند. Hello.Java و :Hello perations.Java همراه با
هم interfaceهايي
كه شامل
نسخه IDL interface مربوط
به Java ما ميباشد
را فراهم ميكند. قدم سوم:
اجراي نرمافزارهاي
كاربردي سرور همانطور
كه در بالا
اشاره شد،
اجراي نرمافزارهاي
تحت server شامل 2
قسمت ميباشد:
يك class كه
متدهايي از interface مربوط
به server را اجرا ميكند
و class ديگري كه
ميزباني object را ميكند
و آن را با ORB
runtime و naming
service
رجيستر مينمايد. package hello; قدم چهارم:
ساخت نرمافزارهاي
client براي
استفاده server اينجا
يك نمونه client براي
تست سرور
وجود دارد: package hello; اينک
فايلهای server و client را كمپايل
کنيد. سپس
فرمان زير را
اجرا کنيد: orbd
-ORBInitialPort 1050 -ORBInitialHost
pcworldi.ipowermysql.com سرور
را اجرا کنيد: java
HelloServer -ORBInitialPort
1050 -ORBInitialHost pcworldi.ipowermysql.com سپس client را اجرا
کنيد: java
HelloClient -ORBInitialPort
1050 -ORBInitialHost pcworldi.ipowermysql.com تا دفعه
بعد در
اين مقاله
مقدمهاي،
من اين
مرحله را
براي ارائه
عناوين
سرگرمكننده
و پيشرفتهتر
در
باقيمانده
بخشهاي اين
سري مقالات
تنظيم كردهام.
در بخش 2 من
نسخه release شده POA در CORBA2.2 را به
شما معرفي
خواهم كرد
كه يكي از
مهمترين
موارد portability-enhancing اضافه
شده به CORBA را بعد
از IDL ارائه ميكند
بخش 3 به
سراغ
جزييات
بيشتر
درباره POA خواهد
رفت. و
بالاخره
بخش 4 knickknacks را
پوشش خواهد
داد، مانند portable
intercoptor و INS.
منابع ·
Sun's Java IDL documentation: ·
Advanced CORBA Programming with
C++, Michi Henning and Steve Vinoski (Addison-Wesley, 1999; ISBN 0201379279): ·
The OMG CORBA 2.3.1 specification: ·
Read more JavaWorld
articles written by Tarak Modi:
o "Axis:
The Next Generation of Apache SOAP" (January 2002)
http://www.javaworld.com/javaworld/jw-01-2002/jw-0125-axis.html o "Clean
Up Your Wire Protocol with SOAP" § Part
1: An introduction to SOAP basics (March 2001)
http://www.javaworld.com/javaworld/jw-03-2001/jw-0330-soap.html § Part
2: Use Apache SOAP to create SOAP-based applications (April 2001)
http://www.javaworld.com/javaworld/jw-04-2001/jw-0427-soap.html § Part
3: Create SOAP services in Apache SOAP with JavaScript (June 2001)
http://www.javaworld.com/javaworld/jw-06-2001/jw-0601-soap.html § Part
4: Dynamic proxies make Apache SOAP client development easy (July 2001)
http://www.javaworld.com/javaworld/jw-07-2001/jw-0706-soap.html o "Add
the Power of Asynchronous Processing to Your JSPs"
(February 2001)
http://www.javaworld.com/javaworld/jw-02-2001/jw-0209-jms.html o "Lock
On to an Alternate Synchronization Mechanism" (July 2000)
http://www.javaworld.com/jw-07-2000/jw-0714-locks.html ·
Browse the CORBA
section of JavaWorld's Topical Index: ·
Browse the Java 2 Platform,
Standard Edition (J2SE) section of JavaWorld's
Topical Index: ·
Share your experiences with CORBA in
our ·
Sign up for JavaWorld's
free weekly email newsletters: ·
You'll find a wealth of IT-related
articles from our sister publications at IDG.net: http://www.idg.net/jump?id=1100 |
Copyright 2002,
PC World Communications / International Data Group Inc. / PC World
All
rights reserved.