Articles   Members Online: 3
-Article/Tip Search
-News Group Search over 21 Million news group articles.
-Delphi/Pascal
-CBuilder/C++
-C#Builder/C#
-JBuilder/Java
-Kylix
Member Area
-Home
-Account Center
-Top 10 NEW!!
-Submit Article/Tip
-Forums Upgraded!!
-My Articles
-Edit Information
-Login/Logout
-Become a Member
-Why sign up!
-Newsletter
-Chat Online!
-Indexes NEW!!
Employment
-Build your resume
-Find a job
-Post a job
-Resume Search
Contacts
-Contacts
-Feedbacks
-Link to us
-Privacy/Disclaimer
Embarcadero
Visit Embarcadero
Embarcadero Community
JEDI
Links
Object Pooling in COM+ Turn on/off line numbers in source code. Switch to Orginial background IDE or DSP color Comment or reply to this aritlce/tip for discussion. Bookmark this article to my favorite article(s). Print this article
06-Sep-03
Category
COM+
Language
Delphi 3.x
Views
129
User Rating
No Votes
# Votes
0
Replies
0
Publisher:
DSP, Administrator
Reference URL:
DKB
			Author: S S B Magesh Puvananthiran

How is Object Pooling Implemented in COM+?

Answer:

What is COM? 

It’s a technology that defines a standard way for a client module and server module 
to communicate through a set of interfaces. The module could be an application or a 
DLL. Also the client and server can be in the same box or in different boxes 

What is COM+? 

It’s just an extended version of COM coming with Windows 2000. Microsoft has 
redefined and added some concepts/features with COM+. 

What is Object Pooling and Why do we need Object Pooling? 

To better illustrate the need for Object Pooling, let us consider a sample web 
application using COM objects. The basic functions of such an application using a 
COM object would be the following: 

Creates a COM object 
Uses the COM object by calling various methods/properties. 
Destroys the COM object 

Let us assume that we have an ASP page in that web application and got some 30,000 
requests for a day/at peak times. Let us suppose that the ASP page creates three 
COM objects in that page. So as per the calculation, there would be 90,000 objects 
created and destroyed. No need to say, it will definitely consume a lot of 
resources and an overhead. What could be done to avoid this? Recycle. Yes. We can 
recycle the objects used at one transaction in the next transaction. 

Here comes the Object Pool. It’s a place where the application return the COM 
objects after using it instead of destroying it. So every time the application 
needs a COM object, it needs to perform the following steps: 

Checks the object pool if one exists. If exists, then use it or creates a new COM 
object. 
Use the COM object by calling its methods/properties. 
Return it to the same object pool after using it. 

This looks like a good concept in reducing/conserving the usage of resources in a 
web application. But the next question comes to our mind is that can we implement 
all of those in an web application? We can; but we need to think of the following 
things in mind. 

Who is responsible for managing the Object Pool? 
When that Object Pool will be created/destroyed? 
When will the objects be created/destroyed in that pool? 
When those objects will be destroyed in that pool? 
How will the web application know to use the objects in the pool? Does the 
application need to     write a separate code to call an object in the object pool? 
How can we manage multiple clients accessing an object in the object pool? 

But implementing these in every web application is really a difficult task and it’s 
an overhead on the programmer’s side; Also it’s error prone. 

Here comes the COM+

COM+ helps us in doing all those processes without changing a single line of code 
in our COM object. That’s the beauty of COM+. A COM+ application is typically an 
MTS application in the earlier Windows versions(NT,95); but in Windows 2000, the 
name has been changed to COM+. That’s it. 

COM+ provides us with a lot of services. One of its services is this Object 
Pooling. All we have to do is to set the component properties in Component Services 
Editor to use Object Pooling. The rest will be taken care of by the COM+ runtime. 

But in COM+ 1.0, there are some restrictions on using its services by COM objects 
developed by various languages. This is because of the incompatibility between the 
COM+ and the languages. 

As of now, COM objects developed using Visual Basic cannot use this Object Pooling 
service provided by the COM+. Is that right? Any ideas? What about COM objects 
developed using Delphi? Is Delphi 5.0/6.0 COM+ compatible? Can Delphi 5.0/6.0 use 
all of the services provided by COM+? Because, I didn’t get a chance to try these 
out. Discussions are welcome!!! 

When COM Objects are destroyed? 

As every COM programmer knows, COM implements some basic methods. 

QueryInterface 
AddRef 
Release 

Out of these methods, Release is responsible for destroying the object. After the 
COM Object is created, every time a method of the COM Object is called, it’ll call 
AddRef method to increase the reference count for that component. And after the 
method call has been over, the reference count will be reduced by one and once it 
reaches zero, the COM object will be destroyed. 

Reference count is a number that indicates the number of active clients using the 
COM object. 

How Object Pooling is implemented in COM+

This is implemented by intercepting the calls to the Release method of IUnknown. As 
you know already, every COM object maintains a reference count and once it reaches 
zero, then that COM object is destroyed. But this is not good if we would like to 
reuse/recycle the object. In turn, it's not good to implement the Object Pooling 
service. So the following are implemented by COM+: 

COM+ maintains an additional reference count for COM objects to be pooled when the 
object is created. 
COM+ intercepts the calls to Release method for pooled COM objects. 

The above two things are implemented by a technique called Interception. The 
interception is implemented by a light-weight proxy. It's also called an 
Interceptor. It contains a small amount of code that acts between the client and 
the real object. This code is invoked for components which are marked as pooled 
components. So by this technique, inteception, COM+ runtime implements the Object 
Pooling. 

All these are happening behind the scenes by COM+ runtime. All we have to do to 
make use of this Object Pooling service is to make sure that we set the right 
2option in the Component Services Editor. Component Services is available in Win 
2000. 

This article is just a beginning to COM+ and I would like to explore more on this COM+ later. If you have any views,comments or have any experience with that, please feel free to share. 

			
Vote: How useful do you find this Article/Tip?
Bad Excellent
1 2 3 4 5 6 7 8 9 10

 

Advertisement
Share this page
Advertisement
Download from Google

Copyright © Mendozi Enterprises LLC