Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans...

70
Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Transcript of Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans...

Page 1: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Presentation Outline of Commercial Systems

• Bahman

  Part A: Java Beans

    Part B: Enterprise Java Beans

• John

  Corba

    OLE

ActiveX

• Andrew

  COM

    DCOM    COM+

Page 2: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Java Beans & Enterprise Java Beans

Component-Based Design

Bahman Kalali

Computer Systems Group

[email protected]

Spring 2002

Page 3: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Outline (Part A)

Introduction to JavaBeans A Bean's Public Interface Bean Properties Bean Events Bean Methods Reflection API Bean Distribution Summary

Page 4: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Java Bean is a reusable platform-neutral software component that can be visually manipulated in a visual application builder tool.

This definition has two distinct parts:

A bean is a software component. A bean can be visually manipulated in a tool.

Introduction

Page 5: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

                                                     

     

Construction from Components

Page 6: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Properties Methods Events

A Bean's Public Interface

Page 7: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

At the source code level, a bean's property is nothing more than a private attribute of a class that is supported by public getter and/or setter

methods.

Type of Properties Simple

Boolean

Index

Bound

Constrained

Bean’s Properties

Page 8: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Sample Account Property Balance

Page 9: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Naming convention to expose a simple property:

     public void setXxx (<type> arg)     public <type> getXxx()

Example for Account's balance property:

     public void setBalance( int amount )     public int getBalance()

By applying a naming pattern to the set/get Balance methods above, the visual builder tool will expose a read/write "balance" property that has the type int.

Exposing Simple Properties

Page 10: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Naming convention to expose a boolean property:

     public void setXxx (boolean arg)     public boolean isXxx()

Example for overdrawn property:

     public void setOverdrawn( boolean overdrawn )     public boolean isOverdrawn()

Boolean properties may be exposed by using the isXxx naming convention.

Exposing Boolean Properties

Page 11: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Naming convention to expose an indexed property:

     public void setXxx ( <type> [] arg)     public <type>[] getXxx()     public void setXxx (int index, <type> arg)     public <type> getXxx (int index)

Example for an Account owner property:

     public void setOwner(String[] owners)     public String getOwner()     public void setOwner(int index, String owner)     public String getOwner(int index)

Exposing Indexed Properties

Page 12: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

// Account Class - non visual Java Bean

public class Account extends Object { int balance = 0; public Account() { // constructor } public void setBalance ( int newBalance ) { balance = newBalance; } public int getBalance() { return balance; } public void deposit ( int pennies ) { setBalance ( getBalance() + pennies ); } public void withdraw ( int pennies ) { setBalance ( getBalance() - pennies ); } }

// end of class Account

Account Bean with a balance Property

Page 13: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

                                                      

    

Bound Properties

• A Bean properties changes, another Bean may want to be notified of the change and react to the change.

• Whenever a bound properties changes, notification of change is sent to interested listeners.

• It is up to the source Bean to keep track of listeners.

Page 14: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Account Bean with a Balance Property

• PropertyChangeSupport object constructs a PropertyChangeEvent object and passes it to the Listener chain.

• Listener objects will interrogate the property that is changing and process accordingly.

Page 15: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Constrained Properties

1) setBalance called2) Account notifies the VetoableChangeListeners of pending change request3) Listeners can optionally throw exception4) balance is updated if no exception is thrown

Page 16: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Bean Custom Events

• Bound and constrained properties fire events when properties are changed.

• Java Beans can also fire other kind of events (custom events).

• The application developer can wire up to these events without writing code.

Page 17: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Naming conventions are used

public void addXxxListener ( XxxListener listener)public void removeXxxListener ( XxxListener listener)

Example for exposing an OverdrawEvent

public void addOverdrawListener ( OverdrawListener listener)public void removeOverdrawListener ( OverdrawListener listener)

In addition to these methods, the source object also provides:

1) OverdrawEvent class2) OverdrawListener interface3) code to fire the event4) code to manage the listener chain

Exposing Bean Custom Events

Page 18: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Bean Methods

• To expose a method in the Bean’s public interface, simply make the method public.

Page 19: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

How does a visual Builder tool determines a Bean’s public interface?

• At development time the visual builder tool is able to interrogate beans, and figure out what's in there.

• How does it do that?    The Java Reflection API

Page 20: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

In Java 1.1 and higher, anyone can inspect a class using the Reflection API

   Account account = new Account();   Class classObject = account.getClass();   Method [] methodsArray = classObject.getDeclaredMethods();

