In the previous chapter, we discussed service-oriented architecture, which specifies service interfaces and the way service consumers, services, and registries interact. However, it does not specify how a service is implemented. Organizations that want to use service-oriented architecture for new development need to know how to develop the service implementations as well.
A basic tenet of software design is to separate a software module's interface from its implementation. SOA describes the interface. Now we will discuss implementation using component-based development. Service-based development is simply an extension of this. Component-based service (CBS) development describes a service that uses components and component-based development practices for its implementation.
The word component is applied to many different software constructs. It is used to describe user interface components, such as Java beans, and server-side logic, such as entity beans. It is also used to describe an entire functional system, such as for billing or order entry. In all cases, a component is a software package with one or more well-defined interfaces. In addition, a component executes on a component execution environment. For instance, a robust execution environment, such as a J2EE container, provides functions all components need, such as transaction management and database connection pooling. Another feature of a component is that it is packaged and deployed as an independent software entity into an execution environment. A classic definition of a software component states, "In general, software components are binary units of possibly independent production, acquisition and deployment that interact to form a functioning system" (Szyperski 1998).
In this chapter, we will discuss the component development lifecycle, from requirements-gathering through maintenance. However, we will highlight the special aspects of developing component-based services and will focus our discussion on component design principles. Each principle will be related to the effect it has on the overall system's quality attributes.