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.
>

Reply via email to