methodsArray now contains an array of Method objects for the class Account

A method objects contain information about a method's:

Method name Return type Argument list Access type

Reflection API

Page 21: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Beans can be distributed in a JAR file (basically a ZIP file).

The JAR utility that comes with the JDK can be used to create JAR files. JAR files can contain any type of file, not just Java bytecodes, image,sound and text.

A manifest file describes the contents of the JAR.

Bean Distribution

Page 22: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Beans are software components are usable by programming tools are packaged in JAR files use a standard naming convention have a public interface

A Bean's Public Interface composed of: Properties

Simple Indexed Boolean Bound Constrained

Events Signalled by changing properties Signalled for custom state change

Methods Default is any public method

Summary

Page 23: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Introduction to Enterprise Java Beans

Three-Tiered Architecture

JBoss Application Server

Enterprise Java Beans

Accessing a Business Method

Case Study: Distributed Shoe Web Application

Demonstration of application lifecycle

Summary

23

Outline (Part B)

Page 24: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

EJB specification defines an architecture for the development and deployment of transactional, distributed object applications-based, server-side software components.

Case Study Shoe Retailer Company

24

ShoeCollection

Shoe

brandbranchnameidquantities

25 Running Montreal Nike 50

Introduction

Page 25: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Client Layer

Presentation Layer

Business Logic Layer

Data Layer

Client Layer

PresentationLayer

Business LogicLayer

Data Layer

Logical Layers Typical Web Implementation

Browser

Database

Application Server

Web Server

Lower Tier

Upper Tier

Middle Tier

25

Three-Tiered Architecture

EJB

Java Beans

Page 26: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

JBoss is an application server written in Java that can host EJB component.

JBoss provides a container.

An EJB container implicitly manages resources for EJB: Threads

Socket

Database connections

Remote accessibility

Mutliclient support

Persistence management26

JBoss Application Server

Page 27: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Bean Types Session Beans => models business processes Entity Beans => models business data

Application Server

EJB Container

Session Bean

Entity Bean

JSP/Java Beans Servlet

Browser

DB

Web ServerPresentation

Layer

Business LogicLayer

Enterprise Java Beans

Page 28: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

EJB Home Object

EJB Object Bean Class

Home Interface

Remote Interface

Client

EJB Home Object

EJB Object

EJB Container

JBoss Application Server

Client

Enterprise Java Beans (contd.)

Enterprise Bean Components composed of:

(1) Bean Class ( i.e. ShoeBean.java) (5) Home Interface ( i.e. ShoeHome.java) (3) Remote Interface ( i.e. Shoe.java) (2) EJB Object (4) EJB Home Object( Responsibility: Create, Find, Remove EJB object) (6) Deployment Descriptor( i.e ejb-jar.xml)

Page 29: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Retrieval of the Home object reference and generation of remote EJB object reference.

EJB Object

Remote Interface

Home Interface

EJB ContainerClient Code

Enterprise Bean

JNDI

Home Object1: Retrieve

reference

2: Return Home Object reference

3: Request newEJB object

Home Object

5: Return EJB object reference

4: Create EJB object

Directory Service

29

Accessing a Business Method

Page 30: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Handling a client request to a business method.

EJB Object

Remote Interface

Home Interface

EJB Container

EJB ObjectEJB Object

Home Object

Client Code

1:Call a Method

4: Return value to client

Enterprise Bean

2: Acquire a Bean, and delegate the method to the Bean

3:Method Returns

30

Accessing a Business Method (cont’d.)

Page 31: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

PresentationLayer

Business LogicLayer

Client Layer

Data Layer

JspShoeBrowseJava Bean

JSP Pages

ShoeCollectionSession Bean

ShoeEntity Bean

Web Browser

Tomcat Web Server

JBoss Application Server

<<HTTP>>

<<RMI>>

EJB Container

Servlet Container

Hypersonic database

31

Shoe Distributed Web Application

Page 32: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Build Package

Deploy Run

cs854-WebServer

WEB-INFclasses

libJspShoeBrowse.class

browse.jsp

prev.jsp

mext.jsp

search.jsp

header.html

footer.html

shoe.jarweb.xml

shoe.war

cs854-ApplicationServershoe

Shoe.classShoeHOME.classShoeBean.class

ShoeCollection.classShoeCollectionHome.classShoeCollectionBean.class

shoecollection

utilsShoeExistsException.class

