IBM Skip to main content
  Home     Products & services     Support & downloads     My account  
  Select a country  
Journals Home  
  Systems Journal  
  ·  Current Issue  
  ·  Recent Issues  
  ·  Papers in Progress  
  ·  Search/Index  
  ·  Orders  
  ·  Description  
  ·  Author's Guide  
Journal of Research
and Development
  Staff  
  Contact Us  
Systems Journal  
Volume 36, Number 3, 1997
Nontopical Issue
 Table of contents: arrowHTML arrowASCII   This article: HTML arrowASCII   DOI: 10.1147/sj.363.0437 arrowCopyright info
   

Technical Forum

IBM Business Frameworks: San Francisco project technical overview

Software developers face significant challenges as they attempt to modernize current applications to take advantage of the benefits of distributed objects. The cost of developing the next generation of applications as industrial-strength distributed-object solutions will be prohibitive for many software vendors, because their skills are in developing procedural applications. Some vendors have indicated that as much as 80 percent of their development cost is in writing and supporting the basic, noncompetitive functions that are essentially the same for any application solution offered in a specific domain.

The San Francisco project now in progress addresses these problems by providing object-oriented infrastructure and application logic that can be expanded and enhanced by developers in the areas where they choose to provide competitive differentiation. The frameworks are intended to lower the barriers to widespread commercial implementation of distributed object solutions. This report provides an overview of the IBM San Francisco project and its Business Frameworks.

The San Francisco project was started when several software vendors asked us for help in modernizing their application products. They realized that their current applications needed to be updated if they were to continue to be viable in the emerging object-oriented, network-based market. However, there were several barriers. One barrier was the problem of retraining the development staff to effectively use object-oriented technology. The retraining would be more than just learning another programming language; the staff would need to learn how to analyze a problem in terms of objects and how to use that analysis to design an object-oriented solution. A whole new approach to building systems and a whole new set of skills and tools would be required.

A second barrier was the risk involved in moving to a new technology. Often the first solution built by a team using new skills and a new technology is less than perfect. A poor design causes problems, such as code that does not function properly, poor performance, or a solution that is hard to use. Solving such problems is a necessary step in learning to apply a new technology, but the number and magnitude of the problems must be contained, so that the business can keep operating while the new approach is learned.

A third barrier in moving to object-oriented technology was the cost of making the change. The software developers needed some basic infrastructure upon which to base their applications. Many of the companies could not afford to develop this infrastructure themselves. They also could not afford to rewrite their entire product line at one time. They needed to be able to spread the cost of upgrading their applications over time by having the object-based portions of the application interoperate with portions that had not yet been updated.

The San Francisco project helps developers to overcome the barriers through business frameworks that provide an object-oriented infrastructure, a consistent application programming model, and some default business logic. The frameworks make it easier to move to object-oriented technology because developers use well-tested services instead of building their own. They can design their solutions using a proven programming model instead of developing a unique approach. They can build their applications by modifying and extending the default business objects and logic provided in the frameworks instead of having to start "from scratch" to build applications from raw requirements statements. This allows developers to apply more development resources on the functions that will give them a competitive advantage. The frameworks are designed to be easy to extend in areas where software vendors have told us they differ from their competitors.

The San Francisco project is being developed in collaboration with several hundred international ISVs (independent software vendors) to ensure applicability across a broad range of small-to-medium-enterprise business solutions. The ISVs are working with IBM to design, develop, and validate frameworks, create development tools, and develop integrated applications using the frameworks.

Feedback from companies that have tested early versions indicates that the frameworks provide about 40 percent of a typical working application within the supported domains. ISVs will develop the remaining 60 percent of the application on top of the frameworks and bundle both the IBM and ISV code into a single solution, which the ISV will then license to customers. The customers benefit through improved flexibility to meet changing business needs, improved availability and affordability of customized multiplatform business solutions, and improved application interoperability. Use of a shared architecture will make it easier to integrate solutions from different software vendors.

Frameworks description

