Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] Embedded WAR without extracting files

Hi there,

I have a WAR file in which I have embedded Jetty and created a simple
EmbeddedJettyServer class.

When I start the Jetty server with the
webAppContext.setExtractWAR(true) all works well so far.

I would much prefer if I could run my application without having to
extract files to a location of the user's computer.
I have tried setting setExtractWAR(false), but this causes the
following exception at Jetty startup:

java.io.FileNotFoundException: JAR entry
WEB-INF/lib/activation-1.1.1.jar!/ not found in
/Users/aretter/code/evolvedbinary/customers/cityehr/cityehr-NEW/cityehr-distribution/cityehr-standalone/target/cityehr-standalone-1.8.0-SNAPSHOT.jar
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:144)
at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89)
at org.eclipse.jetty.webapp.MetaInfConfiguration.getTlds(MetaInfConfiguration.java:445)
at org.eclipse.jetty.webapp.MetaInfConfiguration.scanForTlds(MetaInfConfiguration.java:361)
at org.eclipse.jetty.webapp.MetaInfConfiguration.scanJars(MetaInfConfiguration.java:172)
at org.eclipse.jetty.webapp.MetaInfConfiguration.preConfigure(MetaInfConfiguration.java:106)
at org.eclipse.jetty.webapp.WebAppContext.preConfigure(WebAppContext.java:488)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:523)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
at org.eclipse.jetty.server.Server.start(Server.java:423)
...

I don't think I actually need to scan for TLDs, but I don't know how
to disable that (if that is the issue). I am not using annotations as
my Webapp inside the war has a full WEB-INF/web.xml.

I did find this message -
https://bugs.eclipse.org/bugs/show_bug.cgi?id=375504 saying it's not
possible but it is from 2012, and so I am hoping things have improved
since then.

Is it now possible to run Jetty embedded in a Jar/War where the
Jar/War has jar files inside WEB-INF/lib and without extracting the
WAR file to a temporary location?

For reference my EmbeddedJettyServer class looks like this:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;

import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;

public class EmbeddedJettyServer {

  private static final Logger LOG = Log.getLogger(CityEhrJettyServer.class);

  public static void main(final String[] args) throws Exception {
    int port = 8080;
    final Server server = new Server(port);

    final WebAppContext webAppContext = new WebAppContext();

    final URL warLocation =
CityEhrJettyServer.class.getProtectionDomain().getCodeSource().getLocation();
    final Resource warResource = Resource.newResource(warLocation);

    LOG.info("Using BaseResource: {}", warResource);

    webAppContext.setExtractWAR(false); // TODO(AR) this causes a
FileNotFoundException
    webAppContext.setWarResource(warResource);


    webAppContext.setContextPath("/");
    webAppContext.setParentLoaderPriority(true);
    server.setHandler(webAppContext);

    server.start();
    server.join();
  }
}

--
Adam Retter

skype: adam.retter
tweet: adamretter
http://www.adamretter.org.uk


Back to the top