Regarding the deployment location, you're right, it's unusual, but it's a
legacy application.

I found out the reason for the class not being visible. There was a Context
element with docBase defined in server.xml which I hadn't noticed. Nesting
the Manager element inside that (rather than in context.xml) solved the
issue.



On Tue, May 12, 2020 at 9:45 PM Mark Thomas <ma...@apache.org> wrote:

> On 12/05/2020 18:38, Jonathan Yom-Tov wrote:
> > I'm trying to use PersistentManager with FileStore to load sessions from
> > disk. Serialization goes ok but when the session is loaded I get an
> > exception deserializing one of my application's classes.
> >
> > [2020-05-12 09:08:52] [SEVERE] Session:
> > 6325A48BA1D2FC79105C7F4B0A76CB74.worker1;
> > java.lang.ClassNotFoundException: com.mycompany.MyClass
> >         at
> >
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
> >         at
> >
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
> >         at java.lang.Class.forName0(Native Method)
> >         at java.lang.Class.forName(Class.java:348)
> >         at
> >
> org.apache.catalina.util.CustomObjectInputStream.resolveClass(CustomObjectInputStream.java:159)
> >         at
> > java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
> >         at
> > java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
> >         at
> > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
> >         at
> > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
> >         at
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
> >         at
> >
> org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1576)
> >         at
> >
> org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1048)
> >         at org.apache.catalina.session.FileStore.load(FileStore.java:234)
> >
> > Looking into the classpath when the exception occurs I see that every jar
> > in ${catalina.base}/lib is loaded plus those explicitly mentioned in the
> > run command, but none of my application's jars.
>
> That is as expected. You want to look at the WebappClassLoader instance.
> Is that pointing to the right web application? If not, why not? Pay
> particular attention to the state field.
>
> > My application is deployed
> > in ${catalina.base}/myapp/. I tried to add a ${catalina.base}/myapp/
> > META-INF/context.xml file, but that wasn't loaded.
>
> That is an odd location. Why not in webapps?
>
> > Then I tried to add
> > <Resources>
> >
> >      <JarResources
> > className="org.apache.catalina.webresources.JarResourceSet"
> > base="${catalina.base}/mycompany/WEB-INF/lib/my.jar" webAppMount="/" />
> > </Resources>
>
> That should never be necessary.
>
> > to context.xml but that didn't help either. It makes sense that Tomcat is
> > separating my application from the rest of the classpath but then how do
> I
> > include the required class?
>
> If the correct web application class loader is picked up, is should just
> work.
>
> Mark
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to