The San Francisco project is building three layers of extensible components for use by application developers. In the highest layer, the core business processes provide business objects and default business logic for selected "vertical" domains. The second layer provides definitions of commonly used business objects that can be used as the foundation for interoperability between applications. In the lowest layer, the base provides the infrastructure and services that are required to build industrial-strength applications in distributed, managed-object, multiplatform applications. The base isolates an application from the complexities of multiplatform network technology and allows the application providers to focus on unique elements that give value to their customers.

Application developers may choose to use the framework technology for only portions of their application. The San Francisco frameworks have been designed to coexist with existing business applications, preserving existing application investments.

Application developers can use the frameworks at any of the three levels, as shown in Figure 1. At the lowest level, application developers can utilize the base infrastructure to provide a consistent programming interface and structure for building distributed multiplatform applications. At the next level they can select common business objects as the basis for application integration. This level provides a common foundation for building interoperable business solutions. At the highest level, application-specific business frameworks will provide core business processes that can be easily extended to provide a complete business solution. Initially, the San Francisco project has examined business application frameworks in the domains of accounts receivable, accounts payable, general ledger, sales and purchase order management, and warehouse management. Over time, these business frameworks will be extended and enhanced with additional objects and access to more framework interfaces, providing greater application flexibility.

The San Francisco project (referred to simply as "San Francisco" in the rest of this report) uses the Java** language. This makes the frameworks, and the applications developed using them, portable across many platforms. It also allows developers to use the many tools and class libraries the industry is producing for Java development. We expect most development with San Francisco frameworks to take the form of Java applications. However, application developers can create applets [1] to work with San Francisco objects as well.

The following information reflects the current direction for the San Francisco frameworks. IBM has not committed to ship all of the functions and reserves the right to make changes to functions listed here. We are working with our reference group [2] to help validate and prioritize how functions will be delivered over time. Our current plan is to ship the base technology, several common business objects, and portions of the the general finance vertical domain frameworks in the initial release.

Base layer. The lowest-level framework that can be used by application developers is the base. It provides the underlying infrastructure for the common business objects and the core business processes. It allows San Francisco to hide differences in underlying technology from application developers, making it easier to support an application on multiple platforms while still exploiting platform-specific advantages. The base layer also provides a consistent programming interface and structure for building applications.

Two categories of functions in the base layer are directly usable by developers: base object model classes and utilities. To support distributed, mission-critical requirements, the base layer also provides a set of kernel services. In most cases, the kernel services are not directly visible to developers. Instead they are invoked indirectly by the base object model interfaces. This approach helps to simplify the application programming model. It also will allow application developers to make use of new technology that IBM might incorporate into the infrastructure without modifying their application code. The interfaces that application developers use would remain consistent; only the underlying implementation of the infrastructure would change.

Many of the services in this layer are based on object service definitions from the Object Management Group (OMG). For example, the kernel service provides an object transaction service, collection handling, communication between distributed objects, and persistence management. However, San Francisco is not providing a CORBA**-compliant Object Request Broker. [3] The base merges and combines OMG-defined functions with functions provided by Java. It also simplifies the OMG definitions when possible and adds additional function when necessary. For example, instead of supporting all of the locking types defined by OMG, we are supporting only optimistic locking (to allow greater concurrent access to data) in addition to the traditional pessimistic locking approaches used by many infrastructures. Our services are also influenced by other sources, including Taligent frameworks [4] and patterns as described by Gamma et al. [5]

The kernel services contain extensions that we found were necessary for our Java frameworks. We are using Java's remote method invocation (RMI) interface as the basis for the communication infrastructure. We have extended the RMI function to support areas such as server process management. We anticipate that some kernel services that complement the base will be provided by products from other vendors. Examples include licensing and encryption technology.

Object model classes. The object model classes provide the basic structure for San Francisco objects and frameworks. In effect, they define the San Francisco application model. These classes contain complete methods that are inherited and used by application developers, as well as abstract definitions for other methods.

The object model classes provide a consistent object model that will fit a wide range of distributed applications. They allow the developers to specify different options, such as defaults for location (on the client or on the server), locking mechanism, and object identification approach. The interfaces may be implemented differently to exploit the advantages of each platform, but the behavior seen by the developer is the same.

