چیست

COM ابزاری است که قابلیتهای برنامه های موجد تحت محیطهای ویندوز را افزایش می دهد.اجزاء COM را با زبانهای مختلفی میتوان نوشت که دلفی یکی از قویترین آنهاست. COM سرنام Component Object Model است ، یعنی مجموعه مشخصاتی که میکروسافت برای ساختن اجزاء نرم افزارهایی مطرح کرده که می توان در برنامه ها گنجاند وقابلیت برنامه های موجود تحت محیطهای پنجره را افزایش داد. اجزای COM را با زبانهای مختلفی می توان نوشت. COM پایه و شالوده مجموعه مشخصات OLE (گنجاندن و مرتبط کردن شیءها) DirectX,ActiveX است.

COM+ نیز چیزی منفک از COM نیست ، تنها امکانات و قدرت آن ارتقا پیدا کرده است.اگر با Microsoft Transcation و قابلیتهای آنها آشنایی دارید ، باید گفت که COM+ قابلیتهای متناظر با دو ابزار فوق و COM را داراست و آنچه که در اینجا اهمیت دارد پشتیبانی دلفی از این ابزار است.
COM دارای چه قابلیتهایی است؟
COM اصلی ترین پایه تکنولوژی هایی است که به اجزاء نرم افزاری امکان می دهند. تا بدون توجه به زبانی که با آن ایجاد شده اند ، با یکدیگر ارتباط برقرار سازند.دو قابلیت مهم

COM که امروزه بیش از ۱۵۰ میلیون کاربر عبارت است از :
• COM مدلی مستقل از زبانهای برنامه سازی است ونحوه بکار گیری آن وابستگی به زبانی خواص ندارد.
• تمامی ابزارها و نرم افزارهای کاربردی تحت ویندوز از COM پشتیبانی می کنند.
در اینجا با دسته بندیهای COM تحت سه عنوان مدیریت اجزاء سازنده ، سرویس ها و Runtime به توضیح پرداخت.

سرویس ها
سرویس های COM+ ترکیبی از سرویس های MSMQ,MTS می باشند ، چنانکه برخی از کارشناسان بر این باورند که MSMQ,MTS در ارتقا سرویس های COM+ موثر بودند.مدیریت تراکنش ها مهمترین بخش این سرویس ها بوده که در ادامه به تشریح آنها خواهیم پرداخت.

از آنجا که COM+ بر مبنای طراحی شیء گرا استوار است و محیط های شیء گرا نیازمند سیستمی هستند که پردازش تراکنش ها را به محض دریافت آنها دهد، لذا مدیریت تراکنش ها یکی از ضروری ترین سرویس های COM+ به شمار می آید.
به طور مثال هنگامی که یک برنامه کاربردی تحت ویندوز مانند سفارش یک مشتری ، در حال پردازش داده ها می باشد ، به لحاظ ارتباط تنگاتنگ آن را با محیط های شیء گرا وهمچنین بانک های اطلاعاتی، لازم است تا عملیات پردازش تراکنش ها نیز به درستی انجام پذیرد ، به طو

ری که تراکنش ها بلافاصله پس از دریافت توسط سیستم اجرا شوند.کنترل تراکنش ها در COM+ به وسیله Distributed Transaction Coordinator (DTC) انجام میگیرد.در روش مدیریت تراکنش ها به وسیله DTC ، پردازش تراکنش ها بین یک یا چند سیستم به اشتراک گذاشته خواهد شد.

امنیت
برنامه های کاربردی ، بخصوص برنامه های سرویس دهنده /سرویس گیرنده ، در بر گیرنده حجم وسیعی از اطلاعات می باشند ، بدین ترتیب کنترل شدید بر صلاحیت و چگونگی کار کاربران آنها امری حیاطی است.
مفهوم امنیت در برنامه های کاربردی امروزی که توسط ابزارها و زبان های برنامه نویسی شیء گرا طراحی می گردند ، مفهومی گسترده تر از کنترل عملیات کاربران داراست. مدیریت عناصر ، اجزا سازنده وکنترل انتقال داده ها در این سیستم ها وهمچنین کنترل انتقال داده ها بین عناصر یک برنامه مقوله هایی است که به امنیت سیستم مربوط می شود.

