PQ68468; 4.0.3: CORBA.MARSHAL error causes some
client EJB threads to fail
Downloadable files
Abstract
Intermittent deserialization failure on returning
interface.
Download Description
PQ68468 will resolve the following problem:
USERS AFFECTED:
All WebSphere® Application Server users of multi-threaded EJB™ client
applications
PROBLEM DESCRIPTION:
Some of the threads in a multi-thread EJB client are failing with
CORBA.Marshaling exceptions. Some of the client threads running inside a
multi-threaded EJB client application may produce the following error:
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 computeAbstract() method is synchronized, while the
isAbstractInterface() 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 in order to prevent performing 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 yet been set), the default for which is ' true'. In other words,
there is a 50% likelihood that this is the correct result.
Prerequisites
None
Installation instructions
Please review the readme.txt for detailed installation
instructions.