The object model classes include:

  • Entity. Entities are independent, shareable objects (persons, things) that are used in the operation of a business. Entities are often associated with the data that are at the core of an application or framework. An entity may be persistent (associated with an underlying persistent storage mechanism on a server) or transient. Entities may also be used for temporary caching of data on client systems while processing is taking place. The methods associated with each entity generally deal with getting and setting the state (attribute) values, or business logic that involves only a single object. A subtype of Entity, Dynamic Entity, allows property/value pairs to be associated with the entity at execution time. This provides great flexibility in customizing entities to specific business requirements.
  • Dependent. Dependent objects have less system overhead than entities. Because they cannot exist outside of the scope of an entity, they cannot be shared, be referenced, or take part in transactions independently. Dependents often contain additional information about their owning entity.
  • Command. A command is a group of operations on an object or collection of objects. Commands contain logic that is applicable to more than one business object. The commands contain many of the functions and procedures for an application or framework. They can be distributed to either clients or servers and can affect either individual entities or collections of entities.
  • Collection/Iterator. Collections are used to group objects together. Some collections are structured so that individual elements may be accessed by a key. Others function as a set of elements. Iterators associated with the collection are used to access the elements and traverse across the collection. For example, an iterator may provide a "next" method to enable scrolling through a collection.
  • Factory. A factory manages instances of its objects during framework execution. Factories provide functions that create and delete entities, commands, and collections. Different implementations of the factories will allow application developers to support different platforms and persistent storage mechanisms with minimal or no change to the business objects themselves.

Utilities. Utilities provide services that will be needed by most applications built from the San Francisco frameworks. The utilities are designed to be used "as is," rather than extended or modified.

Several different types of utilities are provided. Administration supports the definition and maintenance of application security and system configuration information. Conflict control allows a system administrator to prevent commands that should not be executed at the same time from running concurrently. The installation utility helps application developers install and maintain the frameworks, and applications built from the frameworks. The audit trail utility allows application developers to track object access by users.

Many of the utilities will be implemented by invoking functions provided in the operating systems or in other products. The San Francisco developers will ensure that the functions are well-integrated and provide a consistent "look-and-feel" for users. And, like the kernel services, the utilities will provide additional capability when needed. For example, in application security the utility adds support for grouping users by the methods they can access.

Common business objects layer. The middle layer of the frameworks contains the common business objects (CBOs). This layer is composed of several independent frameworks that can be categorized as (1) business objects common to multiple domains or (2) common application services. Speaking in general terms, the business objects represent those entities that a person knowledgeable in the domain would reference when describing how to perform a business task in nontechnical terms. The common application services are more likely to be identified when discussing an approach for automating a process.

Business Partner is an example of a business object that we found in multiple domains. It encapsulates the characteristics of a customer or supplier, such as the default currency, a description, and the languages used by the partner. Another example is Address, which provides a generic way to describe a location, including a postal area. It supports different formatting controls for the address data and the relationships of an address to other objects, such as locale and language. An example of a common application service is the Decimal Structure. It provides the capability to define the number of decimal positions and rules about how the number is to be processed, such as rounding on input or output.

For many of the common business objects, part of the basic structure and behavior is required by multiple application domains and part is unique to an individual domain. For example, in the Business Partner, much of the structure related to currencies, languages, and addresses would be required by multiple domains, while the structure and behavior associated with the product-supplier relationship would be unique to the warehouse logistics domain. In this case the common portions are implemented within the CBO layer and the unique structure and behavior is implemented as part of the application domain framework that references the CBO structures.

Core business processes layer. The top layer of the frameworks contains the core business processes. The objective for this layer is to create a sound architecture and highly extensible objected-oriented implementation for the basic structure and behavior of any solution in the selected domain. On top of this basic structure and behavior we will implement a very limited set of application functionality, so that the frameworks will actually do something as they "come out of the box." Our participating vendors tell us that the combination of common business objects and core business processes will approximate 40 percent of a typical working application. It is anticipated that application providers will in all cases extend the frameworks to add their own user interface, country- and industry-specific requirements, business rules, competitive differentiators, and complementary application functions. The extension points at which application providers will add or replace business logic are carefully defined during the frameworks design phase.