ساختار امنیتی Role_Based
در ساختار امنیتی COM+ از روش Role_Based استفاده گردیده است.در این روش تمامی عناصر و گروههای کاری تحت عنوان Roles معرفی شده و در کنار روش امنیتی System_Based (این روش در همه سیستم های عامل پیاده سازی شده است) ، امنیت برنامه های کاربردی را تضمین می نمایند.
اما Roles به خودی خود تولید نمی شود. برای ایجاد Roles می بایست ابزار Component Services administration دلفی را به کار گرفت.در سمت چپ منوی Component Services ، یک لیست درختی از عناصر موجود در آن نمایش داده خواهد شد.اکنون با انتخاب گره Roles از این منو قادرید users را به آن اضافه نمائید (برای انجام این کار دکمه سمت راست ماوس را بر روی Roles بفشارید).
سه نوع Roles به نامهای Normal , Junior , Hero برای COM+ تعریف شده است. هر کدام از این عناوین گروههای کاری متفاوتی را برای کاربران مشخص می سازند.
توجه داشته باشید که کنترل اصلی امنیت توسط سیستم عامل انجام و COM+ به عنوان جزئی از سیستم عامل مطرح است.
پیکر بندی Role_Based علاوه بر امنیت برنامه ها ، قابلیت پیاده سازی و برقراری امنیت در سطوح اجزاء سازنده ، Interface و حتی متدها را نیز داراست.
اولین گام در پیاده سازی امنیت در COM+ ارزیابی خود برنامه است.این کار با فراخوانی ابزار Component Services administration وانتخاب تب Security امکان پذیر است.
ابتدا گزینه Enforce Access Checks For This Application را فعال نمائید.همانطور که در شکل می بینید ، قسمتی از کادر نمایش داده شده مربوط به تعیین سطوح امنیتی است. یکی از این سطوح امنیتی فقط مربوط به فرآیندها (Process) و دیگری مربوط به عناصر سازنده و فرآیندها است
چنانکچه تمایل دارید که برنامه COM شما تنها برای گروهی از کاربران قابل استفاده باشد وامنیت را تنها در همین سطح برقرار سازید.

 

برنامه های Multitier
چنانچه یک برنامه کاربردی Multitier طراحی کرده اید و قصد دارید تکنیک های امنیتی COM+ را بر سیستم Multitier ترکیبی از سیستم های سرویس گیرنده ، برنامه های کاربردی سرویس دهنده و بانک اطلاعاتی است. از آنجا که این سیستم ها با حجم وسیعی از داده ها روبرو هستند ، لذا پیاده سازی روش های امنیتی در آنها به سادگی امکان پذیر نبوده وهمواره می بایست بهبود کارآیی سیستم را مدنظر قرار دهید.
مفهوم (JIT) Just_In_Time واژه ای برای توصیف کامپایلری است که برنامه های شبکه نظیر Java را بسیار ترجمه می کنند ، اما در COM+ به مفهوم ایجاد و تخریب یک برنامه بدون توجه به ساختار آن برنامه است. آنهایی که که تکنیک های برنامه نویسی شیء گرا بیشتر آشنایی دارند ، از این قابلیت COM+ به عنوان یک فرصت طلایی برای طراحی بهتر برنامه های کارربدی بهره خاص خواهند گرفت. متدهای SetComplete ,SetAbort از کلاس ObjectContext ومتد SetDeactivateOnReturn کلاس IContextState جهت این امر کاربرد دارند.

