Over the past decade computing power, network bandwidth, and software development tools have benefited from significant improvements. Yet, aspects of design, implementation, and maintenance of enterprise server applications remain the most risky, error-prone, and costly side of application development. Much of it stems from the need for continuous rediscovery and reinvention of core components. The good news is this is something that's easily fixed.
The most customary response to date for addressing these deficiencies is software reuse. In practice, unfortunately, significant benefits from software reuse prove elusive. Efforts by most development groups result in small, reusable, "black-box" components. Given the marketplace demand for voice and data servers, as well as rich media, this is an excellent time to make additional progress at leveraging some existing object-oriented (OO) paradigms, such as component-oriented programming (COP) and service-oriented programming (SOP), another route to more cost-effective development is taking shape.
Services-Oriented Approach (SOA)
The services-oriented approach organizes solutions into a set of independent but cooperating subsystems or services. Such a framework isolates each service and exposes only the necessary declared interfaces to other services. Services are very much like components in that they expose an interface for invoking a set of related behaviors. A service takes this one step further, by also simplifying the interface, thus effectively encouraging reuse and reducing dependencies.
So how can this SOA save development team money and effort? The SOA encourages the incorporation of organizational best practices. Each service is designed and built for functional reuse across the enterprise, instead of being tied down to a single application. It is this removal of the application boundary (in terms of intent) along with good documentation practices, which produce and enhance reuse of components and objects in software development.
In practical application, for instance, if we extract services from an application that provides behavior common throughout all of my enterprise applications, we can achieve a much higher level of reuse of those services. Applications then can naturally iterate at a faster rate based upon changing customer requirements, without sacrificing the reuse of more stable services within an information processing system.
Java Services Framework (JSF)
The Java Services Framework (JSF) is designed from the ground up to facilitate capitalizing on the reuse of large components in system development (Java Specification Request 111). It is an open standards, component-based framework that facilitates the development of servers from a set of independent but cooperating components or services.
The framework defines the life cycle of these services as well as how they may locate and interact with each other. In addition, the framework supports the run-time configuration and management of these services. The JSF is the starting point for defining a Service-Oriented Approach (SOA) to application development.
In practice, a developer creates a service by implementing a service access point and one or more objects that implement the defined interfaces of that service. The framework then maps the service to the defined interfaces in the service registry. Once a service has been registered in the service registry, it can be accessed via its interfaces because they are defined attributes of the service binding. The associated service can be acquired using any configured interface, and its methods can be accessed by way of the associated interfaces.
Essential to the JSF is the technology that allows developers to create streamlined, compatible services. Toward this end, it provides:
- Well-defined contracts that ensure services are accessed and managed in a unified and consistent manner.
- Management software that allows developers to dynamically configure, maintain, and deploy services.
- Enterprise application support for business solutions, such as logging and security.
In addition, the JSF has an inherently open architecture, allowing its functionality to be leveraged by a variety of applications (for example, databases, application servers, and embeddable hardware programs).