The application domains addressed in the initial requirements and design phases for the San Francisco project included business "financials," (accounts payable, accounts receivable, and general ledger), order management (sales orders and purchase orders), and warehouse management (logistics and control functions). The initial toolkit for San Francisco contains the General Ledger framework, several common business objects, and the base infrastructure. Additional frameworks and business objects will be added over time, based on customer requirements.

The frameworks in each domain make use of common business objects and provide the structure and default behavior for relevant business tasks. Examples of tasks in the Accounts Receivable/Accounts Payable Ledger framework are Payment (receiving payments from and creating payments to business partners) and Transfer Item (transferring an item from one account to another, or from one business partner to another).

The General Ledger framework can be used to manage the accounts on the general ledger for a company or a hierarchy of companies. Business tasks supported include Journaling (creating, validating, processing, and posting journals) and Closing (closing the books for an accounting period or year).

The Sales Order Processing framework manages quotations, sales orders, and sales-order contracts throughout their respective life cycles. Its business tasks include Pricing and Discounts (maintaining, retrieving, and calculating sales prices and discounts) and Sales Contracts (creating and maintaining sales contracts and tracking customer compliance).

The Purchase Order Processing framework supports purchase orders and supply contracts. Its business tasks include Purchase Orders (creating, maintaining, and confirming purchase orders) and Back to Back Orders (managing purchase orders that are directly linked to specific sales orders).

The Order Management framework provides an abstract model and default behavior for aspects of order processing that are common across several order-related processes (e.g., sales orders, purchase orders, and quotations). Within this framework Order Data Interchange is an abstract model for managing order data that are interchanged among several entities. It includes preprocessing to select and normalize data before the data reach the actual processing destination.

The Warehouse Management framework supports warehouse logistics tasks, for example, Internal Replenishment (recommendations for stock movements between warehouses), and Kit Assembly (tracking the associated stock activity and movements). A business object used in this framework is the Product (definition, policies, lead time, reserves, and balances). Other tasks supported include Manual Stock Transactions (receiving and disbursing stock for miscellaneous purposes) and Kit Definition (defining a kitting operation to assemble the product).

Building applications from frameworks

Building applications from the business frameworks will be approached in several ways. The simplest of these is to use the objects and classes in the frameworks without changing them. To do this, the developer writes client code that uses a factory object to manage access to the framework business objects. The factory manages a command (and the associated transaction) that creates, deletes, or updates a business object.

A second approach is to modify the frameworks by creating new domain classes from the base object model classes. This would be done if a new business task or process is added on top of the frameworks. Developers who make these changes need to understand the methods and programming guidelines for creating, deleting, and updating framework objects. They will need to understand how to use the factory methods that create and delete business objects and how to build the commands that implement the new business task.

A third approach is to modify the frameworks by extending the supplied domain classes and methods. It may be necessary to add additional attributes to those defined for a class, or to replace the logic in one of the methods. We worked closely with our participating vendors to identify the types of changes that will be necessary. We then designed the frameworks so that these changes are easy to make and affect other parts of the frameworks as little as possible. Developers must understand and follow the application model of the base object classes to ensure consistency with unchanged parts of the frameworks.

Example. The San Francisco frameworks are designed to be extended easily by application developers. Extensions include overriding the default business logic in supplied methods, adding attributes to existing classes, adding methods to existing classes, and adding new classes to the frameworks. The framework documentation will describe each part and its function, helping the developer to find the section of code to be customized.

As an example, consider a framework that includes the classes Receipt and Purchase Order Line. Default attributes of Receipt include status, quantity accepted, and quantity rejected. Its default methods include determining if an inspection is required and recording inspection results.

A default attribute of Purchase Order Line is a "quality inspect" flag that can be set to "yes" or "no." Receipt's default method to determine if an inspection is required simply tests the value of this attribute.

