Fix (APAR): IZ03241 Status: Fix Release: WebSphere Business Integration Server Foundation 5.1.1.6 Operating System: All Supersedes Fixes: None. CMVC Defect: IZ03241 Byte size of APAR: 66,855 Date: 08/20/2007 Abstract: Remove deserialization problem after WebSphere MQ upgrade 1) Symptom: -------- After upgrading from WebSphere MQ 5.3 to WebSphere MQ 6.0, the following exception might be found in SystemOut.log ExceptionUtil E CNTR0020E: Non-application exception occurred while processing method "onMessage" on bean "BeanId(XYZ , com.ibm.bpe.framework.ProcessEntityPrimaryKey@f0f1173c)". Exception data: com.ibm.bpe.api.ProcessError: Error during Deserialization java.io.InvalidClassException: com.ibm.mq.jms.MQDestination; local class incompatible: stream classdesc serialVersionUID = 7476731226262433706, local class serialVersionUID = -648906405979968516 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java(Compiled Code)) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java(Inlined Compiled Code)) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java(Inlined Compiled Code)) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java(Compiled Code)) at java.io.ObjectInputStream.readObject(ObjectInputStream.java(Compiled Code)) at com.ibm.bpe.util.SerializerDeserializer.deserialize(SerializerDeserializer.java(Compiled Code)) at com.ibm.bpe.util.SerializerDeserializer.deserialize(SerializerDeserializer.java(Compiled Code)) at com.ibm.bpe.database.TomObjectBase.deserializedObject(TomObjectBase.java(Inlined Compiled Code)) at com.ibm.bpe.database.RequestInstanceB.getReplyContext(RequestInstanceB.java(Compiled Code)) at com.ibm.bpe.engine.BpelActivityKindReply.doActivate(BpelActivityKindReply.java:219) ............................................... 2) Problem: -------- When a long running process receives a request via JMS, it stores the JMSReplyTo Destination in the database in order to be able to send the reply back to the correct destination once the reply activity is executed. The problem occurs, if a JMSReplyTo destination has been stored in the database with WebSphere MQ version 5.3, and then WebSphere MQ was upgraded to version 6.0 before the JMSReplyTo destination has been retrieved from the database. The reason for this is, that the serialized versions of class com.ibm.mq.jms.MQDestination are not compatible between MQ versions 5.3 and 6.0. 3) Solution -------- This fix solves the problem by introducing a new ClassLoader which uses the correct class file to deserialize destinations. In order to make the fix work, you have to do the following: a.) Install the fix as described below. b.) In addition, you have to place that version of the com.ibm.mqjms.jar file with which the destination was serialized into the 'etc' subdirectory of the WebSphere install directory. The com.ibm.mqjms.jar file is found in the java\lib subdirectory of the WebSphere MQ installation directory. As an example, assume you installed WebSphere under Windows to c:\WebSphere\AppServer, and you used WebSphere MQ V 5.3 to store the JMSReplyTo Destination into the database. Then you upgraded to WebSphere MQ V 6.0 and now you experience the symptom described above. To resolve the problem, you have to install this fix. Then you have to take com.ibm.mqjms.jar from the subdirectory java\lib of the installation directory of WebSphere MQ 5.3 (that's the MQ version with which the JMSReplyTo destination was stored in the database) and place this jar file into directory c:\WebSphere\AppServer\etc. After restarting the server, the problem should be solved. Directions to apply fix: 1) Create temporary "Fix" directory to store the jar file: UNIX: /tmp/WebSphere/Fix Windows: c:\temp\WebSphere\Fix 2) Copy jar file to the directory 3) Shutdown WebSphere 4) Follow the Fix installation instructions that are packaged with the Update Installer on how to install the Fix. 5) Restart WebSphere 6) The temp directory may be removed. Directions to remove a Fix: NOTE: FIXES MUST BE REMOVED IN THE ORDER THEY WERE APPLIED. DO NOT REMOVE A FIX UNLESS ALL FIXES APPLIED AFTER IT HAVE FIRST BEEN REMOVED. YOU MAY REAPPLY ANY REMOVED FIX. Example: If your system has fix1, fix2, and fix3 applied in that order and fix2 is to be removed, fix3 must be removed first, fix2 removed, and fix3 re-applied. 1) Shutdown WebSphere 2) Follow the instructions that are packaged with the Update Installer on how to uninstall the Fix. 3) Restart WebSphere