home
NEWS       BLOGS       FORUMS       NEWSLETTERS       RESEARCH       EVENTS       DIGITAL LIBRARY       CAREERS  
Network Computing Network Computing Powered by InformationWeek Business Technology Network

IMMERSE YOURSELF:

SOA

  |

Data Center

  |

802.11n

  |

Data Privacy

  |
APO  |

Virtualization

  |

NAC

  |

Security

  |

Network Mgmt

  |

Enterprise Apps

  |

Storage & Servers



Distributed Objects (CORBA and OLE/ActiveX)
February 8, 1999

Summary, Case Study, and Problems and Exercises

7.9 Summary

Combining Distributed Objects with the Web

Let Me Count the Ways

There are several ways to combine distributed objects with the Web. Here are the principal ones that use CORBA, OLE/ActiveX and others.

The CORBA route:

l Invoke CORBA calls from a CGI procedure (a script or a subroutine written in C or in any other language) that resides on the Web server. In this case, the CGI procedure is the CORBA client. This is the oldest and the best- known method.

l Invoke CORBA directly from the Web browser. Netscape browsers are beginning to support the CORBA IIOP calls directly. Thus, the Web browser sites behave as CORBA clients.

l Use CORBA to interact between Java applets across machines. This option is currently supported by a few vendors (especially SUN).

The OLE/ActiveX route:

l Invoke DCOM calls from a CGI procedure (a script or a subroutine written in C or in any other language) that resides on the Web server.

l Invoke DCOM calls directly from the components contained in the Web browser (e.g., the Microsoft Internet Explorer). These components may be written in C, C++, Visual Basic, Java or other programming languages behaving as ActiveX Controls and contained inside the browser.

l Invoke DCOM calls from the ActiveX components such as spreadsheets that may invoke Java applets or other components residing on Web servers.

Other routes:

l Use the SUN Remote Method Invocation (RMI) between remotely located Java applets. This technology is very well supported by SunSoft tools but is restricted, at the time of this writing, to interactions between Java applets only.

l Use HTTP to invoke remote objects. A few small companies have implemented this option. This option should be used rarely, if at all. We are mentioning it for completeness.

Object-orientation (OO) has a great deal of promise in reducing the complexity of C/S applications. The primary standard for distributed OO systems is OMG’s CORBA. CORBA is a very powerful and important specification for distributed-object-oriented applications. The compound-document standards such as OLE and OpenDoc are being built on top of object- oriented middleware (OpenDoc uses CORBA and OLE uses DCOM). Microsoft shifted its attention from OLE to ActiveX for enterprisewide distributed-object computing over the Internet/Intranet. An important aspect of the current work is to combine distributed objects with the Web (see the sidebar "Combining Distributed Objects with the Web" for different options).

7.10 Case Study: XYZCorp Investigates Distributed-Object Technologies

XYZCorp has initiated a technology-assessment effort that focuses on distributed-object technologies. The advanced-technology group in the corporation believes that the distributed-object model should be used as the ONLY model throughout the corporation. You have been asked to:

l Investigate the use of distributed-object technologies for XYZCorp. What type of applications is this technology most suitable for? Can distributed-object middleware do everything needed for this corporation? What can it not handle and why not?

l Is distributed-object technology as reflected by CORBA and OLE much better than OSF/DCE? Compare and contrast these middleware technologies in terms of their promises, pitfalls, and application fit (i.e., what type of applications are best supported by these middleware types?).

l Select the appropriate middleware product to support this strategy. In particular, should the company consider CORBA or ActiveX?

l Show how the Web will interoperate with distributed objects.

 

Hints about the Case Study:

l For a high-tech company like XYZCorp, use of distributed objects is almost natural.

l At the time of this writing, distributed-object technologies have many promises but they cannot easily handle decision-support applications very well (these applications require extensive remote-SQL access). In addition, client/server transaction processing cannot be supported by CORBA or ActiveX (CORBA specifications for transaction processing are still evolving).