Suppose the developer wants to add logic to make additional tests before determining if an inspection is required. Perhaps information about the supplier, or previous receipts from the supplier, should be checked. Perhaps hazardous materials and expensive products should always be inspected.

To do this, the developer creates a subclass of Receipt and writes a new method to determine if an inspection is required. This method overrides the default method and contains the logic needed to check the supplier table, check the results of previous receipts from this supplier, and determine whether the receipt is for hazardous materials or high-value products before making the final determination that an inspection is or is not required.

When the changes have been compiled and installed, the new logic will be in effect for quality checks, while the rest of the framework continues to function as before. Of course, if the new method requires classes or attributes that are not already in the framework, additional changes are needed.

Development process

Effective use of frameworks requires a different development approach than is typically used in developing applications. A development process tailored for frameworks is outlined here:
  1. Business architecture. First, domain experts define the business problem to be solved. This involves gathering requirements from experts, users, and existing systems. The business problem is broken down into business processes. These are viewed as functional requirements, or use cases. [6] The framework repository is searched for available processes that match, or can be extended to match, the functional requirements. The required processes are assembled in an object model diagram [7] to analyze static elements of the design. The use cases are used, in conjunction with the object model, to define object interaction diagrams [6] to analyze the dynamic aspects of the design.
  2. Framework componentry. The focus now moves to finding or defining reusable parts. The repository is browsed to find parts that meet or can be extended to meet the functional requirements incorporated into the model. In some cases the function needed may already exist in the repository. In other cases developers may need to use combinations of existing frameworks or modify existing frameworks to meet specific needs. This may include adding and deleting activities and nodes, or modifying the sequences of activities. If the function does not exist in the repository, one may consider buying a framework to incorporate into the design. In still other cases new code will need to be developed. It is important that it be designed using object techniques to maximize its potential for reuse.
  3. Application architecture. Developers are now ready to build the application. This includes incorporating the user interface with the functions needed to meet all design requirements. The application is assembled by pulling together the selected frameworks and developing any additional code that is needed. The application is prototyped and tested. The frameworks are changed and extended as required to meet application needs. There should be two to three complete design cycles, from analysis through prototyping. This is critical to ensure that the basic design is right. It will become the foundation for defining and testing incremental improvements to the application. Following this step, the application is ready for end-user testing.
  4. End-user environment. The application is installed and integrated into the business environment. For simple applications, the customer may simply install and configure the shrink-wrapped product. A complex application might be validated via process modeling and analysis, tested with end users, and integrated with other applications. New requirements might be incorporated before the application is finally put in production.

Tools are needed to support each step of the process. For San Francisco, tool support will be provided by both IBM and other vendors. We are working with tool vendors to ensure that their tools make effective use of the frameworks.

Development approaches

The ultimate goal for the San Francisco frameworks is to support rapid application development. The developers will be coming from several different application disciplines.

San Francisco will allow the integration of different approaches for building applications, for example: compound documents, business process modeling and control (workflow), and Java-based internet/intranet approaches. It is our plan to provide sample demonstrations of how these technologies can be integrated.

