JMS strange problem
I have a problem in a system where ~500 servers are communicating with central server through JMS over ~1000 topics. It's a 10 year old system and it worked good until few months ago.
In the last 3 months I had these types of errors:
central server can't deserialize Integer because Integer in the message has wrong SerialVersionID
Deserialize messag开发者_C百科e failed. - cause: java.io.InvalidClassException: java.lang.Integer; local class incompatible: stream classdesc serialVersionUID = 1360651450463909473, local class serialVersionUID = 1360826667806852920
central server can't deserialize unknown class
Deserialize message failed. - cause: java.lang.ClassNotFoundException: No ClassLoaders found for: javnteger.Integer
JMS tries to instantiate Number class which is abstract
Caught JVM Error: java.lang.InstantiationError: java.lang.Number
For all errors problem is localized in one random topic. If messages from that topic are deleted and sent again from servers everything went ok.
I'm suspecting JMS hardware. HDD is ok. We need to test memory and I don't know where to look next.
Anyone has any suggestion?
It's not a JVM issue. Back at least as far as JDK 1.2 (actually back to 1.0.2 if you believe the comment in the java.lang.Integer source distributed with the JDK), Integer's serialVersionUID has been "1360826667806852920L", which matches your "local class" version. They've never changed it in order to preserve backward compatibility. That fact combined with the "ClassNotFoundException: javnteger.Integer" (should be java.lang.Integer) points unmistakably to data corruption. Either a sender, a receiver, or the network itself is corrupting messages. Bad RAM would seem a likely culprit, especially if it's only intermittent and seldom. If it were the network, it would probably happen more often and be less predictable.
精彩评论