Figure 2 COM+ Catalog Object Hierarchy
Figure 4 Event Spy (Partial Listing)
/*
Import the DLL containing COM+ Catalog Type Library
*/
#import "d:\\winnt\\system32\\com\\comadmin.dll"
/*
Global variables for catalog object and root collection.
*/
COMAdmin::ICOMAdminCatalogPtr g_Catalog ;
COMAdmin::ICatalogCollectionPtr g_CatalogRoot ;
BOOL CRTEventSpyApp::InitInstance()
{
<initialization omitted>
/*
Create the COM+ catalog and open the root collection.
*/
g_Catalog.CreateInstance (
L"ComAdmin.ComAdminCatalog.1") ;
g_CatalogRoot = g_Catalog->GetCollection (
_bstr_t("Root")) ;
return TRUE;
}
BOOL CChooseEventClassDlg::OnInitDialog()
{
CDialog::OnInitDialog();
/*
Get collection of applications from root.
Populate collection.
Iterate through applications.
*/
COMAdmin::ICatalogCollectionPtr Apps ;
Apps = g_CatalogRoot->GetCollection (
_bstr_t("Applications"), _variant_t((long)0) ) ;
Apps->Populate ( ) ;
int i ;
for (i = 0 ; i < Apps->Count ; i++)
{
/*
From each application, get collection of components
Populate collection.
Iterate through components.
*/
COMAdmin::ICatalogObjectPtr app ;
app = Apps->GetItem (i) ;
COMAdmin::ICatalogCollectionPtr Components ;
Components = Apps->GetCollection (
_bstr_t("Components"), app->GetKey( )) ;
Components->Populate ( ) ;
int j ;
for (j = 0 ; j < Components->Count ; j++)
{
COMAdmin::ICatalogObjectPtr comp ;
comp = Components->GetItem (j) ;
/*
If component represents an event class, look at its interfaces.
*/
if (comp->GetValue (
_bstr_t("IsEventClass")))
{
<code omitted for simplicity>
}
}
}
}
Figure 10 Object State Location
Location of State |
Lifetime of State |
Access Speed |
Ease of Programming |
Client |
Varies with client |
Varies with client |
Harder for client, easier for object |
Object's member variables |
Same as object, which usually means duration of a transaction |
Fastest |
Easiest |
Resource dispenser (shared property manager or pooled object) |
Varies from transaction lifetime to application lifetime |
Medium |
OK |
Resource manager |
Persistent |
Slowest |
Hardest |
Figure 12 Authentication Levels in COM+
Level |
Authentication |
When |
Protects Against |
Performance Cost |
None |
Nothing |
Never |
Nothing |
None |
Connect |
Check user ID |
First connection of client and server |
Unauthorized user |
Low |
Call |
Check user ID and encrypt sequence number |
Every method call |
Unauthorized user, recording/playback of network traffic |
Low |
Packet |
Check user ID and encrypt sequence number |
Every packet of every method call |
Unauthorized user, recording/playback of network traffic |
Low |
Packet Integrity |
Packet and encrypted checksum of data |
Every packet of every method call |
Unauthorized user, recording/playback of network traffic, and tampering |
Medium |
Packet Privacy |
Packet integrity and all data encrypted |
Every packet of every method call |
Unauthorized user, recording/playback of network traffic, tampering, and eavesdropping |
Highest |