Foreword...xxxvii
CHAPTER 1: Introduction...1
1.1 Objectives of this Book ... 4
1.2 Who this Book is For ... 4
1.3 What this Book Does Not Cover... 4
Topics Covered by Other Books ...4
Web Service and REST Service Design Patterns ... 5
SOA Standardization Efforts... 5
1.4 Recommended Reading ... 6
1.5 How this Book is Organized... 7
Part I: Fundamentals... 8
Part II: Service Inventory Design Patterns... 8
Part III: Service Design Patterns . . 8
Part IV: Service Composition Design Patterns . . 9
Part V: Supplemental. . . 10
Part VI: Appendices . . . 10
1.6 Symbols, Figures, Style Conventions . . . 11
Symbol Legend . . . 11
How Color is Used 11
Data Flow and Directionality Conventions . . 11
Pattern Documentation Conventions . 11
1.7 Additional Information 11
Updates, Errata, and Resources (www.soabooks.com) . . . . 11
Visio Stencil (www.soabooks.com) . 12
Community Patterns Site (www.soapatterns.org) . . . . . 12
Master Glossary (www.soaglossary.com) 12
Supplementary Posters (www.soaposters.com) 12
The SOA Magazine (www.soamag.com) 12
Referenced Specifications (www.soaspecs.com). . . . . 12
Notification Service 13
Contact the Author 13
CHAPTER 2: Case Study Background . 15
2.1 Case #1 Background: Cutit Saws Ltd 17
History 18
Technical Infrastructure and Automation Environment . 18
Business Goals and Obstacles. . 18
2.2 Case #2 Background: Alleywood Lumber Company . 19
History 19
Technical Infrastructure and Automation Environment . 20
Business Goals and Obstacles. . 20
2.3 Case #3 Background: Forestry Regulatory
Commission (FRC) . . 21
History 21
Technical Infrastructure and Automation Environment . 21
Business Goals and Obstacles. . 22
PART I: FUNDAMENTALS
CHAPTER 3: Basic Terms and Concepts . . . . . 25
Purpose of this Introductory Chapter . . . 26
3.1 Architecture Fundamentals 26
A Classic Analogy for Architecture and Infrastructure . 27
Technology Architecture 27
Technology Infrastructure . 30
Software Program . 32
Relationship to Design Framework . 33
3.2 Service-Oriented Computing Fundamentals. . . . 35
Service-Oriented Computing . . . 35
Service-Orientation 36
Service-Oriented Architecture (SOA) . . . 37
Service . . . . . 37
Service Capability . 38
Service Consumer. 38
Service Composition . . . 40
Service Inventory. . 42
Service-Oriented Analysis. 43
Service Candidate. 44
3.3 Service Implementation Mediums . . . 44
Services as Components . 45
Services as Web Services 45
REST Services. . . . 46
CHAPTER 4: The Architecture of Service-Orientation . . 47
Purpose of this Introductory Chapter . . . 48
4.1 The Method of Service-Orientation 48
Principles of Service-Orientation. 48
Strategic Goals of Service-Oriented Computing. . . . . . 51
4.2 The Four Characteristics of SOA 52
Business-Driven . . 53
Vendor-Neutral . . . 54
Enterprise-Centric . 58
Composition-Centric . . . 59
4.3 The Four Common Types of SOA . 61
Service Architecture . . . 62
Information Hiding . . . . 64
Design Standards . 64
Service Contracts . 65
Service Agents . . . 67
Service Capabilities . . . 68
Service Composition Architecture . 68
Nested Compositions . . 72
Task Services and Alternative Compositions . 73
Compositions and Infrastructure. 74
Service Inventory Architecture . . 74
Service-Oriented Enterprise Architecture 76
Architecture Types and Scope . . 77
Architecture Types and Inheritance 77
Other Forms of Service-Oriented Architecture . 78
Inter-Business Service Architecture . . 78
Service-Oriented Community Architecture . . 78
4.4 The End Result of Service-Orientation . . 79
CHAPTER 5: Understanding SOA Design Patterns . 85
Purpose of this Introductory Chapter . . . 86
5.1 Fundamental Terminology. 86
What’s a Design Pattern? . 86
What’s a Compound Pattern? . . . 88
What’s a Design Pattern Language? . 88
What’s a Design Pattern Catalog? . . . 89
5.2 Historical Influences 89
Alexander’s Pattern Language . . 90
Object-Oriented Patterns . 91
Software Architecture Patterns . . 92
Enterprise Application Architecture Patterns . . 93
EAI Patterns . 93
SOA Patterns . . . . 94
5.3 Pattern Notation . 95
Pattern Symbols . . 95
Pattern Figures . . . 96
Pattern Application Sequence Figures 96
Pattern Relationship Figures. 96
Compound Pattern Hierarchy Figures 99
Capitalization. . . . 100
Page Number References. 100
5.4 Pattern Profiles . 100
Requirement . . . . 101
Icon . 101
Summary . . 102
Problem . . . . 102
Solution . . . . 102
Application . 103
Impacts . . . . 103
Relationships. . . . 103
Case Study Example. . 103
5.5 Patterns with Common Characteristics. 104
Canonical Patterns . . . 104
Centralization Patterns 105
5.6 Key Design Considerations . . 106
“Enterprise” vs. “Enterprise-wide” . . 106
Design Patterns and Design Principles 106
Design Patterns and Design Granularity . . 107
Measures of Design Pattern Application . . 108
PART II: SERVICE INVENTORY DESIGN PATTERNS
CHAPTER 6: Foundational Inventory Patterns . . . 111
How Inventory Design Patterns Relate to SOA Design
Characteristics . . 113
How Foundational Inventory and Service Patterns Relate . 114
How Case Studies are Used in this Chapter. . 114
6.1 Inventory Boundary Patterns . 114
Enterprise Inventory . 116
Problem . . . . 116
Solution . . . . 117
Application. . 118
Impacts . . . . 120
Relationships. . . . 121
Case Study Example. . 122
Domain Inventory . 123
Problem . . . . 123
Solution . . . . 124
Application. . 125
Impacts . . . . 126
Relationships. . . . 127
Case Study Example. . 128
6.2 Inventory Structure Patterns 130
Service Normalization. 131
Problem . . . . 131
Solution . . . . 132
Application. . 132
Impacts . . . . 133
Relationships. . . . 133
Case Study Example. . 135
Logic Centralization . 136
Problem . . . . 136
Solution . . . . 137
Application. . 137
Impacts . . . . 139
Relationships. . . . 140
Case Study Example. . 142
Service Layers 143
Problem . . . . 143
Solution . . . . 144
Application. . 145
Impacts . . . . 147
Relationships. . . . 147
Case Study Example. . 148
6.3 Inventory Standardization Patterns 149
Canonical Protocol 150
Problem . . . . 151
Solution . . . . 152
Application. . 153
Impacts . . . . 155
Relationships. . . . 155
Case Study Example. . 157
Canonical Schema 158
Problem . . . . 158
Solution . . . . 159
Application. . 159
Impacts . . . . 159
Relationships. . . . 160
Case Study Example. . 161
CHAPTER 7: Logical Inventory Layer Patterns . . . 163
Combining Layers 164
Business Logic and Utility Logic . . . 166
Agnostic Logic and Non-Agnostic Logic 166
Service Layers and Logic Types . . . 167
Utility Abstraction . 168
Problem . . . . 168
Solution . . . . 169
Application. . 170
Impacts . . . . 171
Relationships. . . . 171
Case Study Example. . 173
Entity Abstraction . 175
Problem . . . . 175
Solution . . . . 176
Application. . 176
Impacts . . . . 178
Relationships. . . . 178
Case Study Example. . 180
Process Abstraction . 182
Problem . . . . 182
Solution . . . . 183
Application. . 184
Impacts . . . . 185
Relationships. . . . 185
Case Study Example. . 187
CHAPTER 8: Inventory Centralization Patterns . . 191
Process Centralization 193
Problem . . . . 193
Solution . . . . 194
Application. . 195
Impacts . . . . 196
Relationships. . . . 197
Case Study Example. . 198
Schema Centralization 200
Problem . . . . 200
Solution . . . . 201
Application. . 202
Impacts . . . . 202
Relationships. . . . 203
Case Study Example. . 203
Policy Centralization . 207
Problems . . . 207
Solution . . . . 208
Application. . 209
Impacts . . . . 210
Relationships. . . . 211
Case Study Example. . 213
Rules Centralization . 216
Problem . . . . 216
Solution . . . . 217
Application. . 217
Impacts . . . . 218
Relationships. . . . 219
Case Study Example. . 222
CHAPTER 9: Inventory Implementation Patterns . 225
Dual Protocols 227
Problem . . . . 228
Solution . . . . 228
Application. . 228
Impacts . . . . 233
Relationships. . . . 234
Case Study Example. . 235
Canonical Resources 237
Problem . . . . 238
Solution . . . . 238
Application. . 239
Impacts . . . . 239
Relationships. . . . 239
Case Study Example. . 241
State Repository . . 242
Problem . . . . 242
Solution . . . . 243
Application. . 244
Impacts . . . . 244
Relationships. . . . 244
Case Study Example. . 246
Stateful Services . . 248
Problem . . . . 248
Solution . . . . 248
Application. . 250
Impacts . . . . 250
Relationships. . . . 250
Case Study Example. . 251
Service Grid . . 254
Problem . . . . 254
Solution . . . . 255
Application. . 256
Impacts . . . . 257
Relationships. . . . 258
Case Study Example. . 259
Inventory Endpoint 260
Problem . . . . 260
Solution . . . . 261
Application. . 262
Impacts . . . . 263
Relationships. . . . 263
Case Study Example. . 265
Cross-Domain Utility Layer 267
Problem . . . . 267
Solution . . . . 268
Application. . 269
Impacts . . . . 269
Relationships. . . . 270
Case Study Example. . 270
CHAPTER 10: Inventory Governance Patterns . . . 273
Canonical Expression. 275
Problem . . . . 275
Solution . . . . 275
Application. . 276
Impacts . . . . 277
Relationships. . . . 278
Case Study Example. . 279
Metadata Centralization . . . 280
Problem . . . . 280
Solution . . . . 281
Application. . 282
Impacts . . . . 283
Relationships. . . . 283
Case Study Example. . 284
Canonical Versioning 286
Problem . . . . 286
Solution . . . . 287
Application. . 287
Impacts . . . . 288
Relationships. . . . 288
Case Study Example. . 290
PART III: SERVICE DESIGN PATTERNS
CHAPTER 11: Foundational Service Patterns . . . . 295
Case Study Background 297
11.1 Service Identification Patterns . 299
Functional Decomposition . 300
Problem . . . . 300
Solution . . . . 301
Application. . 302
Impacts . . . . 302
Relationships. . . . 303
Case Study Example. . 303
Service Encapsulation 305
Problem . . . . 305
Solution . . . . 306
Application. . 307
Impacts . . . . 309
Relationships. . . . 309
Case Study Example. . 310
11.2 Service Definition Patterns 311
Agnostic Context. . 312
Problem . . . . 313
Solution . . . . 314
Application. . 315
Impacts . . . . 315
Relationships. . . . 316
Case Study Example. . 317
Non-Agnostic Context 319
Problem . . . . 319
Solution . . . . 320
Application. . 321
Impacts . . . . 322
Relationships. . . . 322
Case Study Example. . 323
Agnostic Capability324
Problem . . . . 324
Solution . . . . 325
Application. . 326
Impacts . . . . 327
Relationships. . . . 327
Case Study Example. . 328
CHAPTER 12: Service Implementation Patterns. . 331
Service Façade . . . 333
Problem . . . . 333
Solution . . . . 334
Application. . 335
Impacts . . . . 341
Relationships. . . . 342
Case Study Example. . 343
Redundant Implementation 345
Problem . . . . 345
Solution . . . . 346
Application. . 346
Impacts . . . . 347
Relationships. . . . 348
Case Study Example. . 349
Service Data Replication . . 350
Problem . . . . 350
Solution . . . . 352
Application. . 353
Impacts . . . . 353
Relationships. . . . 353
Case Study Example. . 354
Partial State Deferral . 356
Problem . . . . 356
Solution . . . . 357
Application. . 358
Impacts . . . . 359
Relationships. . . . 359
Case Study Example. . 360
Partial Validation . . 362
Problem . . . . 362
Solution . . . . 363
Application. . 364
Impacts . . . . 364
Relationships. . . . 364
Case Study Example. . 365
UI Mediator. . . 366
Problem . . . . 366
Solution . . . . 367
Application. . 368
Impacts . . . . 369
Relationships. . . . 370
Case Study Example. . 370
CHAPTER 13: Service Security Patterns . . . 373
Case Study background 374
Exception Shielding . 376
Problem . . . . 376
Solution . . . . 377
Application. . 378
Impacts . . . . 379
Relationships. . . . 379
Case Study Example. . 380
Message Screening381
Problem . . . . 381
Solution . . . . 382
Application . 382
Impacts . . . . 384
Relationships. . . . 385
Case Study Example. . 385
Trusted Subsystem 387
Problem . . . . 387
Solution . . . . 388
Application. . 388
Impacts . . . . 391
Relationships. . . . 391
Case Study Example. . 392
Service Perimeter Guard 394
Problem . . . . 394
Solution . . . . 395
Application . 395
Impacts . . . . 396
Relationships. . . . 396
Case Study Example. . 397
CHAPTER 14: Service Contract Design Patterns . 399
Decoupled Contract . 401
Problem . . . . 401
Solution . . . . 402
Application. . 403
Impacts . . . . 405
Relationships. . . . 405
Case Study Example. . 407
Contract Centralization . 409
Problem . . . . 409
Solution . . . . 410
Application. . 410
Impacts . . . . 411
Relationships. . . . 411
Case Study Example. . 413
Contract Denormalization. . 414
Problem . . . . 414
Solution . . . . 415
Application. . 416
Impacts . . . . 417
Relationships. . . . 417
Case Study Example. . 418
Concurrent Contracts 421
Problem . . . . 421
Solution . . . . 422
Application. . 423
Impacts . . . . 425
Relationships. . . . 425
Case Study Example. . 426
Validation Abstraction 429
Problem . . . . 429
Solution . . . . 430
Application. . 431
Impacts . . . . 432
Relationships. . . . 432
Case Study Example. . 433
Chapter 15: Legacy Encapsulation Patterns . . . 439
Legacy Wrapper. . . 441
Problem . . . . 441
Solution . . . . 442
Application. . 443
Impacts . . . . 444
Relationships. . . . 444
Case Study Example. . 446
Multi-Channel Endpoint . . . 451
Problem . . . . 451
Solution . . . . 452
Application. . 453
Impacts . . . . 454
Relationships. . . . 454
Case Study Example. . 456
File Gateway . 457
Problem . . . . 457
Solution . . . . 458
Application. . 458
Impacts . . . . 459
Relationships. . . . 460
Case Study Example. . 461
CHAPTER 16: Service Governance Patterns. . . . . 463
Compatible Change465
Problem . . . . 465
Solution . . . . 466
Application. . 466
Impacts . . . . 469
Relationships. . . . 469
Case Study Example. . 470
Version Identification 472
Problem . . . . 472
Solution . . . . 473
Application. . 473
Impacts . . . . 474
Relationships. . . . 474
Case Study Example. . 475
Termination Notification . . . 478
Problem . . . . 478
Solution . . . . 479
Application. . 480
Impacts . . . . 480
Relationships. . . . 481
Case Study Example. . 481
Service Refactoring484
Problem . . . . 484
Solution . . . . 485
Application. . 485
Impacts . . . . 486
Relationships. . . . 486
Case Study Example. . 488
Service Decomposition . 489
Problem . . . . 489
Solution . . . . 491
Application. . 492
Impacts . . . . 492
Relationships. . . . 494
Case Study Example. . 495
Proxy Capability . . 497
Problem . . . . 497
Solution . . . . 498
Application. . 498
Impacts . . . . 500
Relationships. . . . 500
Case Study Example. . 501
Decomposed Capability . . . 504
Problem . . . . 504
Solution . . . . 506
Application. . 507
Impacts . . . . 507
Relationships. . . . 508
Case Study Example. . 508
Distributed Capability 510
Problem . . . . 510
Solution . . . . 511
Application. . 512
Impacts . . . . 513
Relationships. . . . 513
Case Study Example. . 514
PART IV: SERVICE COMPOSITION DESIGN PATTERNS
CHAPTER 17: Capability Composition Patterns . . 519
Capability Composition . . . 521
Problem . . . . 521
Solution . . . . 521
Application. . 523
Impacts . . . . 523
Relationships. . . . 523
Case Study Example. . 524
Capability Recomposition . 526
Problem . . . . 526
Solution . . . . 527
Application. . 527
Impacts . . . . 527
Relationships. . . . 529
Case Study Example. . 530
CHAPTER 18: Service Messaging Patterns. . 531
Service Messaging 533
Problem . . . . 533
Solution . . . . 533
Application. . 534
Impacts . . . . 534
Relationships. . . . 535
Case Study Example. . 536
Messaging Metadata 538
Problem . . . . 538
Solution . . . . 538
Application. . 539
Impacts . . . . 540
Relationships. . . . 541
Case Study Example. . 542
Service Agent 543
Problem . . . . 543
Solution . . . . 544
Application. . 544
Impacts . . . . 546
Relationships. . . . 546
Case Study Example. . 548
Intermediate Routing 549
Problem . . . . 549
Solution . . . . 551
Application. . 552
Impacts . . . . 553
Relationships. . . . 553
Case Study Example. . 556
State Messaging . . 557
Problem . . . . 557
Solution . . . . 558
Application. . 560
Impacts . . . . 561
Relationships. . . . 561
Case Study Example. . 562
Service Callback . . 566
Problem . . . . 566
Solution . . . . 568
Application. . 568
Impacts . . . . 570
Relationships. . . . 570
Case Study Example. . 571
Service Instance Routing . . 574
Problem . . . . 574
Solution . . . . 576
Application. . 576
Impacts . . . . 578
Relationships. . . . 578
Case Study Example. . 579
Asynchronous Queuing . . . 582
Problem . . . . 582
Solution . . . . 584
Application. . 584
Impacts . . . . 587
Relationships. . . . 588
Case Study Example. . 589
Reliable Messaging 592
Problem . . . . 592
Solution . . . . 593
Application. . 593
Impacts . . . . 594
Relationships. . . . 595
Case Study Example. . 596
Event-Driven Messaging 599
Problem . . . . 599
Solution . . . . 600
Application. . 602
Impacts . . . . 602
Relationships. . . . 602
Case Study Example. . 604
CHAPTER 19: Composition Implementation Patterns . . 605
Agnostic Sub-Controller 607
Problem . . . . 607
Solution . . . . 608
Application. . 610
Impacts . . . . 610
Relationships. . . . 610
Case Study Example. . 612
Composition Autonomy . . . 616
Problem . . . . 616
Solution . . . . 618
Application. . 619
Impacts . . . . 619
Relationships. . . . 620
Case Study Example. . 620
Atomic Service Transaction 623
Problem . . . . 623
Solution . . . . 624
Application. . 626
Impacts . . . . 626
Relationships. . . . 628
Case Study Example. . 629
Compensating Service Transaction . . 631
Problem . . . . 631
Solution . . . . 633
Application. . 633
Impacts . . . . 635
Relationships. . . . 635
Case Study Example. . 636
CHAPTER 20: Service Interaction Security Patterns . . 639
Data Confidentiality641
Problem . . . . 641
Solution . . . . 643
Application. . 643
Impacts . . . . 644
Relationships. . . . 645
Case Study Example. . 646
Data Origin Authentication. 649
Problem . . . . 649
Solution . . . . 650
Application. . 651
Impacts . . . . 652
Relationships. . . . 653
Case Study Example. . 653
Direct Authentication 656
Problem . . . . 656
Solution . . . . 657
Application. . 657
Impacts . . . . 658
Relationships. . . . 659
Case Study Example. . 660
Brokered Authentication 661
Problem . . . . 661
Solution . . . . 662
Application. . 663
Impacts . . . . 665
Relationships. . . . 665
Case Study Example. . 666
CHAPTER 21: Transformation Patterns . . . . 669
Data Model Transformation 671
Problem . . . . 671
Solution . . . . 672
Application. . 673
Impacts . . . . 674
Relationships. . . . 674
Case Study Example. . 677
Data Format Transformation . . . 681
Problem . . . . 681
Solution . . . . 681
Application. . 683
Impacts . . . . 683
Relationships. . . . 683
Case Study Example. . 685
Protocol Bridging . 687
Problem . . . . 687
Solution . . . . 688
Application. . 688
Impacts . . . . 690
Relationships. . . . 690
Case Study Example. . 692
PART V: SUPPLEMENTAL
CHAPTER 22: Common Compound Design Patterns . . . 697
“Compound” vs. “Composite” . . . 698
Compound Patterns and Pattern Relationships . . . 698
Joint Application vs. Coexistent Application. . . . . . 699
Compound Patterns and Pattern Granularity . . . . . 700
Orchestration. 701
Enterprise Service Bus . 704
Service Broker 707
Canonical Schema Bus . 709
Official Endpoint . . 711
Federated Endpoint Layer . 713
Three-Layer Inventory. 715
CHAPTER 23: Strategic Architecture Considerations. . 717
Increased Federation . 718
Increased Intrinsic Interoperability . . 721
Increased Vendor Diversification Options. . 723
Increased Business and Technology Alignment. . . 725
Increased ROI . 727
Increased Organizational Agility 728
Reduced IT Burden. 729
CHAPTER 24: Principles and Patterns at the
U.S. Department of Defense . 731
The Business Operating Environment (BOE) . . . . . 733
Principles, Patterns, and the BOE . . 734
Incorporation of Information Assurance (IA) . . 736
Adherence to Standards . 736
Data Visibility, Accessibility, and Understandability to
Support Decision Makers 736
Loosely Coupled Services 736
Authoritative Sources of Trusted Data 737
Metadata-Driven Framework for Separation from
Technical Details . 737
Support Use of Open Source Software . . . 738
Emphasize Use of Service-Enabled Commercial
Off-the-Shelf (COTS) Software . 738
Participation in the DoD Enterprise 738
Support Mobility — Users & Devices . . 738
The Future of SOA and the DoD 739
SOADoD.org . . 739
PART VI: APPENDICES
APPENDIX A: Case Study Conclusion 743
Cutit Saws Ltd. 744
Alleywood Lumber Company 744
Forestry Regulatory Commission (FRC) . . . 745
APPENDIX B: Candidate Patterns . . 747
APPENDIX C: Principles of Service-Orientation . . 749
Standardized Service Contract . 751
Service Loose Coupling 753
Service Abstraction . 755
Service Reusability . 756
Service Autonomy . . 758
Service Statelessness . 760
Service Discoverability 762
Service Composability 764
APPENDIX D: Patterns and Principles
Cross-Reference . . . 767
APPENDIX E: Patterns and Architecture Types
Cross-Reference . . . 775
About the Author . . . 783
About the Contributors . 784
Index of Patterns . . . 791
Index . 795
Thomas Erl is a best-selling IT author and founder of CloudSchool.com™ andSOASchool.com®. Thomas has been the world's top-selling service technology author for over five years and is the series editor of the Prentice Hall Service Technology Series from Thomas Erl (www.servicetechbooks.com ), as well as the editor of the Service Technology Magazine (www.servicetechmag.com). With over 175,000 copies in print world-wide, his eight published books have become international bestsellers and have been formally endorsed by senior members of major IT organizations, such as IBM, Microsoft, Oracle, Intel, Accenture, IEEE, HL7, MITRE, SAP, CISCO, HP, and others.
Four of his books, Cloud Computing: Concepts, Technology & Architecture, SOA Design Patterns, SOA Principles of Service Design, and SOA Governance, were authored in collaboration with the IT community and have contributed to the definition of cloud computing technology mechanisms, the service-oriented architectural model and service-orientation as a distinct paradigm. Thomas is currently working with over 20 authors on several new books dedicated to specialized topic areas such as cloud computing, Big Data, modern service technologies, and service-orientation.
As CEO of Arcitura Education Inc. and in cooperation with CloudSchool.com™ andSOASchool.com®, Thomas has led the development of curricula for the internationally recognized SOA Certified Professional (SOACP) and Cloud Certified Professional (CCP) accreditation programs, which have established a series of formal, vendor-neutral industry certifications.
Thomas is the founding member of the SOA Manifesto Working Group and author of the Annotated SOA Manifesto (www.soa-manifesto.com). He is a member of the Cloud Education & Credential Committee, SOA Education Committee, and he further oversees theSOAPatterns.org and CloudPatterns.org initiatives, which are dedicated to the on-going development of master pattern catalogs for service-oriented computing and cloud computing.
Thomas has toured over 20 countries as a speaker and instructor for public and private events, and regularly participates in international conferences, including SOA, Cloud + Service Technology Symposium and Gartner events. Over 100 articles and interviews by Thomas have been published in numerous publications, including the Wall Street Journal and CIO Magazine.
![]() |
Ask a Question About this Product More... |
![]() |