Wednesday, July 16, 2008

JDK1.4 & WL10.1 backward compatability

We needed to support JDK1.4 clients connecting to WL 10.1 which is JDK 1.5. But ran into run time error,

java.lang.IncompatibleClassChangeError: Implementing class
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:476)
weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:181)
java.lang.ClassLoader.loadClass(ClassLoader.java:289)
java.lang.ClassLoader.loadClass(ClassLoader.java:235)
weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:223)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:476)
weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:181)
java.lang.ClassLoader.loadClass(ClassLoader.java:289)
java.lang.ClassLoader.loadClass(ClassLoader.java:235)
weblogic.utils.classloaders.GenericClassLoader.findOrCreateSingleSourceClass(GenericClassLoader.java:640)
weblogic.rmi.internal.StubGenerator.getStubOnClient(StubGenerator.java:782)
weblogic.rmi.internal.StubGenerator.getStubClass(StubGenerator.java:758)
weblogic.rmi.internal.StubGenerator.generateStub(StubGenerator.java:803)
weblogic.rmi.internal.StubGenerator.generateStub(StubGenerator.java:790)
weblogic.rmi.extensions.StubFactory.getStub(StubFactory.java:79)
weblogic.rmi.utils.io.RemoteObjectReplacer.resolveObject(RemoteObjectReplacer.java:237)
weblogic.rmi.internal.StubInfo.readResolve(StubInfo.java:142)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:925)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1655)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
weblogic.common.internal.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:119)
weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:112)
weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:56)
weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:159)
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:285)
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)
weblogic.jndi.internal.ServerNamingNode_812_WLStub.lookup(Unknown Source)
weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:343)
weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:336)
javax.naming.InitialContext.lookup(InitialContext.java:347)

There was not any documentation about backward compatability in WL. Then found that weblogic.jar of WL8.1SP2 has this problem. But with webloigc.jar WL8.1SP4 just worked fine. So in case needed just play with different version of weblogic jars :)