I am running Jetty 12.0.3 Embedded Deployment.
The POM has reference to both EE8 and EE10 WebAppContext Modules.
While deploying two WAR files that are based on EE8 and EE10, I am getting the exception shown below. Also, I have added a code snippet that shows this error.
javax.servlet.UnavailableException: Servlet class org.eclipse.jetty.ee8.jsp.JettyJspServlet is not a javax.servlet.Servlet
at org.eclipse.jetty.ee8.servlet.ServletHolder.checkServletType(ServletHolder.java:445)
at org.eclipse.jetty.ee8.servlet.ServletHolder.doStart(ServletHolder.java:349)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.ee8.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:616)
at org.eclipse.jetty.util.ExceptionUtil$MultiException.callAndCatch(ExceptionUtil.java:262)
at org.eclipse.jetty.ee8.servlet.ServletHandler.lambda$initialize$3(ServletHandler.java:615)
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
at org.eclipse.jetty.ee8.servlet.ServletHandler.initialize(ServletHandler.java:633)
at org.eclipse.jetty.ee8.servlet.ServletContextHandler.startContext(ServletContextHandler.java:326)
at org.eclipse.jetty.ee8.webapp.WebAppContext.startContext(WebAppContext.java:1148)
at org.eclipse.jetty.ee8.nested.ContextHandler.doStartInContext(ContextHandler.java:594)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1200)
at org.eclipse.jetty.ee8.nested.ContextHandler.doStart(ContextHandler.java:583)
at org.eclipse.jetty.ee8.servlet.ServletContextHandler.doStart(ServletContextHandler.java:258)
at org.eclipse.jetty.ee8.webapp.WebAppContext.doStart(WebAppContext.java:501)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:472)
at org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0(ContextHandler.java:658)
at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1206)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:658)
at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler.doStart(ContextHandler.java:2135)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:472)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
at org.eclipse.jetty.server.Server.start(Server.java:622)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
at org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:472)
at org.eclipse.jetty.server.Server.doStart(Server.java:563)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
POM File includes the one shown below,
<dependency>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-annotations</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-apache-jsp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-glassfish-jstl</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee8</groupId>
<artifactId>jetty-ee8-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee8</groupId>
<artifactId>jetty-ee8-annotations</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee8</groupId>
<artifactId>jetty-ee8-apache-jsp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.ee8</groupId>
<artifactId>jetty-ee8-glassfish-jstl</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
Sample Code,
String webapp1 = "webapps/myappee10.war"; // ee10
String webapp2 = "webapps/myappee8.war"; // ee8
String suffix = UUID.randomUUID().toString();
String webappName = null;
ContextHandlerCollection handlers = new ContextHandlerCollection();
org.eclipse.jetty.ee10.webapp.WebAppContext context1 = new org.eclipse.jetty.ee10.webapp.WebAppContext();
context1.setWar(webapp1);
webappName = webapp1.substring(0, webapp1.indexOf(".war")) + "_" + suffix;
context1.setVirtualHosts(Arrays.asList("foo.test.com"));
context1.setContextPath("/");
context1.setParentLoaderPriority(true);
context1.setTempDirectory(new File("c:/tmp" + File.separator + webappName));
context1.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$");
// context1.setErrorHandler(customEE8ErrorHandler);
handlers.addHandler(context1);
org.eclipse.jetty.ee8.webapp.WebAppContext context2 = new org.eclipse.jetty.ee8.webapp.WebAppContext();
context2.setWar(webapp2);
webappName = webapp2.substring(0, webapp2.indexOf(".war")) + "_" + suffix;
context2.setVirtualHosts(new String[] { "bar.test.com" });
context2.setContextPath("/");
context2.setParentLoaderPriority(true);
context2.setTempDirectory(new File("c:/tmp" + File.separator + webappName));
context2.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$");
// context2.setErrorHandler(customEE10ErrorHandler);
handlers.addHandler(context2);
main()
QueuedThreadPool threadPool = new QueuedThreadPool(500, 50, 60000);
Server server = new Server(threadPool);
server.addBean(new AppContextLeakPreventer());
server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", String.valueOf(524288000));
HttpConfiguration http_config = new HttpConfiguration();
http_config.setOutputBufferSize(32768);
http_config.setSendServerVersion(false);
http_config.setSendXPoweredBy(false);
http_config.setSendDateHeader(true);
ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config));
http.setPort(80);
http.setIdleTimeout(30000);
server.setConnectors(new Connector[] { http });
server.setHandler(MyServer.getWebAppContexts());
server.start();
server.join();