Table of Contents
List of Figures xv
Acknowledgements xxiii
1 Introduction 1
References 6
2 Middleware 7
2.1 Enterprise Information Systems 7
2.2 Communication 12
2.3 System and Failure Models 21
2.4 Remote Procedure Call 34
2.5 Message-Oriented Middleware 42
2.6 Web Services and Service-Oriented Architecture (SOA) 46
2.7 Cloud Computing 52
2.8 Naming and Discovery 55
2.9 Further Reading 56
References 57
3 Data Modeling 59
3.1 Entities and Relationships 60
3.1.1 Concepts and Entities 60
3.1.2 Attributes and Relationships 61
3.1.3 Properties of Relationship Types 65
3.1.4 Special Relationship Types 69
3.2 XML Schemas 74
3.3 Defining New Types 79
3.3.1 Defining Simple Types 79
3.3.2 Defining Complex Types 82
3.4 Derived Types 85
3.4.1 Derived Simple Types 86
3.4.2 Derived Complex Types 87
3.5 Document Hierarchies 94
3.6 Relationship Types in XML Schemas 98
3.7 Metaschemas and Metamodels 100
3.8 Further Reading 102
References 102
4 Data Processing 104
4.1 Processing XML Data 104
4.1.1 Tree Processing 105
4.1.2 Schema Binding 109
4.1.3 Stream Processing 114
4.1.4 External Processing 119
4.2 Query Languages and XQuery 122
4.3 XML Databases 134
4.3.1 Storage as Relational Tables 135
4.3.2 Storage as Large Strings 137
4.3.3 Native XML Storage 137
4.4 Web Services 138
4.4.1 SOAP: (not so) Simple Object Access Protocol 139
4.4.2 WSDL: Web Services Description Language 145
4.4.3 Web Service Policy 155
4.5 Presentation Layer: JSON and JQUERY 159
References 166
5 Domain-Driven Architecture 167
5.1 Software Architecture 167
5.2 Domain-Driven Design 168
5.3 Application Frameworks 175
5.4 Domain-Specific Languages (DSLs) 180
5.5 An Example API for Persistent Domain Objects 188
5.6 Domain-Driven Architecture 197
5.7 Further Reading 205
References 205
6 Service-Oriented Architecture 207
6.1 Services and Procedures 207
6.2 Service-Oriented Architecture (SOA) 211
6.3 Service Design Principles 216
6.4 Service-Oriented Architecture (SOA) Governance 218
6.5 Standardized Service Contract 221
6.5.1 Operations Contract 222
6.5.2 Data Contract 223
6.5.3 Policy Contract 224
6.5.4 Binding Contract 226
6.5.5 Contract Versioning 231
6.6 Service Loose Coupling 237
6.6.1 Motivation for Loose Coupling 237
6.6.2 Contract Development 239
6.6.3 Loose Coupling Patterns 242
6.6.4 Cost of Loose Coupling 246
6.7 Service Abstraction 248
6.7.1 Platform Abstraction 248
6.7.2 Protocol Abstraction 249
6.7.3 Procedural Abstraction 261
6.7.4 State Abstraction 264
6.7.5 Data Abstraction 269
6.7.6 Endpoint Abstraction 278
6.8 Service Reusability 278
6.8.1 Parameterization and Bounded Polymorphism 279
6.8.2 Subtyping, Inheritance, and Contracts 284
6.8.3 Does Service-Oriented Architecture Require Subtyping? 289
6.8.4 Patterns for Service Reusability 292
6.9 Service Autonomy 299
6.9.1 Replicating Computation 300
6.9.2 Replicating State 303
6.9.3 Sources of Errors and Rejuvenation 308
6.9.4 Caching 313
6.10 Service Statelessness 323
6.10.1 Contexts and Dependency Injection 331
6.11 Service Discoverability 336
6.11.1 Global Discovery 336
6.11.2 Local Discovery 337
6.11.3 Layered Naming 347
6.12 Further Patterns 351
6.13 Further Reading 352
References 352
7 Resource-Oriented Architecture 359
7.1 Representational State Transfer 359
7.2 RESTful Web Services 369
7.3 Resource-Oriented Architecture (ROA) 379
7.4 Interface Description Languages 387
7.4.1 Web Services Description Language (WSDL) 387
7.4.2 Web Application Description Language (WADL) 390
7.5 An Example Application Program Interface (API) for Resource-Oriented Web Services 396
7.6 Hypermedia Control and Contract Conformance 406
7.7 Concluding Remarks 412
7.8 Further Reading 414
References 414
Appendix A Introduction to Haskell 416
A.l Types and Functions 416
A.2 Type Classes and Functors 425
A.3 Monads 431
A.4 Further Reading 436
References 436
Appendix B Time in Distributed Systems 437
B.l What Time is it? 437
B.2 Time and Causality 443
B.3 Applications of Logical and Vector Time 450
B.3.1 Mutual Exclusion 450
B.3.2 Quorum Consensus 451
B.3.3 Distributed Logging 456
B.3.4 Causal Message Delivery 458
B.3.5 Distributed Snapshots 463
B.4 Virtual Time 468
B.5 Further Reading 470
References 470
Index 473