[ 
https://issues.apache.org/jira/browse/GERONIMO-5256?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Simon Godik updated GERONIMO-5256:
----------------------------------

    Attachment: geronimo-wadi-cl-bug.logs.tar.gz
                geronimo-wadi-cl-bug-war.tar.gz

test application and logs attached

> in special cases wadi clustering thread fails to load web application classes
> -----------------------------------------------------------------------------
>
>                 Key: GERONIMO-5256
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-5256
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>    Affects Versions: 2.1.4
>         Environment: redhat 5.4, suse 11.2
>            Reporter: Simon Godik
>         Attachments: geronimo-wadi-cl-bug-war.tar.gz, 
> geronimo-wadi-cl-bug.logs.tar.gz
>
>
> If object placed in a http session implements java.io.Externalizable and is 
> loading web-app specific classes from the readExternal() method with the 
> thread context classloader (which is 
> org.apache.geronimo.configs/wadi-clustering/2.1.4/car classloader) class 
> loading fails. This happens on the receiving side when session is replicated 
> from the owning cluster member to the peer cluster member over wadi transport 
> and is consumed by the wadi thread.
> This came about because some web frameworks load classes from the 
> readExternal() method with TC classloader.
> I have a fix for this but it is not generic, so I'm not submitting it.
> Not sure how to attach files, so code and logs below:
> Code and log below.
>       public void readExternal(ObjectInput in) throws IOException, 
> ClassNotFoundException {
>               this.state = (String) in.readObject();
>               
>               try {
>                       Class<?> clazz = 
> Thread.currentThread().getContextClassLoader().loadClass("org.bpma.cluster.VerySpecial");
>                       this.verySpecial = (VerySpecial) clazz.newInstance();
>                       this.verySpecial.setHello("hello, very special!!!");
>                       
>                       System.out.println("VERY-SPECIAL LOADED FROM THE 
> TC-CL");
>                       System.out.flush();
>               } catch (InstantiationException e) {
>                       e.printStackTrace();
>               } catch (IllegalAccessException e) {
>                       e.printStackTrace();
>               }
>       }
> Caused by: org.codehaus.wadi.core.WADIRuntimeException: 
> java.lang.ClassNotFoundException: org.bpma.cluster.VerySpecial in classloader 
> org.apache.geronimo.configs/wadi-clustering/2.1.4/car
>         at 
> org.codehaus.wadi.replication.manager.basic.SessionStateHandler.resto
> reFromFullState(SessionStateHandler.java:78)
>         at 
> org.codehaus.wadi.replication.storage.memory.SyncMemoryReplicaStorage
> .mergeCreate(SyncMemoryReplicaStorage.java:83)
>         ... 20 more
> Caused by: java.lang.ClassNotFoundException: org.bpma.cluster.VerySpecial in 
> cla
> ssloader org.apache.geronimo.configs/wadi-clustering/2.1.4/car
>         at 
> org.apache.geronimo.kernel.config.MultiParentClassLoader.loadOptimize
> dClass(MultiParentClassLoader.java:438)
>         at 
> org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClass(Mu
> ltiParentClassLoader.java:280)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>         at org.bpma.cluster.TcLoading.readExternal(TcLoading.java:35)
>         at 
> java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:179
> 2)
>         at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
> 751)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
>         at 
> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:19
> 47)
>         at 
> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
>         at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
> 753)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
>         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
>         at 
> org.codehaus.wadi.core.session.DistributableAttributesMemento.readExt
> ernal(DistributableAttributesMemento.java:36)
>         at 
> org.codehaus.wadi.core.session.DistributableSessionMemento.readExtern
> al(DistributableSessionMemento.java:31)
>         at 
> org.codehaus.wadi.core.eviction.SimpleEvictable.readExternal(SimpleEv
> ictable.java:91)
>         at org.codehaus.wadi.core.util.Utils.setContent(Utils.java:78)
>         at 
> org.codehaus.wadi.replication.manager.basic.SessionStateHandler.resto
> reFromFullState(SessionStateHandler.java:76)
>         ... 21 more

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to