This book fills a gap between high-level overview texts that are often too general and low-level detail oriented technical handbooks that lose sight the "big picture". This book discusses SOA from the low-level perspective of middleware, various XML-based technologies, and basic service design. It also examines broader implications of SOA, particularly where it intersects with business process management and process modeling. Concrete overviews will be provided of the methodologies in those fields, so that students will have a hands-on grasp of how they may be used in the context of SOA.
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.1 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.1 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
Dominic Duggan, PhD , is a faculty member in the Department of Computer Science at Stevens Institute of Technology. His research interests are in the design and development of secure and reliable software systems. His publications have appeared in leading journals and conferences.