SOA Ontology, Version 2.0 Open Group Standard : Complete Car Wash Example
This chapter contains the complete car wash example that has been used in parts throughout the definitional chapters of the ontology.
The Organizational Aspect
Joe the owner chooses to organize his business into two organizational units: Administration and CarWash:
- CarWashBusinessis an instance of both HumanActor and System.
- Administration is an instance of HumanActor (organizational unit).
- CarWash is an instance of HumanActor (organizational unit).
- CarWashBusinessuses (has organizational units) Administration and CarWash.
- AdministrativeSystem is an instance of System.
- Administrationrepresents AdministrativeSystem.
- CarWashSystem is an instance of System.
- CarWash represents CarWashSystem.
And using well-defined roles within each organization:
- Owner (role) is an instance of Element and is used by AdministrativeSystem.
- Joe is an instance of HumanActor and is represented by (has role) Owner.
- Secretary (role) is an instance of Element and is used by AdministrativeSystem.
- Mary is an instance of HumanActor and is represented by (has role) Secretary.
- PreWashGuy (role) is an instance of Element and is used by CarWashSystem.
- John is an instance of HumanActor and is represented by (has role) PreWashGuy.
- WashManager(role) is an instance of Element and is used by CarWashSystem.
- WashOperator(role) is an instance of Element and is used by CarWashSystem.
- Jack is an instance of HumanActor and is represented by (has roles) both WashManager and WashOperator.
Car Wash Example – The Organizational Aspect
The Washing Services
Joe offers two different services to his customers: a basic wash and a gold wash:
- GoldWash is an instance of Service.
- BasicWash is an instance of Service.
- CarWash performs both BasicWash and GoldWash.
- WashManagerrepresents both BasicWash and GoldWash (i.e., it is the interaction point where customers can order services as well as pay for them).
In return for payment, Joe’s BasicWash service cleans the car of customer Judy:
- Judy is an instance of HumanActor (the customer).
- BasicWashContractis an instance of ServiceContract.
- BasicWash has contract BasicWashContract.
- CleanCar is an instance of Effect.
- BasicWashContractspecifies CleanCar as its effect.
- BasicWashContractinvolves parties CarWashBusiness and Judy and specifies that Judy (as the legal consumer) pays CarWashBusiness (as the legal provider) $10 for the one consumption of BasicWash with the effect of (one) CleanCar. Note that BasicWash is actually performed by CarWash and not by the legal provider CarWashBusiness – in this particular example CarWash happens to be a member of CarWashBusiness but such need not always be the case, CarWash could have been some third-party provider.
- Judy uses WashManager (in order to invoke the BasicWash service).
Note that in this example Judy does not interact with the (abstract) BasicWash service directly, rather she interacts with the WashManager that represents the service. This is due to Joe deciding that in his car wash customers are not to interact with the washing machinery directly.
Car Wash Example – The Washing Services
Interfaces to the Washing Services
The way to interact with the car wash services is simple for the customer; he or she simply gives money to the wash manager and asks to have the car washed using one of the two available wash services. Due to the fact that Joe has decided to interpose the wash manager between the customer and the washing machine, the customer actually never interacts with the wash services themselves. We could have chosen to formally define a proxy service provided by the wash manager but have omitted that level of formality in this real-world example.
The wash manager in turn does interact with the wash services through their interfaces defined as follows:
- WashingMachineInterface is an instance of ServiceInterface.
- TypeOfWash is an instance of InformationType.
- WashingMachineInterface has input TypeOfWash.
- BasicWash has interface WashingMachineInterface.
- GoldWash has interface WashingMachineInterface.
Note how both washing services in fact have the same service interface. Even though Joe has chosen to offer basic wash and gold wash as two different services, both are in effect done by the same washing machine (one simply has to choose the type of wash when initializing the washing machine).
The Washing Processes
An important part of the car wash system is the car washing process itself:
- AutomatedCarWashProcess is an instance of both Process and Orchestration.
- Wash is an instance of Task and is used by AutomatedCarWashProcess.
- Dry is an instance of Task and is used by AutomatedCarWashProcess.
- AutomatedCarWashis an instance of Element (the automated washing machine) and represents AutomatedCarWashProcess (encapsulates the process) as well as directs AutomatedCarWashProcess.
- CarWashProcess is an instance of Process and is used by (part of) CarWashSystem (no need to create an explicit opaque building block).
- AutomatedCarWashis used by CarWashProcess (automated activity in the process).
- WashWindows is an instance of Task and is done by John.
- PreWash is an instance of Element, represents WashWindows, and is used by CarWashProcess (logical activity in the process).
- PrewashGuy is a member of CarWashProcess (role in the process).
- PushWashButton is an instance of Task and is done by Jack.
- InitiateAutomatedWash is an instance of Element, represents PushWashButton, and is used by CarWashProcess (logical activity in the process).
- WashOperator is a member of CarWashProcess (role in the process).
Car Wash Example – The Washing Processes
The Washing Policies
Joe sets a payment up-front policy for the washing services:
- PaymentUpFront is an instance of Policy.
- PaymentUpFront is set by Joe.
- PaymentUpFrontapplies to both GoldWash and BasicWash.
Note how the PaymentUpFront policy enhances the service contract BasicWashContract. While BasicWashContract only specifies that Judy has to pay $10 for one consumption of the BasicWash service, the PaymentUpFront policy makes it specific that payment has to happen up-front. One of the advantages of separating policy from service contract is that the payment policy can be changed independently of the service contract. For instance, at some later point in time Joe may decide that recurring customers need not pay up-front, and can institute this change in policy without changing anything else related to CarWashBusiness.