| Foreword | p. xvii |
| Preface | p. xix |
| Transaction Models | |
| Fundamental Concepts | p. 3 |
| Object-Orientation | p. 3 |
| Base Principles | p. 3 |
| Concepts | p. 4 |
| Object-Oriented Programming | p. 5 |
| Evolution of Object-Oriented Programming | p. 6 |
| Objects | p. 7 |
| Classes | p. 7 |
| Inheritance | p. 7 |
| Polymorphism | p. 8 |
| Interactions | p. 8 |
| Preconditions, Postconditions and Invariants | p. 9 |
| Aspect-Orientation | p. 9 |
| Concurrency | p. 11 |
| Nature of Concurrent Systems | p. 11 |
| Concurrency and Object-Oriented Programming | p. 12 |
| Direct Communication | p. 13 |
| Communication via Shared Passive Objects | p. 14 |
| Deadlocks and Starvation | p. 15 |
| Fault Tolerance | p. 16 |
| Terminology | p. 16 |
| Fault Classification | p. 17 |
| Failure Semantics | p. 18 |
| Redundancy | p. 19 |
| Error Processing | p. 19 |
| System Structuring for Fault Tolerance | p. 20 |
| Exceptions | p. 21 |
| Exception Handling in Concurrent Systems | p. 23 |
| Persistence | p. 24 |
| Persistence and Programming Languages | p. 25 |
| Transaction Models | p. 27 |
| Atomic Units of System Structuring | p. 28 |
| Atomic Units and Exception Handling | p. 28 |
| Competitive and Cooperative Structuring Units | p. 29 |
| Competitive World: Transactions and Derivatives | p. 29 |
| Flat Transactions | p. 31 |
| Flat Transactions with Savepoints | p. 32 |
| Chained Transactions | p. 34 |
| Nested Transactions | p. 34 |
| Recoverable Communicating Actions | p. 39 |
| Sagas | p. 39 |
| OASIS Business Transactions | p. 40 |
| Collaborative World: Conversations and Derivatives | p. 41 |
| Conversations | p. 41 |
| Atomic Actions | p. 42 |
| Combining Cooperative and Competitive Concurrency | p. 44 |
| Multithreading inside Transactions | p. 44 |
| Multithreaded Transactions | p. 45 |
| Coordinated Atomic Actions | p. 47 |
| Open Multithreaded Transactions | p. 51 |
| Motivations | p. 51 |
| Requirements | p. 52 |
| Integration Requirements | p. 52 |
| Guaranteeing the ACID Properties | p. 53 |
| Analysis of Existing Models | p. 54 |
| Open Multithreaded Transactions | p. 55 |
| Starting an Open Multithreaded Transaction | p. 56 |
| Joining an Open Multithreaded Transaction | p. 56 |
| Concurrency Control in Open Multithreaded Transactions | p. 57 |
| Ending an Open Multithreaded Transaction | p. 57 |
| Exception Handing in Open Multithreaded Transactions | p. 59 |
| Classification of Exceptions | p. 59 |
| Internal Exceptions | p. 59 |
| External Exceptions | p. 60 |
| Additional Considerations | p. 61 |
| Closing an Open Multithreaded Transaction | p. 61 |
| Naming an Open Multithreaded Transaction | p. 62 |
| Deserters | p. 63 |
| Transactional Objects | p. 63 |
| Exception Resolution | p. 64 |
| Open Multithreaded Transactions as Firewalls for Errors | p. 65 |
| Comparison | p. 66 |
| The Optima Framework | |
| Overall Design | p. 71 |
| General Considerations | p. 71 |
| Design Patterns | p. 72 |
| The Abstract Factory Design Pattern | p. 72 |
| The Strategy Design Pattern | p. 74 |
| The Serializer Design Pattern | p. 75 |
| Optima Framework Design Overview | p. 77 |
| Transaction Support | p. 78 |
| Concurrency Control | p. 78 |
| Recovery | p. 79 |
| Transaction Support | p. 81 |
| States of an Open Multithreaded Transaction | p. 81 |
| Synchronizing Participant Exit | p. 82 |
| Monitoring Accesses to Transactional Objects | p. 82 |
| Handling Nesting | p. 83 |
| The Transaction Hierarchy | p. 83 |
| Handling Named Transactions | p. 84 |
| Concurrency Control | p. 85 |
| Handling Cooperative Concurrency | p. 86 |
| Handling Competitive Concurrency | p. 86 |
| Pessimistic Concurrency Control | p. 86 |
| Optimistic Concurrency Control | p. 88 |
| Encapsulating Different Concurrency Control Strategies | p. 89 |
| Concurrency Control Information for Operations | p. 90 |
| Strict Concurrency Control | p. 91 |
| Semantic-Based Concurrency Control | p. 91 |
| Commutativity | p. 92 |
| Encapsulating Operation Concurrency Control Information | p. 94 |
| Recovery | p. 97 |
| Global Design | p. 98 |
| Persistence Support | p. 98 |
| Classification of Storage Devices | p. 99 |
| Object Serialization | p. 103 |
| Identification of Transactional Objects | p. 104 |
| Storage Management | p. 105 |
| Caching Support | p. 106 |
| Cache Fetch Algorithm | p. 107 |
| Cache Replacement Algorithm | p. 107 |
| Extensible Cache Design | p. 108 |
| Consequences of Caching | p. 109 |
| Logging | p. 109 |
| Encapsulating Logging Techniques | p. 111 |
| Encapsulating Log Information | p. 111 |
| Recovery Support | p. 112 |
| Recovery Strategies | p. 112 |
| Encapsulating Recovery Strategies | p. 113 |
| Undo/NoRedo Recovery Algorithms | p. 115 |
| NoUndo/Redo Recovery Algorithms | p. 116 |
| Undo/Redo Recovery Algorithms | p. 117 |
| Interfacing with Programming Languages | p. 119 |
| Associating Participants with a Transaction | p. 120 |
| Encapsulating Objects | p. 121 |
| The Transactional Object | p. 121 |
| Handling Durability | p. 123 |
| Encapsulating Operation Invocations on Data Objects | p. 123 |
| Tying Things Together | p. 125 |
| In-place Update and Deferred Update | p. 126 |
| Trace of an Operation Invocation | p. 128 |
| Initializing and Shutting Down the Transaction Support | p. 129 |
| Providing Transactions at the Programming Language Level | p. 130 |
| Procedural Interface | p. 130 |
| Object-Based Interface | p. 133 |
| Object-Oriented Interface | p. 135 |
| Aspect-Oriented Interface | p. 136 |
| Comments on a Potential Reflective Interface | p. 139 |
| Optima Implementation | |
| Ada 95 | p. 143 |
| Ada 83 vs. Ada 95 | p. 143 |
| Object-Oriented Programming in Ada | p. 144 |
| Controlled Types | p. 146 |
| Concurrency in Ada | p. 147 |
| Tasks | p. 147 |
| Task Identification | p. 147 |
| Task Attributes | p. 148 |
| The Rendezvous | p. 148 |
| Protected Types | p. 149 |
| Asynchronous Transfer of Control | p. 152 |
| Integration of Concurrency and Object-Orientation in Ada | p. 153 |
| Extensible Protected Types | p. 153 |
| Distributed Systems in Ada | p. 156 |
| Remote Procedure Calls | p. 157 |
| Distributed Objects | p. 159 |
| Fault Tolerance in Distributed Ada | p. 159 |
| Exceptions in Ada | p. 159 |
| The Package Ada. Exceptions | p. 161 |
| Persistence in Ada | p. 162 |
| Implementation for Ada 95 | p. 165 |
| Implementing the Framework | p. 165 |
| Objects | p. 165 |
| Concurrency Control | p. 167 |
| Persistence | p. 170 |
| Initializing and Shutting Down the Transaction Support | p. 173 |
| Transaction Framework Interfaces for Ada 95 | p. 174 |
| Transaction Identifier Management | p. 174 |
| Encapsulating Data Objects | p. 175 |
| Procedural Interface | p. 176 |
| Object-Based Interface | p. 179 |
| Object-Oriented Interface | p. 182 |
| Aspect-Oriented Interface | p. 184 |
| Related Work | p. 195 |
| Argus | p. 195 |
| Camelot and Avalon | p. 198 |
| Arjuna | p. 201 |
| Venari / ML | p. 203 |
| Transactional Drago | p. 204 |
| PJama | p. 205 |
| Isis | p. 206 |
| CORBA Object Transaction Service | p. 207 |
| Enterprise Java Beans | p. 209 |
| Case Study | |
| Online Auction System | p. 217 |
| Requirements | p. 217 |
| Application Design | p. 221 |
| Implementation | p. 227 |
| Bibliography | p. 241 |
| Author and Citation Index | p. 263 |
| Index | p. 273 |
| Table of Contents provided by Ingram. All Rights Reserved. |