جزا سازنده صف بندی شده
دلفی ۳ با معرفی ابزار جدیدی تحت عنوان MIDAS هیجان خاصی را در دل برنامه نویسان برنگیخت. MIDAS مجموعه ای از اجزا سازنده بود که آماده سازی برنامه های کارربدی سرویس گیرنده/سرویس دهنده Multitier را آسان می نمود. به خاطر داشته باشید که منظور از برنامه کاربردی سرویس گیرنده ، برنامه ای است که کاربران با استفاده از یک رابط گرافیکی با آن برقرار می کنند.
برنامه کاربردی سرویس دهنده نیز برنامه ای است که خدماتی را برای برنامه کاربردی سرویس گیرنده فراهم می کنند.عنوان سرویس دهنده/سرویس گیرنده به معنی وجود یک رابط گرافیکی و یک سرویس دهنده بانک اطلاعاتی است.
بعد از آن ، نسخه های جدی دلفی با ابزارهای متنوع تری به بازار متنوع تری به بازار عرضه گردیدند.امروزه دلفی ۷ با پشتیبانی از تکنولوژی هایی نظیر COBRA,MTS, COM+ به عنوان یکی از قدرتمندترین ابزارهای برنامه نویسی مطرح ومورد استفاده جمع کثیری از خبرگان این امر می باشد.
چرا از اجزاء سازنده صف بندی شده استفاده می کنیم؟
قبل از این که نحوه پیاده سازی این اجزاء را شرح دهیم ، لازم است تا برخی از مزایای به کارگیری آنها را بر شماریم.
• بهبود بهره وری سیستم ها: در سیستما هایی که از اجزاء سازنده صف بندی شده استفاده نمی کنند ، پاسخدهی به درخواستها تنها همزمان با ارسال آنها انجام می شود. در این صورت چنانچه همزمان با یک درخواست ، درخواست های دیگری ارسال گردد ، هیچ پاسخی به آنها داده نشده، یک چرخه انتظار نامحدود بوجود می آید.اما دراجزاء سازنده صف بندی شده با قرار دادن درخواست ها در یک صف ، به محض اتمام یک درخواست ، درخواستهای بعد یوارد شده و به آنها پاسخ داده می شود
• مدل Briefcase :در اجزای سازنده صف بندی شده امکان فعالیت مجزای سرویس گیرنده می تواند به طور مستقل عملیات خود را انجام داده و پس از رفع عیب با سرویس دهنده ارتباط برقرار نماید.

• مدیریت بحران: چنانچه قصد دارید یک برنامه سرویس دهنده با تضمین امنیت بالا (همانند یک برنامه تجارتی) پیاده سازی کنید ، ویژگیهای منحصر به فرد اجزای سازنده صف بندی شده کمک شایانی به ارتقاء سطح امنیت برنامه تان می کند.
• زمان بندی در بارگذاری برنامه ها: مزیت دیگر اجزاء سازنده صف بندی شده استفاده از تکنیک زمان بندی در بارگذاری برنامه هاست.این بدین معنی است که یک مدیریت زمان بند برای پاسخ دهی به فرآیندها در اجزا سازنده صف بندی شده وجود دارد.
پیاده سازی یک شیء از نوع صف بندی شده ، TestImp.pas
Unit testImpl;

interface
uses
Windows,ComObj,ActiveX,Srv_TLB, StdVcl;

type
TQTest=class (TAutoObject,IQTest)
Protected
procedure SendText (const Value: WideString; Time: TDateTime)
end;
implementation
uses ComServ, SysUtils