l The following table can be used to compare and contrast distributed-object technologies with OSF DCE. Completion of this table is left as an exercise.

 

Middleware

Strengths

Weaknesses

Sample Applications

CORBA

     

ActiveX

     

OSF DCE

     

 

l The main issue for several organizations at present is to determine whether CORBA or ActiveX should be chosen as a middleware for distributed objects at a high level, CORBA is more suitable for heterogeneous computing environments consisting of PCs, Macs, UNIX, and mainframes. ActiveX is designed for Windows and Windows NT environments. Obviously ActiveX is developed and supported by Microsoft. CORBA products are supported by many vendors–such as Iona, IBM, HP, DEC and Sun. Comparison of these products is beyond the scope of this book.

l Different approaches can be used to integrate distributed objects, especially CORBA, with the Web. Examples are invoking CORBA calls from a CGI gateway, invoking CORBA directly from the Web browser, using HTTP as a transport protocol underneath ORBs, and using CORBA to interact between Java applets across machines. The following diagram can be used to establish a strategy for integrating Web with OO. Perhaps the most natural way will be to use the Web browsers that invoke CORBA objects directly (this technology is currently just becoming state of the market as we go to press). You can add ActiveX considerations to this diagram or to a separate diagram.

7.11 Problems and Exercises

1. Compare and contrast CORBA with DCE. Can you identify classes of applications for which you would choose one versus the other?

2. Does CORBA directly support inheritance and polymorphism? Justify your answer with examples.

3. Suppose you have been given the responsibility of managing compound documents in a medium-sized (about 3000 employees) organization. Will you choose OLE or OpenDoc? Justify your answer.

4. Review the OMG home page, the Microsoft home page, and the OpenDoc home page on the Internet. Note the most recent activities in the last two months.

 

7.12 Additional Information

