we are having the same problem. Do you resolve it? How?
Unfortunately we received no help with this problem. We checked all connections and objects were being closed and destroyed and still the sockets on each MDB remained.
The only solution for us was to move these tasks away from the MDB to a servlet which received the object, fired off a new Thread and processed the object in the Thread destroying the Thread when it was finished.
It works well for us but what would have worked better would have been a solution in an existing framework (rant, rant, rant - lol).