Currently in the QpidRASessionFactoryImpl when a session is closed we call _sessions.remove(Session) to remove the Session from the HashSet. This HashSet is used to ensure that we conform to J2EE1.4 6.6 spec where only one session can be created for a connection in a JEE environment. Being that HashSet uses the equals() method to determine if the object is in the set, this does not work for application servers that Proxy the session. As such, the underlying session is never removed from the HashSet and attempting any other operation on the connection fails being that the adapter thinks that multiple sessions exist. Since we only use the HashSet to prevent multiple session creation, we should call _sessions.clear() on a close to ensure the correct behavior.
Also, any direct use of QpidRASessionImpl should be refactored to use the QpidRASession interface rather than the Impl class as this will cause ClassCastExceptions when used with a Proxy.