Re: Tomee 10.0.21 Class cast Exception when undeploying application with @PostConstruct LifeCycle

Rob Leland <[email protected]>
Newsgroups gmane.comp.java.openejb.user
Message-ID <CAG9SN=tTCg9BFC2EaL-AmdBCLYVmqbEevwYp+Yo5RHbNQPT9RQ@mail.gmail.com>
Thanks, that was the key to fixing the application which now works!

However: I am still seeing the same exception when stopping tomcat:

java.lang.ClassCastException: class java.io.ObjectStreamClass$Caches$1
cannot be cast to class java.util.Map (java.io.ObjectStreamClass$Caches$1
and java.util.Map are in module java.base of loader 'bootstrap


I tried this under both Java 11 & 17 with the same result....






On Fri, Sep 2, 2022 at 6:35 PM Cesar Hernandez <[email protected]> wrote:

> Hi Rod,
>
> I would assume you are using TomEE 9. x milestone release because you are
> using the Jakarta namespace. If this is not the case, you can find the
> latest TomEE 9.x.x-M  release here https://tomee.apache.org/download.html
>
> Indeed your app packaging seems to be missing the actual servlet class, a
> tree command to the exploited .war does not show the class file for
> LoggerServlet.java at all.
>
> ch3-03-slsb-servlet-1.0.0 tree
> .
> ├── META-INF
> │   ├── MANIFEST.MF
> │   └── maven
> │       └── apress.jakarta.persistence.ee10
> │           └── ch3-03-slsb-servlet
> │               ├── pom.properties
> │               └── pom.xml
> └── WEB-INF
>     ├── classes
>     └── lib
>         ├── ch3-02-slsb-model-1.0.0.jar
>         ├── derby-10.14.2.0.jar
>         ├── derbyclient-10.14.2.0.jar
>         └── derbytools-10.14.2.0.jar
>
> 7 directories, 7 files
>
>
>
> El vie, 2 sept 2022 a las 15:49, Rob Leland (<[email protected]>)
> escribió:
>
> > Summary:
> >
> > I am seeing the Class cast Exception shown at the bottom when stopping
> the
> > container.
> > The tomee profile I downloaded seems to have the required EE jars under
> > tomee/lib.
> >
> > I tried the code on GlassFish 6.2.5 and did not see this error.
> >
> >
> > Note:
> > The  code I am working  with is 2  classes, see below, is from a Book on
> > Jakarta Persistence.
> > There may be come issues with the code itself since the Servlet is not
> > Displayed , but that may also be due to my setup I am still checking.
> >
> > The WAR WEB-INF/lib folder only has Derby Jars nothing else.
> >
> > The Repo with this code is at:
> > https://github.com/free2create/pro-jakarta-persistence-jakarta-ee10
> >
> > It uses maven to build and after building you would want to deploy:
> > examples/Chapter3/03-slsbLifecycleExample/servlet/target/ WAR file.
> >
> > ______________
> > LoggerBean.java:
> > ______________
> > package examples.stateless;
> >
> > import jakarta.annotation.PostConstruct;
> > import jakarta.ejb.Stateless;
> > import java.util.logging.Logger;
> >
> > @Stateless
> > public class LoggerBean {
> >     private Logger logger;
> >
> >     @PostConstruct
> >     private void init() {
> >         logger = Logger.getLogger("notification");
> >     }
> >
> >     public void logMessage(String message) {
> >         logger.info(message);
> >     }
> > }
> > _____________
> > LoggerServlet.java
> > _____________
> >
> > package examples.servlet;
> >
> > import java.io.IOException;
> > import java.io.PrintWriter;
> >
> > import javax.naming.InitialContext;
> > import jakarta.servlet.ServletException;
> > import jakarta.servlet.http.HttpServlet;
> > import jakarta.servlet.http.HttpServletRequest;
> > import jakarta.servlet.http.HttpServletResponse;
> > import jakarta.servlet.annotation.WebServlet;
> > import jakarta.ejb.EJB;
> >
> > import examples.stateless.LoggerBean;
> >
> > @WebServlet(name="LoggerServlet",
> >             urlPatterns="/LoggerServlet")
> > public class LoggerServlet extends HttpServlet {
> >
> >     private final String TITLE =
> >         "Chapter 3: Stateless Session Bean Lifecycle Example";
> >
> >     private final String DESCRIPTION =
> >         "This example demonstrates the basic use of lifecycle callbacks
> to
> > initialize a Stateless Session Bean. </br>" +
> >         "Enter a and click 'Go'.  This will trigger a servlet client that
> > talks " +
> >         "to a Stateless Session Bean to log a message.";
> >
> >     @EJB LoggerBean logger;
> >
> >     public void doGet(HttpServletRequest request, HttpServletResponse
> > response) throws ServletException, IOException {
> >         response.setContentType("text/html");
> >         PrintWriter out = response.getWriter();
> >         printHtmlHeader(out);
> >
> >         // if there was a message submitted, log it
> >         String message = request.getParameter("message");
> >         if (message != null) {
> >             // use the logger bean to log a message
> >             logger.logMessage(message);
> >             out.println("Message '" + message + "' sent to logger.  " +
> >             "See the output on the server console or the log file at
> > &lt;SERVER_ROOT&gt;/glassfish/domains/domain1/logs/server.log.");
> >         }
> >
> >         printHtmlFooter(out);
> >     }
> >
> >
> >     private void printHtmlHeader(PrintWriter out) throws IOException {
> >         //Code Deleted
> >     }
> >
> >
> >     private void printHtmlFooter(PrintWriter out) throws IOException {
> >         //Code Deleted
> >     }
> > }
> >
> > __________________________________________
> > Exception
> > __________________________________________
> >
> >
> >
> > 02-Sep-2022 16:38:17.996 WARNING [main]
> >
> >
> org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesObjectStreamClassCaches
> > Failed to clear soft references from ObjectStreamClass$Caches for web
> > application [ch3-03-slsb-servlet-1.0.0]
> > java.lang.ClassCastException: class java.io.ObjectStreamClass$Caches$1
> > cannot be cast to class java.util.Map (java.io.ObjectStreamClass$Caches$1
> > and java.util.Map are in module java.base of loader 'bootstrap')
> > at
> >
> >
> org.apache.catalina.loader.WebappClassLoaderBase.clearCache(WebappClassLoaderBase.java:2374)
> > at
> >
> >
> org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesObjectStreamClassCaches(WebappClassLoaderBase.java:2349)
> > at
> >
> >
> org.apache.catalina.loader.WebappClassLoaderBase.clearReferences(WebappClassLoaderBase.java:1711)
> > at
> >
> >
> org.apache.catalina.loader.WebappClassLoaderBase.stop(WebappClassLoaderBase.java:1639)
> > at
> >
> >
> org.apache.tomee.catalina.TomEEWebappClassLoader.internalStop(TomEEWebappClassLoader.java:306)
> > at
> >
> >
> org.apache.tomee.catalina.TomcatWebAppBuilder.afterStop(TomcatWebAppBuilder.java:2149)
> > at
> >
> >
> org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:127)
> > at
> >
> >
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
> > at
> >
> >
> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
> > at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:265)
> > at
> >
> >
> org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1412)
> > at
> >
> >
> org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1401)
> > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> > at
> >
> >
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> > at
> >
> >
> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
> > at
> >
> org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:986)
> > at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
> > at
> >
> >
> org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1412)
> > at
> >
> >
> org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1401)
> > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> > at
> >
> >
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> > at
> >
> >
> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
> > at
> >
> org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:986)
> > at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
> > at
> >
> >
> org.apache.catalina.core.StandardService.stopInternal(StandardService.java:497)
> > at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
> > at
> >
> >
> org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:979)
> > at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
> > at org.apache.catalina.startup.Catalina.stop(Catalina.java:872)
> > at org.apache.catalina.startup.Catalina.start(Catalina.java:834)
> > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method)
> > at
> >
> >
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
> > at
> >
> >
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> > at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
> > at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
> >
>
>
> --
> Atentamente:
> César Hernández.
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.