jboss.xmlejb-jar.xml

META-INF

shoe.jar

32

Demonstration of application lifecycle

Page 33: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

33

JavaBeans Enterprise JavaBeans

JavaBeans may be visible or nonvisible at runtime.

An EJB is a non-visual, remote object.

JavaBeans are intended to be local to a single process and are primarily intended to run on the client side.

EJBs are remotely executable components or business objects that can be deployed only on the server.

JavaBeans is a component technology to create generic Java components that can be composed together into applets and applications.

Even though EJB is a component technology, it neither builds upon nor extends the original JavaBean specification.

JavaBeans are not typed. EJBs are of two types—session beans and entity beans.

No explicit support exists for transactions in JavaBeans.

EJBs may be transactional and the EJB Servers provide transactional support.

Summary

Page 34: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

CORBA Key Concepts

• Com+mon Object Request Broker Architecture

• Location Transparency

• Objects

• Portable

• Standard

Page 35: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Simplified Architecture

• Interface Definition Language(IDL)

• Application Programming Interface(API)

• Object Request Broker(ORB)

Page 36: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

CORBA Architecture

Dyn.Inter-face

IDLStub

ORBInterface

IDLSkeleton

ObjectAdapter

Object ImplementationClient

Object Services: naming, events, life cycle, persistence, transactions, concurrency, relationships, externalization, object licensing, properties, object query.

ORB

OS KernelOS Kernel OS KernelOS KernelNetwork

Page 37: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

IDL Interface for Quoter interface Stock { double price ();

readonly attribute string symbol; readonly attribute string full_name; };

interface Stock_Factory { Stock get_stock (in string stock_symbol) raises (Invalid_Stock_Symbol); };

Page 38: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

In client.cpp:

int main (int argc, char* argv[]){ try { // First initialize the ORB, that will remove some arguments... CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "" /* the ORB name, it can be anything! */); // Get Reference to desired object // call methods to access object orb->destroy (); } catch (CORBA::Exception &ex) { std::cerr << "CORBA exception raised!" << std::endl; } return 0;}

Client - Manage ORB in Stock Quoter

Client.cpp

Page 39: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Client - Get Quoter Object R

In client.cpp:

#include "QuoterC.h”

CORBA::Object_var factory_object = orb->string_to_object(argv[1]);

Quoter::Stock_Factory_var factory = Quoter::Stock_Factory::_narrow (factory_object.in ());

for (int i = 2; i != argc; ++i)

{

try {

// Get the stock object

Quoter::Stock_var stock = factory->get_stock (argv[i]);

Client.cpp

Page 40: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

ef

Page 41: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Implement Get_Stock Method

In stock_factory_i.cpp

// Return Object ReferenceQuoter::Stock_ptr Quoter_Stock_Factory_i::get_stock (const char *symbol)

throw (Quoter::Invalid_Stock_Symbol) { if (strcmp (symbol, "RHAT") == 0)

{ return this->rhat_._this(); } else if (strcmp (symbol, "MSFT") == 0)

{ return this->msft_._this (); }

throw Quoter::Invalid_Stock_Symbol (); }

Stock_Factory_i.cpp

Page 42: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Implementing Stock InterfaceIn stock_i.cpp

// Access object class Quoter_Stock_i : public POA_Quoter::Stock {

public: Quoter_Stock_i (const char *symbol, const char*full_name,

CORBA::Double price);

private: std::string symbol_; std::string full_name_; CORBA::Double price_;

};

Stock_i.cpp

Page 43: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Stock Operations and Attributes

In stock_i.cpp:

// Access objectclass Quoter_Stock_i : public POA_Quoter::Stock { public: // some details omitted char *symbol () throw (CORBA::SystemException); char *full_name () throw (CORBA::SystemException);

CORBA::Double price () throw (CORBA::SystemException); }; // In the .cpp file: char * Quoter_Stock_i::symbol () throw (CORBA::SystemException) { return CORBA::string_dup (this->symbol_.c_str

()); }

Stock_i.cpp

Page 44: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Implement Server

int main (int argc, char* argv[]) { try { // First initialize the ORB, that will remove some arguments…

CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "" /* the ORB name, it can be anything! */);

CORBA::Object_var poa_object = orb->resolve_initial_references ("RootPOA");

PortableServer::POA_var poa = PortableServer::POA::_narrow (poa_object.in ());

PortableServer::POAManager_var poa_manager = poa->the_POAManager ();

poa_manager->activate (); // The application code goes here!

// Destroy the POA, waiting until the destruction terminates poa->destroy (1, 1); orb->destroy (); } catch (CORBA::Exception &ex) { std::cerr << "CORBA exception raised!" <<

std::endl; } return 0; }

