Concluding TheyWillNotListen:
I thought I'd let everyone know what happened. We eventually convinced the client to use Oracle running under Solaris. This took some pushing by IBM as well; they finally admitted the mainframe wasn't going to do what we wanted. We created our own in-memory object cache fronted by some simple RMI (Remote Method Invocation) objects to eliminate repeated queries against the mainframe DB2 database. We devised a simple, yet effective, cache control policy that allowed us to trigger cache refreshes when we needed them or on a schedule.
In the end, we went from getting no better than ten TPS (transactions per second) to over 300 in one test configuration. The system currently does, on average, 100 TPS. These numbers refer to the main trade clearing system. The user interface took some additional effort, but we eventually got sub-second queries 85% of the time with around 100 users.
My contract ended with this client in June of last year. One of the employees there tells me the system has been running flawlessly in production since that time.
A few IT managers at this client were not happy with our solutions to their problem. I'm informed that there are constant attempts to discredit the work we did, even though the customer is thoroughly thrilled with the system. I'm also told our system, so far, has the best support record of any application ever deployed at this company - mainframe or otherwise. It simply never has a problem.
The answer I was searching for here was always right in front of me. Just do what had to be done. Sometimes you just have to force an issue, and if that results in a project blowing up in your face, ... well, so be it. In this case, it worked out well for all involved.
-- JeffPanici