Compound documents. Compound document environments include Lotus Notes** and scripting, JavaBeans**, and ActiveX**, (all supporting desktop-centric, document-style applications. Development in these environments focuses on how a document is presented to the end user and how the information is represented. Attached to the various sections or parts of the document form are scripts containing the functional extensions.

For example, a form might represent a sales order. As the sales order passes through its life cycle, scripts are executed and data values are retrieved and placed in the form: name and address in the heading information, inventory items in the body, and calculated totals and discounts in the totals area.

San Francisco frameworks can be used as a basis for the form and its parts, providing the functional extensions for these compound documents.

Business process modeling and control. Business process reengineering is giving focus to a number of technologies, including modeling tools and workflow process-control engines. Workflow technology provides a layer of control outside of the normal processing. The outer layer can be modified to meet business process-to-market demands, while keeping controls and audits for existing processes. This supports a customer focus on business processes, to streamline and control them for increased efficiency and cost savings.

Application developers in this environment can use San Francisco frameworks as business activities within a process, and also to initiate business processes. They will use workflow products to "glue" various new and existing applications together into a coherent business process, passing parameters between application activities via workflow products.

Internet/intranet and Java. This is one of the fastest-growing and most exciting technologies for developing distributed application solutions. Applications may be designed and configured to either include execution of objects on the client or to have all execution on the server. Solutions will need to allow seamless integration between Java and non-Java environments.

Migration and coexistence

Businesses will tend to upgrade and replace their mission-critical applications a few at a time rather than all at once. San Francisco will provide ways for new applications based on the frameworks to coexist with existing business systems.

First, the frameworks will allow integration with legacy databases. San Francisco will provide "schema mappers" to allow developers to access relational databases as San Francisco objects. These databases may be part of a new application design or from existing applications. An open interface will support relational databases from several vendors. Our goal is to allow shared, concurrent update access between legacy and San Francisco-based applications.

A second area to address is the interoperation of legacy code with San Francisco objects. We plan to demonstrate that San Francisco objects can call functions provided by applications written in traditional languages. This provides access to a large set of legacy application function. The ability for other programs and objects (such as ActiveX objects) to invoke San Francisco objects is also being examined. Many groups, both within and outside of IBM are working on this problem. We plan to provide sample code to help ISVs better understand the interoperability requirements for migration and coexistence.

Another important consideration in migrating to San Francisco-based applications is education. Developers must learn how to design and develop objects. They must understand what functions the San Francisco frameworks provide, and how to extend and customize them for their own applications. IBM will provide training on how to build frameworks and frameworks-based applications.

Standards activity

There is ongoing work in the industry to develop standards in the areas of Java, business objects, and business object infrastructure. One area being explored is the relationship between Java and object request brokers (ORBs). Another is the type of infrastructure required to support business objects in distributed computing environments. There are efforts to reach agreement on common definitions for some business objects.

The San Francisco project is participating in many of these discussions. We are working, along with other projects in IBM, to submit proposals to the OMG in the areas of business object facilities and common business objects. Standards in these areas will allow customers to more easily combine software from several vendors into an integrated solution. Standards will also make it easier for application developers to learn to use distributed objects. However, the software vendors working with us ask that we not wait for all of the standards questions to be answered. We are proceeding to build and deploy the frameworks while contributing to the definition of standards.

Early vendor involvement

The San Francisco project was initiated because of requests from software vendors to help them find a way to take advantage of object-oriented technology. These vendors continue to be involved, reviewing our plans and designs at scheduled "advisory group" meetings. Their contributions and guidance are essential to ensure that the frameworks will help them as they build their future products. More information on becoming involved in the San Francisco project can be found at our frameworks home page: http://www.ibm.com/java/sanfrancisco.

A pervasive question from our advisory group is "what should we do to prepare our development organizations to use object-oriented technology and the San Francisco frameworks?" In answer to this question we are offering a number of education courses. Introductory courses cover basic object-oriented concepts and the Java programming language. Additional courses are available on object-oriented analysis and design, and on how to select initial projects that will have a high likelihood of succeeding. Finally, courses are given on the San Francisco frameworks, and how to use them as the basis for designing and building frameworks-based applications.

Summary

The San Francisco project is intended to help application developers rapidly build distributed, object-oriented applications. It provides a base of object-oriented infrastructure and application logic, which can be expanded and enhanced by each developer. This report has given an overview of the San Francisco project and the IBM Business Frameworks being developed. It is intended to provide the reader with a high-level understanding of the architecture and content of the frameworks.

*Trademark or registered trademark of International Business Machines Corporation.

**Trademark or registered trademark of Sun Microsystems, Inc., Object Management Group, Lotus Development Corporation, or Microsoft Corporation.

Cited references and notes

Vincent D. Arnold, Rebecca J. Bosch, Eugene F. Dumstorff, Paula J. Helfrich, Timothy C. Hung, Verlyn M. Johnson, Ronald F. Persik, and Paul D. Whidden

IBM AS/400 Division
Rochester
Minnesota