The book by Orfali [1996] is an excellent reference for distributed objects and covers CORBA, OLE, and OpenDoc in great detail. The books by Mowbray [1995], Otte [1996] and Siegel [1996] describe CORBA in great detail. OMG also publishes on different aspects of CORBA. For example, CORBA: Architecture and Specification, CORBA Services, and CORBA Facilities are all OMG-published books. Examples of additional books on CORBA are Otte [1996], Orfali [1996], and Mowbray [1995]. For the most recent information about CORBA, consult the OMG home page (http://www.omg.org).

For OLE technical details, the book by Brockschmidt [1995] should be consulted. Most books on Visual C++ at present include discussion of OLE. For additional information on ActiveX, the book by Chapell [1996] should be reviewed. For additional information, consult the Microsoft home page (http://www.microsoft.com). Information about OpenDoc can be obtained from the CI Labs home page (http://www.cilabs.org).

State-of-the-art information about distributed objects appears in IEEE Software, IEEE Computer, and Communications of ACM (see, for example, the May 1995 issue of IEEE Computer). State-of-the-market and state-of-the-practice information appears in trade magazines such as Client/Server Today, Datamation, and Object Magazine. Detailed analysis of industrial trends can be found in Gartner Group reports and Seybold Group reports (see, for example, Seybold Distributed Computing Monitor, March 1995).

7.13 References

Adler, R., "Distributed Coordination Models for Client/Server Computing," IEEE Computer, April 1995, pp. 14—22.

Adler, R., "Emerging Standards for Component Software," IEEE Computer, pp. 68—77.

Benantar, M., Blakely, B., and Nadalin, A. "Use of DSOM Before/After Metaclass for Enabling Object Access Control," International Conference on Distributed Platforms, Dresden, February 1996.

Brockschmidt, K., "Inside OLE 2," 2d ed., Microsoft Press, 1995.

Chang, Y., et al., "An Object Transaction Service Based on the CORBA Architecture," International Conference on Distributed Platforms, Dresden, February 1996.

Chappell, D., "Understanding ActiveX and OLE," Microsoft Press, 1996.

Eldred, E., and Sylvester, T., "To Build a Hype-Free Case for OLE and OpenDoc," Client/Server Today, August 1994, pp. 73—80.

Farooqi, K., Loggripo, L., and Demeere, J., "The ISO Reference Model for Open Distributed Processing: An Introduction," Computer Networks and ISDN Networks, July 1995, pp. 1215—29.

Foody, M., "OLE and COM Versus CORBA," UNIX Review, April 1996, pp. 43—45.

Friday, A., Blair, G. S., Cheverst, K., and Davies, N., "Extensions to ANSAware for Advanced Mobile Applications," International Conference on Distributed Platforms, Dresden, February 1996.

Harmon, P., "Object-Oriented Client-Server Systems," Object-Oriented Strategies, Vol. III, No. 5 (San Francisco, 1993).

Harmon, P., "Object-Oriented Client-Server Systems," Object-Oriented Strategies, Vol. III, No. 9 (San Francisco, 1993).

Hayes, F., and Faden, M., "A Move to Unite OLE and CORBA," Open Systems Today, September 5, 1994, p. 1.

Herbert, A., "An ANSA Overview," IEEE Network, January-February 1994, pp. 18—23.

Horn, C., and O’Toole, A., "Distributed Object Oriented Approach," International Conference on Distributed Platforms, Dresden, February 1996.

Hubert, R., "Distributed Object Technology in EDS," International Conference on Distributed Platforms, Dresden, February 1996.

Konstantas, D., "Migration of Legacy Applications to a CORBA Platform: A Case Study," International Conference on Distributed Platforms, Dresden, February 1996.

Koschel, A. and Leibfriend, "Experiences in using the CORBA implementation DSOM," International Conference on Distributed Platforms, Dresden, February 1996.

Minton, G., "Programming with CORBA," UNIX Review, April 1996, pp. 29—39.

Millikin, M., "DCE: Building the Distributed Future," Byte Magazine, June 1994, pp. 125—134.

Mowbray, T., and Zahavi, R., The Essential CORBA, Wiley, 1995.

Nicol, J., et al., "Object Orientation in Heterogeneous Distributed Computing Systems," IEEE Computer, June 1993. pp. 57—67.

Orfali, R., Harkey, D., and Edwards, J., The Essential Distributed Objects Survival Guide, Wiley, 1996.

Orfali, R., Harkey, D., and Edwards, J., Client/Server Survival Guide, Wiley, 1994.

Orfali, R., Harkey, D., and Edwards, J., "OLE vs OpenDoc: Are All Parts JUST Parts?" Datamation, September 1994, pp. 38—46.

Orfali, R., Harkey, D., and Edwards, J., "Client/Server Components: CORBA Meets OpenDoc," Object Magazine, May 1995, pp. 55—59.

Orfali, R., and Harkey, D., "Building a SOM OpenDoc Part," Dr. Dobbs Journal, March 1995.

Otte, R., Patrick, P., and Roy, M., Understanding CORBA, Prentice Hall, 1996.

Rosenberry, W., Kenney, D., and Fisher, G., Understanding DCE, O’Reilly & Associates, 1993.

Riccuit, M., "The Mainframe as Server: Is IBM Totally Bonkers–or Brilliant?" Datamation, May 15, 1994, pp. 61—64.

Rosa, N.S., Cunha, P. R. F., Sadok, D. F. H., "A Methodology for Realization of LOTOS Specifications in the ANSAware," International Conference on Distributed Platforms, Dresden, February 1996.

Rymer, J., "Modeling Network Behavior Using Objects," Distributed Computing Monitor, Seybold Group, Vol. 7, No. 9 (Boston, 1992).

Rymer, J., "Distributed Object Computing," Distributed Computing Monitor, Seybold Group, Vol. 8, No. 8 (Boston, 1993).

Rymer, J., "Distributed Object Interoperability," Distributed Computing Monitor, Seybold Group, Vol. 10, No. 3 (Boston, March 1995).

Rymer, J., "Business Objects," Distributed Computing Monitor, Patricia Seybold Group, January 1995.

Schurmann, G., "The Evolution from Open Systems Interconnection (OSI) to Open Distributed Processing (ODP)," Computer Standards and Interfaces, Vol. 17 (1995), pp. 107—113.

Semich, W., "What’s the Next Step After Client/Server?" Datamation, March 15, 1994, pp. 26—34.

Senivongse, T., and Utting, I.A., "A Model for Evolution of Services in Distributed Systems," International Conference on Distributed Platforms, Dresden, February 1996.

Shan, Y., Earle, R., and McGaughey, S., "Objects on the Server," Object Magazine, May 1995, pp. 49—54.

Shelton, R., "OMG’s CORBA 2.0," Distributed Computing Monitor, Vol. 8, No. 5 (San Francisco, 1994).

Sheton, R., "Enterprise Reuse," Distributed Computing Monitor, Patricia Seybold Group, August 1995.

Siegel, J., CORBA Fundamentals and Programming, Wiley, 1996.

Simpon, D., "Objects May Appear Closer Than They Are," Client/Server Today, August 1995, pp. 59—69.

Sims, O., Business Objects, McGraw-Hill, 1994.

Soley, R., "Role of Object Technology in Distributed Systems," Distributed Computing, ed. by R. Khanna, Prentice Hall, 1994.

Soley, R., "Standards for Distributed Platforms," International Conference on Distributed Platforms, Dresden, February 1996.

Steinder, M., Uszok, A., and Zielinski, K., "A Framework for Inter-ORB Request Level Bridge Construction," International Conference on Distributed Platforms, Dresden, February 1996.

Tibbits, F., "CORBA: A Common Touch for Distributed Applications," Data Communications Magazine, May 21, 1995, pp. 71—75.

Wayner, P., "Object on the March," BYTE, McGraw-Hill, January 1994.

Williams, T., "Principles of OLE 2.0: An Exposition of Microsoft’s Object-Oriented Systems Architecture," University Video Communications, 1994.

7.14 Appendix 7A: A Detailed CORBA Example

7.14.1 Overview

Let us go through an example of developing a simple inventory system by using CORBA. The inventory system consists of a relational table that contains product information (e.g., product ID, product name, price, and quantity on hand). This table is managed by a "product object" that responds to requests from clients to add, view, update, and delete a product. For example, a client invokes a product-view operation by passing a product ID. The product object receives the request and invokes a method that reads the product information and sends it back to the client. Table 7.2 shows the object model for the customer object. In the sections that follow, we will use this model as a starting point for defining the interface, building a server, and building clients in CORBA.

This example is intended to give an overview of the process needed for CORBA application development. Additional details can be found in books and articles [Otte 1996, Minton 1996, Orfali 1996, Mowbray 1995].

 

Table 7.2 The Product Object

Object

Operations

Inputs

Outputs

Product

1. Add a product

____________

2. View a product information

____________

3. Update a product information

____________

4. Delete a product

Product information

____________

Product ID

____________

Product ID,

new information

____________

Product ID

Status

____________

Product

information

____________

Status

____________

Status

 

Figure 7.19 shows the activities involved in developing OO applications in CORBA (this figure is repeated from an earlier discussion):

l Create CORBA definitions by using OMG IDL.

l Build the server.

l Build the client.

7.14.2 Create CORBA Definitions

The following CORBA definitions are created as the first step in CORBA application development:

l Define the interface.

l Define the implementation.

l Define the method map.

As stated previously, the interface of an object is used to declare the behavior of an object. For example, the following statements specify the interface for the product object in CORBA IDL. This interface supports only two operations (we have simplified it somewhat for illustrative purposes):

Figure 7.19 CORBA Application Development

module PRODUCT_PACKAGE {

interface product_interf /* interface name is product */

insert_product (/*Operation is insert_product */

in char product_obj; /* input is product object */

out integer status ) /* output parameter */

view_product ( /*Operation is view_product */

in char product_id; /* input parameter is product-id */

out object product_obj; /* output: product object */

out integer status ) /*output parameter 2 */

}

The module statement is used to name a group of interfaces that relate to each other and can be used to represent a package (i.e., a group of objects). The module name becomes part of the name that the client and server use to reference an interface. The interface statement shows what operations can be performed on the customer object (we have shown only two operations; others can be filled in by the reader). Each interface statement defines an interface and contains the descriptions of the operations (operation signatures). The complete name of an operation includes the module and the interface name. For example, "PRODUCT_ PACKAGE::product_interf::create_product" is the fully qualified name of the operation that creates a new product.

The IDL file is compiled to create the client stub and the server skeleton. The client stub and server skeleton are the code templates for building CORBA client and server programs (see Figure 7.19). The client stub is used only to build client programs that use static binding (see Section 7.14.4). The server skeleton is always used as the framework for building the server application, regardless of the invocation type used by the client (see Section 7.14.3).

Operations on objects are implemented by executable code called methods. For example, the product object must contain the code ("add-product-method") that will be executed to actually create a new product when an operation "add-product" is invoked by a client. The collection of methods that accomplishes the set of operations required for an object is called an implementation. Some CORBA implementations offer a mapping language for describing implementations called the Implementation Mapping Language (IML). The implementation descriptions can be stored in an implementation repository. which can be displayed by CORBA compliant commands or the repository manager. The following statements show the implementation of product methods (once again, we have simplified this somewhat):

implementation productImpl

(

activation_type (program);

implementation _identifier ("676873.0c.03.00.00.00.00");

add_product_method ()

implements (PRODUCT_PACKAGE::product_interf::add_product);

invoke_builtin ("add_p_function)

;

);

The implementation statement is used to specify the name of the implementation. The first few, in our case the first two, statements in an implementation specification are used at start-up time. The activation_type() statement specifies the manner in which the implementation is started once it is selected. For example, (program) indicates that a program will be started; other options indicate dynamic load and script executions. The implementation _identifier() clause is used to assign a unique identifier to an implementation. The unique identifier is automatically generated in response to the CORBA command "orbgen." For each method in the implementation, you define the method name, the operation it supports, and how to run it. In our example, we have defined only one method (add_product_method) that implements the add_product operation defined in the IDL and invokes a built-in module. Method specifications allow invocation options for dynamic and script executions.

In addition to IML, you may need to define method maps. These maps are used by the ORB to locate the best server method for the object operation requested when there is more than one active implementation of an interface. For example, when a client invokes the "add_product" operation, then the ORB looks at the method maps to determine the most appropriate method to invoke. The method map can be stored in the interface repository along with the interface definitions. You can use CORBA commands to generate a default method map from the interface definitions.

7.14.3 Build the Server

Building of program servers requires the following steps:

l Generate the server skeleton.

l Develop server initialization code.

l Develop code for each method.

l Compile, link, and test the server components.

l Register the server.

The first step is to specify the IDL statements and then compile these statements to generate a server skeleton. This compilation also uses the information contained in the IML files. The server skeleton contains method templates that show entry points for all of the implementation methods, the server dispatcher code that makes the implementations, and the methods known to the ORB; a registration routine is also generated as part of the server code. The skeleton code simplifies the task of building a server.

Each server initialization needs code to register the implementation (e.g., make itself available for use), activate the server’s implementation, enter a main loop to receive requests, and exit after unregistering and releasing resources. In addition, the server needs routines for creating objects and managing references to these objects. The server skeleton is used to develop this code. The initialization code uses CORBA run-time routines (these routines are identified as CORBA_ or ORB_). An example of the server C-type pseudocode for the product example is listed below (we have simplified this code by ignoring the error checking and by using a generic "parameter" for the CORBA-provided functions):

#include <stdio.h>

#include <orb.h>

#include product.h /* the IDL generated header */

main ()

{

printf ("product server starting \n");

/* Register the implementation */

status = RegisterImpls (parameters);

/* Create object and its reference */

status = CreateObjRefs(parameters);

/*Make server ready */

CORBA_BOA_impl_is_ready (parameters); /* indicate server ready */

/* main loop to listen to client messages */

ORB_BOA_main_loop (parameters); /* enter the main loop */

/* exit code */

CORBA_BOA_dispose(parameters); /* Frees object references */

ORB_BOA_imp_unregister (parameters); /* Unregister */

/* Methods code templates */

void add_product (product_obj, status);

/* .... insert code for add_product method ...*/

void view_product ( product-id, product_info, status);

/* .... insert code for view_product method ...*/

}

 

The major activity in building a CORBA server is to write the code for the methods that execute the operations. For each method template, you must develop the code for the methods. Methods can be implemented as executable code, calls to legacy applications, or scripts to integrate command-line interfaces with existing applications. Methods can be written to invoke OLE (Object Linking and Embedding), DDE (Dynamic Data Exchange), and SQL database accesses. For example, the following pseudocode to access the product relational table can be added to the add_product and view_product methods:

void add_product (product_obj, status);

/* code for converting product_obj object into

SQL table attributes such as pid, pname, price, on_hand */

exec sql;

insert pid, pname, price, on_hand into product_table;

end sql;

/* .. include other code */

 

void view_product (product-id, product_obj, status);

exec sql;

select pid, pname, price, on_hand from product_table where pid=:product_id;

end sql;

/* code for storing pid, pname, price, on_hand into an object */

}

The final step in building a server is to compile and link the methods, server initialization code, the generated server dispatcher, and the generated registration routine. The server code can be tested and debugged by using CORBA tracing facilities.

7.14.4 Build Client (Static Invocation)

After a server has been built and registered, clients can be built to invoke the servers. As stated previously, CORBA clients can use static invocations (i.e., clients know at compile time the objects and the operations on these objects) or dynamic invocation (i.e., the clients determine at run time the objects and the operations on these objects). We will focus on static invocation in this section and review dynamic invocation in the next. The steps involved in building a static-invocation CORBA client are:

l Generate client stub.

l Define the context object.

l Build the client code.

l Compile and link the client.

The client stub can be generated from IDL, IML, and MML source files or from the interface repository. The generated stub consists of a header file that contains definitions, and the C language stub routines.

A context object shows a set of properties providing information about the client, the environment, or characteristics of the request. The context object is used by ORB during method resolution to identify user preferences for server selection. Basically, it provides a means of maintaining information between requests for conversational applications. The context information is difficult to pass as parameters in a distributed application. The IDL is used to specify whether the ORB should also retrieve information regarding the request from the context object (the "context" clause in IDL). If no context object is specified, the ORB uses the default context object definition. Context objects can be specified at user level (e.g., user preferences), group level (e.g., data restricted to a group of users), or system level (e.g., display types for an application).

The client code includes header file generated by IDL, "local" client code (e.g., communicate with the user), invoke object operations defined in IDL, and handle errors/exceptions.

To invoke the object operations, a client needs to first get an object reference (object references can be stored by the server at start-up in an external file or registry) and then invoke a method on the object. The following client pseudocode illustrates the key points of a client that invokes the add_product and view_product methods:

#include <stdio.h>

#include product.h /. the IDL generated header ./

/* define variables, etc. */

main ()

{

/* code to obtain object reference. This code depends on where the server stored the reference. If object reference is in a file, then use fget, for example, to read the object reference */

product_interf *pptr; /* *pptr is the object reference */

/* Now invoke the add_product and view_product methods */

 

/* put information in product_obj */

pptr->add_product (product_obj, status); /* invoke the object method */

printf ("product added");

product_id = "1111";

pptr->view_product ( product-id, product_obj, status); /* invoke the object method */

printf ("product information", product_info);

/* Other client code, e.g., free resources, error processing, etc. */

After coding, the client is compiled, linked and debugged by using the CORBA environment compilers and tracing facilities?

7.14.5 Building a Client (Dynamic Invocation)

CORBA’s Dynamic Invocation APIs allow a client program to build and invoke requests on objects at run time. These APIs provide maximum flexibility by allowing new objects to be added at run time. The client specifies, at run time, the object to be invoked, the method to be performed, and the set of parameters through a call or a sequence of calls. The client code typically obtains this information from the interface repository. To invoke a dynamic method on an object, the client must perform the following steps:

l Obtain the method description from the interface repository.

l Create the argument list.

l Create the request.

l Invoke the request.

CORBA specifies about ten API calls for locating and obtaining objects from the repository. An example of such an API call is lookup_name(). A describe call is issued, after an object is located, to obtain its full IDL definition. To create an argument list, CORBA specifies a NameValue list as a self-defining data structure for passing parameters. The list is created by using the create_list operation. After this, the request is created using the CORBA create_request call. Eventually, the client can invoke the request by using either an invoke call (send the request and obtain the results, i.e., a synchronous call), or a send call (an asynchronous call). The following pseudocode shows a sample dynamic invocation:

/* Create method description */

lookup_name()

describe ()

/* Create argument list */

create_list ()

add_arg(),,, add_arg(),,,, add_arg()

/* create the request */

create_request(Object Reference, Methods, Argument List)

/* Invoke the remote method synchronously - as an RPC */

invoke()

/* Now process the results */

 


Go Home | Page 1 | 2 | 3 | 4 | 5 | 6 | Next Section


Print This Page


e-mail E-mail this URL





Ready to take that job and shove it?

Function:

Keyword(s):

State:
SPONSOR
RECENT JOB POSTINGS
CAREER NEWS
Go beyond Google and get vertical. These specialized search sites will help you find the business information you need -- fast.

Ari Balogh was named to the post of chief technology officer as the companys for a "realignment" of employees.










InformationWeek U.S. IT Salary Survey 2008
Salaries for business technology professionals are falling. Here's what you need to know in order to make good hiring decisions and personal career choices. Download Today
 
ROLLING RIGHT ALONG
Follow key Network Computing Reviews from conception to completion. This Week: Holistic APM.



Network Computing Reports Emerging Enterprise Podcast Series: Secrets to Success








TechSearch


Microsite of the Week


Powerful Information at Your Fingertips



InformationWeek Business Technology Network
InformationWeekInformationWeek 500InformationWeek 500 ConferenceInformationWeek AnalyticsInformationWeek CIO
InformationWeek EventsInformationWeek ReportsInformationWeek MagazinebMightyByte and SwitchDark Reading
Digital LibraryIntelligent EnterpriseInternet EvolutionNetwork ComputingNo JitterPlug Into The Cloud
space
Techweb Events Network
InteropVoiceConWeb 2.0 ExpoWeb 2.0 SummitEnterprise 2.0 ConferenceMobile Business ExpoSoftware ConferenceCSI - Computer Security Institute
Black HatGTECEnergy CampMashup CampStartup Camp
space
Light Reading Communications Network
Light ReadingLight Reading EuropeUnstrungLight Reading's Cable Digital NewsConstantinopleInternet EvolutionPyramid Research
Heavy ReadingLight Reading Live!Light Reading InsiderEthernet ExpoOptical ExpoTeleco TVTower Technology Summit
space
Financial Technology Network
Advanced TradingBank Systems & TechnologyInsurance & TechnologyWall Street & TechnologyAccelerating Wall StreetBank Systems & Technology Executive SummitBuyside Trading SummitInsurance & Technology Executive Summit
space
Microsoft Technology Network
MSDN MagazineTechNetThe Architecture Journal
space


App Infrastructure   |   Messaging & Collaboration   |   Network & Systems Mgmt   |   Network Infrastructure   |   Security  |   Storage & Servers   |   Wireless   |   Enterprise Apps
About Us  |  Contact Us  |  Site Map  |  Technology Marketing Solutions  |  Advertising Contacts  |   Briefing Centers
Copyright © 2008  United Business Media LLC  |  Privacy Statement  |  Terms of Service  |  Your California Privacy Rights