procedure TQTest.SendText(const Value: WideString; Time: TDateTime)
const
SFileName= ‘c:\queue.txt’
SEntryFormat = Send time: %S ‘#۱۳#۱۰ Write time: %S #13#10 + ‘Message: %S ‘#۱۳#۱۰#۱۳#۱۰;
var
F :THandle;
WriteStr: string;
begin
F := CreateFile (SFileName, Generic Write, FILE_SHARE_READ, nil , OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if F = INVALID_HANDLE_VALUE then RaiseLastWin32Error;
try
FileSeek (F,0,2);//go to EOF
WriteStr :=Format(SEntryFormat, [DateTimeToStr (Time)DateTimeToStr(Now), Value]);
FileWrite(F , WriteStr[1],Length(WriteStr));
finally
CloseHandle(F);
end;
end;
initialization

TAutoObjectFactory.Create(ComServer, TQTest,Class_QTest,ciMultiInstance, tmApartment);
end.

روش Pooling
هدف کلی از طراحی Pooling مانند JIT ، افزایش بهره وری سیستم و ارتقاء کارایی برنامه هاست. در این روش ، اشیایی که دارای ویژگیهای تقریباً مشابه می باشند ، در یک منبع نگهداری می شوند.وبروست که در زیر به آنها اشاره می کنیم:
• تمامی اشیا از نوع Stateless باشند.
• اشیاء هیچگونه وابستگی با Tread ها نداشته باشند.
• تمامی اشیاء حالت پیوسته داشته باشند.
• عملیات مدیریت منابع و یا ثبت ومقدار دهی اشیاء به صورت خودکار انجام نگیرد.
• قابلیت پیاده سازی کلاس IObjectControl وجود داشته باشد.

رویدادها
یک رویداد ، عملی است که مسبب آن یک کاربر است ویک برنامه ممکن است به آن پاسخ دهد.به عنوان مثال فشرده شده کلیدها ، برگزیدن دکمه ها با ماوس ویا حرکت دادن ماوس. آنچه که در محیط دلفی برای مدیریت رویدادهای یک برنامه کارربدی اتفاق می افتد ، تفاوت آشکاری با مدیریت رویدادها در برنامه ها COM+ دارد. COM+ ازشیوه جدیدی برای مدیریت رویدادها استفاده می کند.
بحث خود را با بررسی دقیق تر ارتباط بین سیستم های سرویس دهنده و سرویس دهنده و سرویس گیرنده ادامه می دهیم. یک سیستم سرویس گیرنده ، درخواستی را برای استفاده از یک متد به سیستم سرویس دهنده ارسال می دارد. اگر همه چیز به درستی انجام پذیرد ، دستگاه سرویس دهنده به تقاضای ارسالی پاسخ گفته و قاعدتاً مقداری داده برای آن ارسال می کند. به جرات می توان گفت که ۹۰% سیستم های سرویس دهنده/سرویس گیرنده مبتنی بر COM به همین منوال کار می کنند.
پیاده سازی این کار بسیار ساده بوده ولی بدون شک مشکلاتی را به دنبال دارد. با استفاده از این روش همواره چرخه ای ا ز رویدادها د رسیستم وجود خواهد داشت که ممکن است تا مدت زمانی هیچ پاسخی به آنها داده نشود. این مسئله باعث بروز ترافیک در شبکه شده و کارایی سیستم را تا حد قابل ملاحظه ای کاهش می دهد.
اما COM راه حل ساخت یافته و موثری برای این مشکل ارائه کرده است .در این روش با کنترل انتقال اطلاعات بین سرویس دهنده وسرویس گیرنده از بروز ترافیک کاری جلوگیری به عمل می آید.این تکنیک TCE نام دارد. در این حالت یک ارتباط دو طرفه بین سیستم سرویس گیرنده و سرویس دهنده برقرار می شود.
توجه داشته باشید که سیستم های سرویس گیرنده می بایست هم زمان با هم و تحت شرایط مساوی شروع به کار نمایند ودر غیر این صورت امکان پیاده سازی TCE وجود نخواهد داشت.
در COM+ این روش کمی تغییر کرده است. COM+ از تکنیک دیگری به نام LCE برای مدیریت رویدادها استفاده می کند. در این روش ، سیستم سرویس دهنده به عنوان توزیع کننده رویدادها وسیستم سرویس گیرنده به عنوان متقاضی رویدادها معرفی می شوند.

 

ایجاد یک Event Class Server
ActiveX Library Wizard ابزاری است که از آن برای ایجاد یک Event Class Server استفاده می شود.
ابتدا با فراخوانی ActiveX Library Wizard ، یک COM Server DLL جدید ایجاد کنید. برای تولید Interface و کلاس های این برنامه از Automation Object Wizard استفاده نمائید

. شیء ساخته شده را EventObj بنامید.سپس متدی تحت عنوان MyEvent را در قسمت Interface مربوط به IEventObj وارد نمائید.
ثبت وپیکربندی Event Class Server
دوباره به ابزار Component Services administration نیاز پیدا کردیم. اکنون با این ابزار به خوبی آشنایی دارید ، چرا که تقریباً در طراحی تمام برنامه های COM+ از آن استفاده کرده اید.
unit pubMain;
interface