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