Server.cpp

Page 45: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

•CORBA provides a communication infrastructure for a heterogeneous, distributed collection of collaborating objects•Analogous to “hardware bus”

Software Bus

Page 46: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+
Page 47: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

OLE Overview

• Object Linking and Embedding

• Microsoft 's technology for supporting compound documents

• A way for Windows to create documents containing objects from other programs.

• Components can be re-used by many applications (referred to as component containers).

Page 48: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

OLE Example

• Pie chart generated by Excel embedded in a word document being displayed in a PowerPoint presentation..

Page 49: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

OLE Technology

• A set of APIs to create and display a (compound) document

• The Component Object Model (COM) now takes in OLE as part of a larger concept. It has become a set of standard COM interfaces

• Embedded documents retain all their original properties. If the user decides to edit the embedded data, Windows activates the originating application and loads the embedded document.

Page 50: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

OLE Extensions

• Automation is an OLE technology, which enables third party applications to remotely control Office applications.

• e.g. Puppeteer invokes Automation interfaces to modify application behavior when executing on bandwidth limited platforms.

• using Automation interfaces, Puppeteer can act as a buffer for a large PowerPoint presentation, loading slides while the user presents.

Page 51: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

ActiveX - Overview

• A loosely-defined set of technologies developed by Microsoft, ActiveX is an outgrowth of two other Microsoft technologies called OLE (Object Linking and Embedding) and COM (Component Object Model). ActiveX applies to a whole set of COM-based technologies.

• ActiveX control is Microsoft 's answer to the Java technology from . An ActiveX control is roughly equivalent to a applet, but is known as an ActiveX control.

• Writing a program to run in the ActiveX environment creates a self-sufficient program that can be run anywhere in your ActiveX network

• This component is known as an ActiveX control, and is often used to attach a program to a web page.

Page 52: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

ActiveX - Implementation

• An ActiveX control can be created using one of several languages or development tools, including C++ and Visual Basic, or PowerBuilder, or with scripting tools such as VBScript.

• Currently, ActiveX controls run in 95/98/NT/2000 and in . Microsoft plans to support ActiveX controls for UNIX.

• Similar (but different) security issues as applets

Page 53: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Example

Sub

()Resp = Window.Confirm "Use the MS Agent?"If Resp ThenWindow.Alert "Loading ActiveX Controls."Document.WriteLn "<OBJECT ID='Agent' width=0 height=0"Document.WriteLn "CLASSID='CLSID:F5BE8BD2-7DE6-11D0-91FE-00C04FD701A5'"Document.WriteLn " CODEBASE='http://activex.microsoft.com/" & _    "controls/agent/msagent.exe#VERSION=1,5,1,0'>"Document.WriteLn "<" & Chr(47) & "OBJECT>"Document.WriteLn "<OBJECT ID='TruVoice' width=0 height=0"Document.WriteLn " CLASSID='CLSID:B8F2846E-CE36-11D0-AC83-00C04FD97575'"Document.WriteLn " CODEBASE='http://activex.microsoft.com/" & _    "controls/agent/cgram.exe#VERSION=1,5,0,0'>"Document.WriteLn "<" & Chr(47) & "OBJECT>"End IfEnd Sub

Page 54: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Commercial Products : Microsoft COM/DCOM/COM+

Andrew Trevors

Software Architecture Group

[email protected]

Page 55: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Overview

• What is COM / DCOM / COM+?• COM

– Client/Server Model

– Objects & Interfaces

– COM Servers

– COM Clients

– COM Library

– COM Example

• DCOM• COM+

Page 56: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

What is COM / DCOM / COM+?

• COM (Component Object Model) – software architecture which allows components from multiple

vendors to be combined in a variety of applications

– binary standard for component interoperability

– platform and language independent, distributed, object-oriented.

– is the foundation technology for Microsoft's OLE and ActiveX® technologies, as well as others.

• DCOM (Distributed Component Object Model)– enables software components to communicate directly over a

network in a reliable, secure, and efficient manner.

– is designed for use across multiple network transports.

– based on the OSF's DCE-RPC specification.

Page 57: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

What is COM / DCOM / COM+?

• COM+ (Component Services)– upgrade of the original COM

