|
قسمت
سوم ساخت
سرويسهاى SOAP در Apache SOAP با
جاوا
اسكريپت نويسنده:
Tarak Modi مترجم:
شهناز
پيروزفر چكيده:
از بخشهاي 1
و 2 دريافتيد
كه ساخت
سرويسهاي SOAP آسان
است. در اين
بخش راه
سادهتري
را براي
ساخت سرويسهاي
SOAP با Apache SOAP و جاوا
اسكريپت
فراخواهيد
گرفت. با
توجه به
صنعت
نامطمئن
نرمافزار،
شما ميخواهيد
درباره
آينده وب
اطلاع داشته
باشيد و
اينكه
چگونه ميتوانيد
استفاده
بهينه از
تجارب
جاواي خود
داشته
باشيد. SOAP ميتواند
به اين
پرسشها
پاسخ دهد. (Simple
Object Access Protocol) SOAP- پروتكل
با سيمي كه
از XML براي encoding دادهها
استفاده ميكند
- استقلال و
قابليت سير
پلات فرم
جاوا را در
سطح
بالاتري از
قابليت عمل
بينابيني
قرار ميدهد.
من در بخش
دوم، Apache SOAP،
پيادهسازي
مشخصه SOAP را كه
به سادگي
برنامههاي
كاربردي
مبتني بر SOAP را ميسازد،
معرفي
نمودم. با كمك
آن پيادهسازي
دو سرويس
ساده HelloWorld و
كلاينتهايي
را كه متد SayHelloTo() را
براي آن
سرويسها
درخواست
نمودند،
ساختيد و
دريافتيد با
وجود اينكه
ساخت سرويسهاي
SOAP كاملا
ساده است،
كلاينت
بايد بقيه
كار را تكميل
كند. كلاينت
بايد آبجكت Call را
تنظيم
نموده، متد invoke() را براي
آن صدا بزند
و سپس آبجكت Response يا
نتيجه
درخواست را
تفسير كند. ساخت
سرويسهاي SOAP با كمك
Apache SOAP ميتواند
از اين هم
سادهتر شود.
تنها يك پيشنياز
لازم است:
شما بايد يكي
از زبانهاي
اسكريپتنويسي
را بدانيد.
يكي از اين
زبانها جاوا
اسكريپت
است. شما ميتوانيد
سرويسهاي SOAP را در Apache
SOAP
با كمك جاوا
اسكريپت
بسازيد. بازسازي
Apache SOAP پشتيباني
اسكريپتنويسي
Apache SOAP بر روي (Bean Scripting Framework) BSF صورت
ميگيرد كه
در ابتدا آيبيام
آن را توسعه
داد و اينك
به عنوان
يك پروژه open-source
انتشار مييابد.
BSF سبب ميشود
تا جاوا
اسكريپتهاي
نوشته شده
در ساير زبانها
را اجرا
نموده و
ساير زبانهاي
اسكريپتنويسي
از كلاسهاي
موجود در
جاوا
استفاده
نمايند. Apache SOAP از
قابليت
بالاي BSF بهره
ميگيرد.
باينريهاي
استانداردي
كه شما از Apache دريافت
ميكنيد، از
اسكريپتنويسي
پشتيباني
نميكنند. Soap.jar حاوي
كلاس org.apache.soap.server.InvokeBSF نيست.
همانطور كه
ميدانيد هر
كسي كه از SOAP
استفاده ميكند
BSF.jar و
موتور
اسكريپتنويسي
نصب شده بر
روي ماشين
خود را ندارد.
اگر مايليد
سرويس SOAP خود را
اسكريپتنويسي
كنيد، بايد
كد اصلي را
به گونهاي
بازسازي
نماييد كه
كلاس InvokeBSF را در
بر گيرد. ابتدا
بايد (soap-src-2.0.zip) را از http://xml.apache.org/dist/soap/،
دريافت
نماييد. اينك
فايل مذكور
را در همان
دايركتوري
كه Apache SOAP را نصب
نموديد، unzip كنيد.
دايركتوري
ريشه من در
درايو E قرار
دارد. شما
بايد
دايركتوري src را در زير
دايركتوري Soap_2-0 كه
حاوي همه
كدهاي اصلي
براي Apache SOAP
بسازيد. پيش
از بازسازي
كد، بايد BSF
Jar مورد نياز
را دريافت
نماييد. آن
را ميتوانيد
در /ftp://ftp.mozilla.org/pub/js
بيابيد. آن
را با موتور Rhino جاوا
اسكريپت Mozilla به كار
ببريد. Rhino در يك
فايل Zip در نشاني http://www.mozilla.org/rhino/download.html قرار
دارد. من آن
فايل را در
دايركتوري
ريشه درايو E، يعني E:\rhino، باز
نمودم. سپس
به ابزاري
براي
بازسازي
نياز داريد: Ant،
پروژه نرمافزاري
ديگري از Apache، اين
ابزار مبتني
بر جاوا،
بخشي از
پروژه
مشابهي با
نام Jakarta بود كه وب
سرور Tomcat را
ايجاد نمود. Ant منحصر
به فرد است
و در آن همه
اطلاعات
ساخت نظير
ساخت dependency، target و غيره
به صورت
فايلهاي
پيكربندي XML مشخص
ميگردد. به
علاوه قابل
توسعه است. اينك
فرامين زير
را از
دايركتوري
نصب Apache SOAP اجرا
نماييد: Set
CLASSPATH=E:\jakarta-tomcat\lib\servlet.jar;E:\xerces-1_2_0\xerces.jar;E:\soap-2_0\lib\bsf.jar از
آن جايي كه
كد فوق فايل
پيكربندي XML را
مشخص نميسازد،
فايل Ant فايلي به
نام build.xml را در
دايركتوري
فعلي جستجو
ميكند - در
مورد من Apache SOAP
E:\Soap_2-0 اين فايل
را برايتان
تهيه ميكند.
با گشودن
فايل
مشاهده ميكنيد
كلاس InvokeBSF در
صورتي
كامپايل ميشود
كه كلاس com.ibm.bsf.BSFManager در classpath باشد.
به همين
دليل bsf.jar را
قرار دادم،
زيرا حاوي
كلاس BSFManager در ClassPath است. فايل
جديد ساخته
شده soap.jar را از
دايركتوري build\lib در
زيردايركتوري
lib (توصيه
ميكنم آن
را تغيير نام
دهيد و فايل
اصلي soap.jar را
ذخيره
نماييد) كپي
كنيد.
بالاخره bsf.jar و js.jar را به classpath وب
سرورتان
بيفزاييد.
اينك براي
اسكريپتنويسي
سرويسهاي SOAP آمادهايد. اسكريپتنويسي
- برنامه
كاربردي Helloworld اجازه
دهيد سرويس Helloworld بخش 2 را به
صورت جاوا
اسكريپت
بازنويسي
كنيم. سرويس
كامل در ذيل
آمده است: function sayHelloTo(name)
آيا
سادهتر
نشده است؟
شما ميتوانيد
اعمال مهمي
را در سرويس
انجام دهيد.
براي
نمونه، ميتوانيد
از اسكريپت
به هر يك از
كلاسهاي
جاوا
استاندارد
دسترسي
پيدا كنيد. كد
زير تاريخ
سرور را چاپ
ميكند. function sayHelloTo(name)
شما
ميتوانيد
هر يك از
كلاسهاي
جاوا را با
وارد نمودن
كلاسي كه
قصد دسترسي
به آن را
داريد،
بازيابي
نماييد. براي
نمونه،
اجازه دهيد
تا اسكريپت
را بهگونهاي
تغيير دهيم
كه از نام JavaBean استفاده
نماييد: importClass(Packages.hello.Name); راهاندازي
سرويس پيش
از استفاده
از نسخه
جاوا
اسكريپت
سرويس، بايد
آن را راهاندازي
نماييد.
همانطور كه
در بخش 2
فراگرفتيد
دو راه براي
اين كار
وجود دارد:
استفاده از
رابط
گرافيكي
مبتني بر وب
يا از خط
فرمان. اجازه
دهيد هر دو
روش را
بررسي
نماييم. استفاده
از ابزار administration مبتني
بر وب بدين
منظور به
نشاني http://localhost:8080/apache-soap/admin برويد.
بر روي دكمه Deploy در
فريم سمت
چپ كليك
كنيد. توجه
نماييد كه
از فيلد ID براي
ست نمودن ID
Object
استفاده
كنيد. زير
ساختار SOAP از
آبجكت ID براي
برقراري
ارتباط بين
درخواست(Remote Procedure Call) PRC و سرويس SOAP بهره
ميگيرد. همه
سرويسهاي Apache
SOAP
بايد ID object
داشته
باشند كه در
بين همه
سرويسهاي
نصب شده
براي آن
سرور، منحصر
به فرد باشد. ID را Urn:Hello تعريف
كنيد. فيلد
Scope را application تعريف
كنيد. فيلد Scope
بيانگر طول
عمر نمونه
سرويسي است
كه براي
درخواست به
كار ميرود.
(براي كسب
اطلاعات
بيشتر به
بخش 2 مراجعه
نماييد). شما
بايد فيلد Methods را به
ليستي كه با
فاصله از هم
جدا شدهاند
و حاوي اسامي
متدي است كه
در هنگام
نصب سرويس
صدازده ميشوند،
ست كنيد.
سرويس مثال
ما، فقط از متد
SayHelloTo()
پشتيباني
ميكند. از آن
جايي كه از
جاوا
اسكريپت به
جاي جاوا
براي پيادهسازي
سرويس
استفاده ميكنيد،
فيلد Provider Type را به Script ست
كنيد. شما
نبايد
مقاديري را
براي
فيلدهاي Java
Provider
يعني
فيلدهاي Provider
Class و Static ست
كنيد. اما
بايد
مقاديري را
براي
فيلدهاي Script
Provider
ست نماييد. Java Script
(Rhino)
را به عنوان
زبان
اسكريپت
انتخاب
نماييد. از آن
جايي كه
اسكريپت را
در جعبه متن Script قرار
داديد. Script
Filename
را خالي
نگاهداريد.
در Text box اسكريپت زير
را كپي
نماييد: importClass(Packages.hello.Name); اينك
به انتهاي
پنجره
مرورگر
برويد و بر
روي دكمه Deploy در زير
فرم (نه
دكمه Deploy در
فريم سمت
چپ) كليك
نماييد. براي
تاييد نصب
سرويس، روي
دكمه List در فريم
سمت چپ
كليك
نماييد. در
اين حالت
سرويس urn:Hello بايد
به عنوان
يكي از
سرويسهاي
موجود در
فهرست، به
نمايش
درآيد. بر روي
آن كليك
نموده و
اطمينان
حاصل كنيد
تا همه
اطلاعات آن
با آنچه كه
وارد
نموديد،
يكسان باشد. استفاده
از خط فرمان براي
راهاندازي
سرويس از
طريق خط
فرمان، همه
اطلاعات
راهاندازي
بايد در فايل XML
deployment descriptor قرار گيرد.
اين فايل
در ذيل آمده
است: <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
تفاوت
عمده در
اينجا (با
آنچه كه در
بخش 2 مورد
استفاده
قرار گرفت)
اين است كه Provider را به
جاي Java به Script ست ميكنيد.
در نتيجه به
جاي مشخص
نمودن كلاس
جاوا،
اسكريپت را
مشخص ميكنيد.
وب سرور را
پيش از راهاندازي
سرويس، Start كنيد.
كد زير نحوه
راهاندازي
سرويس را
نشان ميدهد: java org.apache.soap.server.ServiceManagerClient
DeploymentDescriptor.xml نام
فايلي است
كه حاوي deployment
xml
نشان داده
شده در فوق
است. براي
حصول
اطمينان از
راهاندازي
موفقيتآميز،
مورد زير را
بررسي
نماييد: java org.apache.soap.server.ServiceManagerClient
شما
بايد XML مشابهي
را در DeploymentDescriptor.xml
دريافت
نماييد. آزمايش شما
از برنامه
كلاينت
مشابه با
آنچه در بخش
2 آمده بود (Client.java) براي
آزمايش
سرويس HelloWorld
استفاده
خواهيد نمود.
در خلال
مدتي كه
سرور
درخواست SOAP را ميفهمد
و ميتواند
پاسخ SOAP را
بازگرداند،
كلاينت به
نحوه پيادهسازي
سرويس توجه
نميكند. در
اينجا از يك batch
file
براي اجراي hello.client استفاده
نمودم: set
CLASSPATH=E:\soap-2_0\samples\;E:\soap-2_0\lib\soap.jar;E:\xerces-1_2_0\xer با
مشاهده
پنجره
كنسول وب
سرور درمييابيد
كه تاريخ
فعلي و
خروجي John با هر
بار اجراي
كلاينت به
نمايش درميآيد. تابعه من
پشتيباني
پيادهسازي Apache
SOAP
را براي
زبانهاي
اسكريپتنويسي
در اين
مقاله
معرفي
نمودم. چرا
اين كار مهم
است؟ به نظر
من دليل
اصلي اين
است كه
توسعه وب
به نقطهاي
رسيده است
كه تقريبا
هيچ كس نميتواند
صفحات وب
پيچيده را
با كمك زبان
ساده
اسكريپتنويسي
نظير HTML، JavaScript سازد.
همينطور در Server-side توسعه
وب، يك نفر
ميتواند از
اسكريپتنويسي
JavaServerPage استفاده
كند. براي
توسعه SOAP نيز
همين منطق
وجود دارد SOAP بايد
ساده شود Apache
SOAP
نيز با
افزودن
پشتيباني
اسكريپتنويسي
همين كار را
انجام داد.
اما توجه
نماييد كه
گروه ديگري
را نيز بايد
مورد بررسي
قرار دهيد:
توسعهدهندگان
كلاينت؛
توسعهدهندگاني
كه سرويسهاي
مبتني بر SOAP را
درخواست ميكنند.
همانگونه
كه پيشتر
اشاره
نمودم
توسعهدهندگان
كلاينت در Apache
SOAP
بايد كار
اضافي
ديگري
انجام دهند
كه به طور
معمول
مجبور به
انجام آن
نيستند. لذا
در بخش بعدي
چهارچوبي
را مبتني بر
كلاسهاي
پراكسي
پويا در نسخه
3/1 از پلاتفرم
جاوا 2 معرفي
ميكنم كه
ساخت
كلاينتها
را سهولت ميبخشد. منابع: ·
The SOAP 1.1 specification at W3C ·
Download Apache SOAP from: ·
For more information about IBM's SOAP project
visit: ·
SilverStream CTO looks at SOAP, UDDI:
·
To find out more about the Bean Scripting
Framework, read "Script JavaBeans with the Bean Scripting
Framework," Mark Johnson (JavaWorld,
March 2000): ·
Find out more about Mozilla's
Rhino: ·
Find out more about Ant: ·
"Automate Your Build Process Using Java and
Ant," Michael Cymerman (JavaWorld, October 2001): ·
"Benefit from Platform-Independent
Builds," Sanjay Mahapatra (JavaWorld, August 2000) for more on build
processes and Ant: ·
Download Ant: |