Private UDDI nodes and the UDDI operator cloud make up two distinct usage categories, each of which implies a very different programming model. Although they both implement the 20 APIs represented in the UDDI API specification, the implementations for the operator cloud and for the private nodes optimize different areas of the design, corresponding to their different uses. A set of additional functions discussed in this article specifies collaboration among private nodes and between the operator nodes and operator cloud. Let's take a look at each of these nodes and the ways in which they can be made to communicate effectively.
Operator cloud use: design-time discovery
The operator cloud contains Web services data for different kinds of businesses in various geographies and industries. Some of this data represents legitimate business and information about the business processes exposed as Web services. Some of this data represents organizations posing on the transactional Web, but do not provide Web services. Finally, some of this data can represent fraudulent or misleading information on business intent. So, we must be able to distinguish between meaningful entries and entries that are a waste of time.
The operator cloud also contains a wide range of mechanisms to describe services. Although the IBM Web Services Architecture recommends the use of WSDL to describe Web services, the tModel facility in UDDI actually allows any mechanism to describe Web services. The tModel could, among other things, be something computable, like a WSDL service-interface definition, or a reference to a text document describing the service in prose, or a description using RosettaNet' PIP format. Its flexibility allows for these different options.
But the universality of the UDDI Business Registry limits its usefulness
for dynamic binding. It is not a target-rich environment for doing
dynamic service find and bind operations since
the ratio of potential targets to actual matches for the operation are
very low. Businesses generate a lot of false hits that are not interesting
or legitimate business partners. Service descriptions allow too varied
a set of find operation results to be immediately translated into code
for service invocation. Future versions of the UDDI API may improve the
find
APIs to address some of these concerns.
If Web services discovery relies only on the operator cloud, all discovery
operations must be performed at design-time. So you can not rely on supporting
tools to build the application's use of the UDDI entries returned from
the find operations. This means that the tModel must be examined
in detail, and the Web service must be invoked by handcrafted code based
on the text-prose description of the tModel.
Private node use: design-time or run-time discovery
The contents of the UDDI entries within
a private node can be constrained to follow certain patterns. These patterns
include only approved partners (for example, partner-catalog UDDI species)
or only allowed WSDL-based tModels. Efforts taken at publish-time
to ensure a target-rich environment will have significant impact on the
programming model for requestor-applications doing find calls
against the private UDDI and using the resulting entries to bind to Web
services.
For example, a requestor-application suite executes find calls
against a partner-catalog UDDI node. Because of publish-restrictions on
this private node, both the legitimacy of the service provider and the
computability of the service description found in associated tModels (for example,
entries reflecting Web services described using WSDL), guarantee the application.
These guarantees mean the programming model may use dynamic find
and
bind
operations at run-time. These dynamic find
and
bind
operations are the foundation of the loosely-coupled nature of Web services.
The requestor-application specifies the find call parameters
(for example, find all services that implement the tModel corresponding to some RFQ web
service interface standard). The find operation executes at run-time
against the partner-catalog UDDI node; the resulting set is all of the
approved business partners that support the RFQ Web service interface definition.
The application is then free to invoke any or all of the Web services found.
Because they all implement the same tModel, and the tModel refers to a
WSDL service interface definition, the application can use a single service
proxy as a front-end to the RFQ Web service
of any business partner selected by the find operation.
Implementing private nodes vs. operator nodes
Due to the possible volume of data and the replication semantics imposed by the operator-agreement, operator cloud nodes must be designed to optimize data throughput. Private nodes are free from this restriction, but the intended use of private nodes encourages other design tradeoffs.
Private nodes have several distinguishing characteristics. They can be lighter weight, they do not have to implement the replication API, and their transaction volumes are significantly less than operator nodes. Some large organizations may choose to implement private nodes as a federation of nodes, in which case a replication model may be required. A private UDDI implementation should emphasize design characteristics such as ease of configuration or reconfiguration (this is, pluggability of supporting components, including the XML Parser, SOAP message processor, database, Web application server, etc.) and deployment flexibility to decide which UDDI APIs to deploy (that is, standard UDDI APIs as well as value-added APIs).
Managing the relationships between UDDI nodes
The world is somewhat simpler when there is only one species of UDDI. The UDDI spec was written to support use-cases related to the single UDDI operator cloud. The replication semantics and the conventions surrounding the use of Universally Unique Identifiers (UUIDs) for entity keys specify the relationship between the nodes (all operator nodes in the cloud).
When we introduce additional species of UDDI, all which are private nodes that do not collaborate using the replication agreement, we must clarify how information can be shared between private nodes.
This article proposes an additional set of functions based on the standard UDDI APIs that address the management of collaborations among private UDDI nodes, and between private UDDI nodes and the UDDI Business Registry.
Consider the following scenario involving private UDDI nodes, and the issue of publishing and subscribing service data between them. The URL for acme.com's html Web presence is www.acme.com. The transactional Web presence (that is, www.acme.com/uddi) is a URL to a UDDI API-compliant private node (that is, a portal UDDI). This portal UDDI contains the Web services metadata from acme.com.
The collection of remotely hosted UDDI entries should be easy to accumulate and manage via a nice interface. Also, the target UDDI node should be kept in sync with the original source of the data (for example, an e-marketplace UDDI, the UDDI cloud or the partners' transactional Web presence UDDI node). It should be possible to move entries back and forth from private nodes to the operator cloud, making it easy for the developer to verify that the entry is accurate before it is published to the cloud or other UDDI nodes.
Here is a set of functions that help to solve these problems. Some of these functions will make excellent candidates for version 3.0 of the UDDI API specification:
- UDDI is very particular about how entity keys (UUIDs) are assigned.
Operator nodes assign keys, not the business that makes the registration.
This affects how the
save_XXXXAPIs work. Asave_businessEntityoperation, for example, uses the value in the businessKey as a switch to decide whether the save is a new entry (when businessKey is empty) or an update to an existing entity (when businessKey has a UUID). So entries from private UDDI nodes new to the operator cloud must be presented to the operator node with an empty key. The UDDI operator node itself must assign the value of the key.
In order to encourage the use of private nodes, we must provide a facility for users to create UDDI entries in private nodes (for example, portal nodes, e-marketplace nodes, etc.). Subsequently, we must publish these entries to the UDDI operator cloud. Support, in this case, involves negotiating the assignment of UUID keys. If the private node originally creates the entry, the private node will assign the key. If the entry is subsequently published to an operator node, either the key must be removed from the entry before publishing to allow the operator to assign UUID values to these keys, or the operator node must approve the UUID assignment algorithm used by the private UDDI node.
Facilitate copy-and-paste between nodes
- It must be easy to select an entry from a private or operator UDDI node and copy the entry into a target UDDI node. For example, partner.com has an entry for an important Web service in its portal UDDI node. Acme.com can use this copy-and-paste facility to select this entry (perhaps through a simple browse facility built on top of UDDI4J). By the click of a button, acme.com can copy that entry into a target UDDI node (for example, acme.com's partner-catalog UDDI node).
Subscribe-for changes to existing entries
- This function is related to the copy-and-paste operations described above. For any change to the copied entry results, a notification is sent to the target specified in the subscription. The target is a Web service invoked when the notification is generated. The user specifies the implementation of the notification-handler Web service that may ignore all notifications, delete or update the entry in a target private UDDI node, or even post the change to a separate node for examination.
- The requestor doing a
findoperation against a UDDI node asks to be notified of any new entry matching a specified pattern. This function can, for example, set up a subscription service within an e-marketplace UDDI node. FlowerWholesalers.com sets up a wholesale e-marketplace catering to flower retailers. Participants in this e-marketplace place subscriptions against the UDDI node. The combination of property values (that is, taxonomy) and service tModel use forms a pattern against which eachpublishoperation is compared. When the pattern matches, the notification-handler Web service is sent a notification specified by the subscription.
- A caching and delegation model provides an alternative to the copy-paste-subscribe
mechanism to populate a private UDDI node and keep it in sync with collaborating
UDDI nodes. The user still selects a UDDI entry (or pattern). But instead
of duplicating the entry from the original UDDI node to the target UDDI
node, an indirection is set up. This indirection acts like a real UDDI
entry. However, when found, it goes back to the original source UDDI node
to retrieve details. For example, acme.com might not keep the complete
businessEntity entries for its partners. Rather, it uses the indirection
mechanism to satisfy the
find_business, and redirects follow-upget_businessrequests through to the UDDI instance that is the original location of the businessEntity entry.
In this way, the administrator of the UDDI node can choose which entries should be cached (for example, copy/paste and subscribe) and which entries should be redirected.
The deployment of private UDDI registries presents additional opportunities for Web services discovery and integration beyond the those provided by the UDDI Business Registry. In order to encourage the adoption of private UDDI registries, the UDDI API needs to be extended to support federating multiple UDDI registries.
-
Read the first installment of this series.
-
Learn more about RosettaNet's b2b specifications.
-
Target-rich environments are described in detail here.
-
Check out the official UDDI site.
-
Check out this UDDI Browser.
-
An open source Java-based implementation of UDDI is available.
-
Take a look at the uddi4j project hosted on developerWorks.
-
Read the XML cover pages on UDDI.
-
Take a look at the Microsoft UDDI pages.

Steve Graham is an architect in the Emerging Technologies division of IBM Software Group. He has spent the last several years working on service-oriented architectures, most recently as part of the IBM Web Services Initiative. Prior to this, Steve worked as a technologist and consultant working with various emerging technologies such as Java and XML, and before that he was an architect and consultant with the IBM Smalltalk consulting organization. Before joining IBM, Steve was a developer with Sybase, a consultant, and a faculty member in the Department of Computer Science at the University of Waterloo. Steve holds a BMath and MMAth in computer science from The University of Waterloo.You can reach him at sggraham@us.ibm.com.
Comments (Undergoing maintenance)





