CORBA 2.3.3 Programmer's Guide for C++ (NonStop CORBA 2.3.3+)
Table Of Contents
- CORBA 2.3.3 Programmer's Guide for C++
- Legal Notice
- Contents
- About This Guide
- Chapter 1. Introduction to NonStop CORBA Programming
- Chapter 2. NonStop CORBA Administrative Environment
- Chapter 3. Compiling and Building an Application
- Chapter 4. Deploying a NonStop CORBA Application
- Chapter 5. Tracing and Debugging Applications
- Chapter 6. Writing Scalable Applications
- Chapter 7. Managing Transactions
- Chapter 8. Writing Multithreaded Applications
- Chapter 9. Designing Advanced Applications
- Chapter 10. Porting CORBA Applications to NonStop CORBA
- Chapter 11. Writing Wrappers for Legacy Clients and Servers
- Appendix A. Architectural Walkthrough
- Appendix B. Object References
- Appendix C. Servant Reference Counting in NonStop CORBA
- Index

In this figure, the application starts a debit/credit transaction on System A. The debit account is held on
System B and the credit account is held on System C. System D has an object that requires input from
both debits and credits (in this case a Bank Vault Account that tracks debits and credits). The problem
occurs when Systems B and C attempt to write to the Bank Vault object on System D. At that time, one
write operation might be locked out by the other. The transaction monitor at that point doesn't know to
end or cancel the transaction, because it doesn't see the interactions between B, C, and D. D doesn't know
that both attempts to write to it belong to one transaction.
You can avoid diamond access by changing the distribution of the application across systems. For
example, if Systems B and C were the same system, the problem would be avoided.
Another solution is to set a timeout for the transactions in these complex situations, using the
CosTransactions::Current::set_timeout() operation. Although the problem can still
occur, the blocking transaction times out after the specified interval, and the block is then lifted.