– Adds

• Transaction processing from Microsoft Transaction Manager

• Queued components

• Object pooling

• Publish-subscribe event service

• much, much, more.

Page 58: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Client/Server Model

ClientApplication

COM

Server

Object

(1) “CreateObject” (2) Locate

implementation

(3) Get objectinterface pointer,return to Client

(4) Call interfacemembers

Page 59: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

Objects & Interfaces

• Interface– a set of member functions that a client can call to access that object

implementation.– all interfaces start with an ‘I”, followed by a descriptive label

identifying what services they provide.– all interfaces have a IID (interface identifier) which uniquely

identifies them.

• Object– an implementation of one or more interfaces– If object wishes to allow COM to locate and launch its

implementation then it needs to have a CLSID (class identifier)– at very least, objects must implement IUnknown interface

• QueryInterface(), AddRef(), Release()

Page 60: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Servers

• Servers come in three varieties:– In-process

• Server loaded into the clients process space

• loaded as a Dynamic Linked Library (DLL)

– Local • Server that runs as a separate process on the same machine as

the client

• run as an executable (EXE) application

– Remote • Server that runs as a separate process on another machine

• DLL or EXE

Page 61: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Servers

• Servers have four responsibilities– Allocate a CLSID for each supported class and provide a mapping

between CLSID and server module (registry)

– Implement a class factory object with the IClassFactory interface (CreateInstance & LockServer) for each CLSID

– Expose the class factory so the COM Library can find it once it is loaded (CoRegisterClassObject or DllGetClassOjbect)

– Provide for unloading the factory if is serving no objects and no locks are in place

Page 62: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Clients

• Any application which uses COM to instantiate objects• Object usage involves:

– Using CLSID through COM Library or class factory to get an interface pointer

• Interface pointer is actually a pointer to a pointer to a table of function pointers

– Using interface pointer to call member functions or to obtain other interfaces

– Calling Release() function when done with object.

Page 63: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Library

• COM Library provides :– A small number of API functions that facilitate the creation of COM

applications

• clients (object creation).

• servers (object exposure).

– Implementation locator services

• COM determines, from a class identifier, which server implements that class and where that server is located (registry).

– Transparent remote procedure calls when an object is running in a local or remote server

Page 64: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Example

class StockQuote : public IUnknown {public:

HRESULT QueryInterface( IID & iid, void** ppvObj );ULONG AddRef();ULONG Release();HRESULT getSymbol( char** symbol );HRESULT getLongName( char** name );HRESULT getPrice( int* price )

private:int _price;char* _symbol;char* _name

};

Page 65: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Example

HRESULT StockQuote::QueryInterface( IID & iid, void** ppvObj ) {HRESULT retVal = S_OK;if( IsEqualID( iid, IID_IUnknown )

*ppvObj = ( IUnknown*) this;else {

*ppvObj = NULL;retVal = E_NOINTERFACE;

}return retVal;

}

Page 66: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM Example

hRes = CoCreateInstance(&CLSID_STOCK, NULL,CLSCTX_SERVER,&IID_IUnknown, &pStock);

if (SUCCEEDED(hRes)) {// do something with pStock

}else {

// report error}

Page 67: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

DCOM

• Extends COM to support object communication across networks.

• DCOM protocol, Object RPC, extends DCE RPC– Uses RPC packets with extra information such as interface pointer

identifiers

– Programmers generally write an IDL and use an IDL compiler (MIDL) to generate proxies/stubs

• Pinging for garbage collection

Page 68: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

DCOM

In-ProcessObject

ClientApplication

LocalObjectProxy

RemoteObjectProxy

In-Process Server

COM

Client Process

RPC

RPC

LocalObject

Local Server

Stub

COM

Local Server Process

RemoteObject

Remote Server

Stub

COM

Remote Server Process

Remote Machine

Page 69: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM+

• Transactions– Coordination between COM+ and DTC (Distributed

Transaction Coordinator) to ensure ACID properties.

• Queued Components– Provides asynchronous component invocation and execution

through the use of Microsoft Message Queuing Service

• Object Pooling– Automatic service provided by COM+ which allows

components to have instances of itself kept active in a pool• Stateless• No thread affinity• Aggregatable

Page 70: Presentation Outline of Commercial Systems Bahman Part A: Java Beans Part B: Enterprise Java Beans John Corba OLE ActiveX Andrew COM DCOM COM+

COM+

• COM+ Events