The ServerAddress is not a function of HA/non-HA and is a valid key. The problem is that the PooledInvokerProxy keeps a reference to the pool for the first ServerAddress that results in a connection lookup. What should happen is that the connection pool is looked up each time, and the ClientSocket should know what pool its associated with.
I agree that change for JBAS-2500 could have been better (and think adding pooling over the different clients should be added back in). However, I don't see this as being a major issue because the client pool populated as needed (meaning if only make one call on the client, only one connection in the pool). The pool only grows when making concurrent calls using the same client. Biggest problem is that if do have a burst of concurrent calls on the client, those connections stored in the pool won't go away till there is a timeout on the connection.
I noticed you assigned to yourself. Do you want to handle it or can I take it?
It is not just concurrent access that causes the problem. If I just have a loop creating ejbs I create a connection per loop iteration. There is no pooling which is what a user reported. I'm in the middle of the change so I'll do it.