PQ68468: INTERMITTENT DE-SERIALIZATION FAILURE ON RETURNING INTERFACE

 A fix is available

PQ68468; 4.0.3: CORBA.MARSHAL error causes some client EJB threads to fail



APAR status
Closed as program error.

Error description
Customer uses VAJ 3.5.3. having a serious problem when calling a
stateless session bean from multiple client threads. When some
of them receive the result of the remote call, an exception
CORBA.MARSHAL is thrown. The description is "Unable to read
value from underlying bridge". The minor code is 0 and the
completion status - No.
.
Our result class contains a member that is interface ( in the
specified case the actual referenced object is a HashMap).
Customer noticed that during deserialization of the result
in method com.ibm.rmi.io.IIOPInputStream.inputClassFields
(Object, Class, ObjectStreamField  !,CodeBase) sometimes the Has
calling
  objectValue = orbStream.read_value(type);
in case 2 of the last switch(callType) of the method.
The exception is thrown when a different choice is made and
the HashMap is de-serialized calling
  objectValue = Utility.readAbstractAndNarrow(orbStream,type)
in case 1 of the same switch.
.
The choice is made in the callosc.isAbstractInterface().
When the result is false( cust thinks this IS a correct result)
the deserialization is successful. .
Sometimes the result is true, the deserialization continues
in the wrong path and some exception is thrown ((different in
different tests - e.g. OutOfMemory). Later it is transformed
into CORBA.MARSHAL.
Local fix Problem summary
****************************************************************
* USERS AFFECTED: All WebSphere Application Server users of    *
*                 multiple threaded EJB client applications    *
****************************************************************
* PROBLEM DESCRIPTION: Some of the threads, in a multiple      *
*                      thread EJB client, are failing with     *
*                      CORBA.Marshaling exceptions.            *
****************************************************************
* RECOMMENDATION:                                              *
****************************************************************
Some of the client threads running inside a multiple threaded
EJB client application may experience org.omg.CORBA.MARSHAL:
Unable to read value from underlying bridge exceptions.

Example of exception stack:

com.ibm.CORBA.iiop.ClientDelegate invoke(CORBA.Object,
OutputStream)
org.omg.CORBA.MARSHAL: Unable to read value from underlying
bridge
at
com.ibm.rmi.iiop.CDRInputStream.read_value(CDRInputStream.java
Problem conclusion
The problem is the interaction of the methods
isAbstractInterface() and computeAbstract() in
com.ibm.rmi.io.ObjectStreamClass. There is a race condition.
The latter is synchronized, its only caller
(the former method) is not. isAbstractInterface()
acts as a control method optimizing the call to the compute
method.  This is done using a local variable to decide whether
to do the computation which is set after the first invocation
(to save doing the computation again). To resolve the problem,
the synchronized block was moved to an outer scope to avoid
the race condition.  It is possible that a first thread
enters the synchronized compute method and before it
has set the result variable, another thread calls into the
isAbstractInterface() which then, noticing the control variable
is set it does not invoke the synchronized compute method but
simply returns the result variable (which has not been set yet)
The default for which is ' true'. i.e. there is a 50%
likelihood that this is the correct result.
Temporary fix Comments
APAR information
APAR number PQ68468
Reported component name WEBSPHERE AE AI
Reported component ID 5630A2200
Reported release 400
Status CLOSED PER
PE NoPE
HIPER NoHIPER
Submitted date 2002-11-21
Closed date 2002-12-10
Last modified date 2002-12-10

APAR is sysrouted FROM one or more of the following:

APAR is sysrouted TO one or more of the following:

Modules/Macros
ORB          

SRLS

Fix information
Fixed component name WEBSPHERE AE AI
Fixed component ID 5630A2200

Applicable component levels
R400 PSY    UP


Document Information


Product categories: Software > Application Servers > Distributed Application & Web Servers > WebSphere Application Server > General
Operating system(s):
Software version: 400
Software edition:
Reference #: PQ68468
IBM Group: Software Group
Modified date: Dec 10, 2002