Introduction to COM+
Gopalan Suresh Raj

Writing distributed enterprise applications has always been a significant challenge, but this once Herculean task has been somewhat ameliorated with the advancement of component-based programming in general. For example, by increasing program modularity, you can now compose a behemoth application from multiple functionally independent modules. This not only enables you to assemble complex systems using an assembly-line approach, but also greatly increases the reusability of the modules themselves.

Although using components enhances the modularity and natural distribution of applications in general, they still present some interesting challenges. For example, in days of old, when a monolithic program failed, it was simply restarted as a unit. But, today, with a modular system, when a failure of any one component occurs, the challenge is to ensure faults are isolated to limit their propagation and that it does not corrupt others. This is more complicated than it sounds with distributed applications, however, as the components can reside anywhere on the network. In addition, because enterprises are essentially heterogeneous environments, the presence of multiple operating systems and platforms that host the different components adds a new level of complexity.

Clearly, a technology like COM+, with its promise of language independance can significantly mitigate many of the problems associated with enterprise distributed systems development. These articles are devoted to understanding the implications and architecture of an enabling enterprise component technology COM+ and presents examples of how to use this technology to implement real-life, distributed solutions.

What is COM+

COM is a specification and a set of services that allows you to create modular, object-oriented, customizable and upgradeable, distributed applications using a number of programming languages.

COM is mainly used for a couple of things:

1. As a glue that helps compose entire applications by tying together multiple individual components.
2. As a standard mechanism for inter-process or inter-host communication.

COM+ is the basic COM and a set of additional services like Transactions, Queued Components (QC), Security, Loosely Coupled Events (LCE), Just In Time Activation (JITA), Basic Interception Services, Object Pooling, Deployment and Administration.

COM+ Programming is based on the following assumptions:

1. COM+ Programming is Interface Programming. This means that clients program on the basis of Interfaces not Classes.
2. Code is not statically linked but is loaded at runtime as and when required.
3. Component implementors specify their requirements declaratively and the framework ensures that these requirements are met as in an MTS or a COM+ system.

Why Use COM+?

In applications like Microsoft’s Visual Basic, a property window exists, which can be used as a simple, code-free means of programming various objects that are part of an application. Similarly, Sybase’s PowerBuilder, has a data window, which allows a code-free means of programming data access to database applications. COM+ brings a similar concept to building enterprise applications. Users can now focus on developing business logic with ease, while being shielded from the nitty-gritty aspects of enterprise application development through the use of COM+ components.

In an n-tier architecture, it does not matter where the business logic is, though in a typical 3-tier architecture, the business logic is normally in the middle-tier by convention. With COM+, however, you can now move your business logic wherever you want, while adding additional tiers if necessary. The COM+ components containing the business logic are platform-independent and can be moved to a different, more scalable platform should the need arise. If you are hosting a mission-critical application and need to move your COM+ components from one platform to the other, you can do it without any change in the business-logic code. A major highlight of the COM+ specification is the support for ready-made components. This enables you to "plug and work" with off-the-shelf components without having to develop or test them or to have any knowledge of their inner workings.

The COM+ Component Development and Deployment Lifecycle

In any enterprise development scenario, numerous complex programming issues are usually involved, which require the involvement of multiple domain experts. Without addressing all these issues and cohesive team-oriented approaches, it is impossible to create successful enterprise applications. To ease enterprise development, responsibilities as to who is responsible for delivering what in an enterprise application that uses COM+ has to be determined, as shown in Figure. Note, this does not necessarily preclude the same person from carrying out more than one function.

Figure: The COM+ Component Development Lifecycle

The COM+ Platform Provider

The COM+ Platform provider provides an organized application framework in which to run the COM+ containers. The vendor i.e. Microsoft, implements and provides access to a compatible naming service (i.e., ADSI) and a transaction service (i.e., MSDTC). Note, the COM+ Platform vendor might also act as the COM+ Surrogate Process and Interception Services vendor.

COM+ Surrogate Process Provider

The COM+ Surrogate Process and Interception Services provider provides software to install a COM+ component with its supporting classes on a COM+ Platform. This vendor is also responsible for providing run-time classes that provide the required services to the COM+ instances. It also has to make available a suitable interception service for the COM+ component.

COM+ Component Developer

The COM+ Component developer should have knowledge not only of the COM specification, but also business needs because she or he is responsible for coding the business logic into components. Basically, the developer implements COM+ components that focus on the business logic using the classes and interfaces defined in the COM specification.

While the COM+ container is responsible for handling all the transaction controls on behalf of the component instance, the COM+ developer must understand how transactions work. Consequently, the developer is responsible for stipulating the transactional needs of the various methods in the COM+ component to the COM+ Component deployer.

COM+ Component Deployer

Although the COM+ Component deployer may not be a COM developer or understand the business rules a component implements, he or she should understand the Server application framework (Windows 2000/NT/9x) in which the component runs. Additionally, the deployer should have an in-depth understanding of the characteristics of the run-time server environment, such as database types, its location, and so forth. The deployer is responsible for taking the COM+ component and all its supporting classes and installing them correctly on the COM+ server platform.

The deployer gets the component requirements from the COM+ component developer, such as transactional needs, names, and descriptions of the required environment properties, and so forth. The deployer is responsible for making these properties, along with their correct run-time values, available to the COM+ component at runtime. The deployer and the developer must communicate clearly to ensure the component is deployed with the correct deployment attributes.

Application Developer

The application developer writes the client applications using pre-built COM+ components. Here, a client is defined generally and can be an application, or even an ActiveX control.

The application developer can thus plug-in ready-made COM+ components without having to develop or test them, or without having any internal knowledge of how to integrate them. This frees the application developer to concentrate on high-level functionality, such as data presentation, without having to worry about how such data is actually obtained.

Having said that, how do we ensure that the Application Developer knows how to use a COM+ component if it was not developed by him. Therefore, we need a mechanism to inform the user of our COM+ component on how to use it which will be the topic of our discussion in the next section "Interface, Implementation and COM+ Notation".

click here to go to
My Basic COM+ Tutorial...
click here to go to
My Advanced COM+/DNA Tutorial HomePage...


About the Author...
Gopalan Suresh Raj is a Software Architect, Developer and an active Author. He is contributing author to a couple of books "Enterprise Java Computing-Applications and Architecture" and "The Awesome Power of JavaBeans". His expertise spans enterprise component architectures and distributed object computing. Visit him at his Web Cornucopia site ( or mail him at


Go to the Component Engineering Cornucopia page

This site was developed and is maintained by Gopalan Suresh Raj

This page has been visited times since March 13,1999.

Last Updated : Mar 14,'99

If you have any questions, comments, or problems regarding this site, please write to me I would love to hear from you.

Copyright (c) 1997-2000, Gopalan Suresh Raj - All rights reserved. Terms of use.

All products and companies mentioned at this site are trademarks of their respective owners.