Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Having trouble using Embedded Jetty and WebApplicationInitializer with a WarFile deployment


On 09/23/2014 04:54 PM, Joakim Erdfelt wrote:
> Incidentally, if you are going to use embedded fully, with no external
> dependencies, why are you using annotation scanning at runtime?
> Compute it at build-time and use the precomputed information at runtime.
> 
> Might want to look into the quickstart stuff in Jetty 9.

Well, probably because I didn't even know I could do this.

I have to support running as a standalone war file, in addition to the
embedded war file, as we've got customers that want to use the war file
in say Glassfish, as well as other customers that want to have it run as
a standalone service, without managing their own container.

I'll look into it, thanks!

> 
> 
> --
> Joakim Erdfelt <joakim@xxxxxxxxxxx <mailto:joakim@xxxxxxxxxxx>>
> webtide.com <http://www.webtide.com/> - intalio.com/jetty
> <http://intalio.com/jetty>
> Expert advice, services and support from from the Jetty & CometD experts
> eclipse.org/jetty <http://eclipse.org/jetty/> - cometd.org
> <http://cometd.org/>
> 
> On Tue, Sep 23, 2014 at 2:25 PM, David Kowis
> <dkowis+jettyUsers@xxxxxxxxx <mailto:dkowis+jettyUsers@xxxxxxxxx>> wrote:
> 
>     On 09/23/2014 04:21 PM, David Kowis wrote:
>     > On 09/23/2014 04:05 PM, Joakim Erdfelt wrote:
>     >> So I took your project, cloned it, made no changes, built it, ran it,
>     >> and I do not get your error.
>     >>
>     >> http://pastebin.com/0Lnca9Bn
>     >
>     > Yep, running as a standalone war file in jetty always worked, that's not
>     > broke at all.
>     >
>     > Try checking out the warDeploy branch and doing `gradle run`
> 
>     For some context, the project I work on has to support two deployment
>     mechanisms, as a war file in a container, and as a standalone 'java -jar
>     the_application' style run.
> 
>     I'm trying to use an embedded jetty to accomplish the goals, and I'd
>     like to be able to run the war file directly, so I don't have to make
>     two separate artifacts (one fat jar with launcher, and one war file)
>     instead I'll have one launcher jar that tells it to launch the war file.
> 
>     It doesn't actually matter too much, but I'm trying to figure out why it
>     behaves correctly when deploying to an external jetty, vs doing the
>     WebAppContext with embedded jetty. I could use the servlet style
>     solution that's commented out in there, because it does work every time,
>     it's just not nearly as clean as the WebAppContext mechanism.
> 
>     >
>     > That will run the embedded jetty, rather than deploying a war file to
>     > the jetty plugin. (Should also eliminate the logback conflicting
>     > dependency, since it won't pull in the gradle classpath)
>     >
>     > --
>     > David
>     >
>     >>
>     >>
>     >>
>     >> --
>     >> Joakim Erdfelt <joakim@xxxxxxxxxxx <mailto:joakim@xxxxxxxxxxx>
>     <mailto:joakim@xxxxxxxxxxx <mailto:joakim@xxxxxxxxxxx>>>
>     >> webtide.com <http://webtide.com> <http://www.webtide.com/> -
>     intalio.com/jetty <http://intalio.com/jetty>
>     >> <http://intalio.com/jetty>
>     >> Expert advice, services and support from from the Jetty & CometD
>     experts
>     >> eclipse.org/jetty <http://eclipse.org/jetty>
>     <http://eclipse.org/jetty/> - cometd.org <http://cometd.org>
>     >> <http://cometd.org/>
>     >>
>     >> On Tue, Sep 23, 2014 at 1:28 PM, David Kowis
>     >> <dkowis+jettyUsers@xxxxxxxxx
>     <mailto:dkowis%2BjettyUsers@xxxxxxxxx>
>     <mailto:dkowis+jettyUsers@xxxxxxxxx
>     <mailto:dkowis%2BjettyUsers@xxxxxxxxx>>> wrote:
>     >>
>     >>     On 09/23/2014 02:39 PM, Joakim Erdfelt wrote:
>     >>     > A few things.
>     >>     > You seem to be grasping at straws in your code.
>     >>
>     >>     Sadly, this is somewhat true, I have a few questions
>     regarding the
>     >>     suggestions.
>     >>
>     >>     >
>     >>     > First, you'll need a proper set of WebAppContext configurations
>     >>     > (declared all of them, in the correct order)
>     >>     > Example:
>     >>     >
>     https://github.com/jetty-project/embedded-servlet-3.1/blob/master/src/test/java/org/eclipse/jetty/demo/EmbedMe.java#L28-L38
>     >>     >
>     >>     >         context.setConfigurations(new Configuration[]
>     >>     >         {
>     >>     >             new AnnotationConfiguration(),
>     >>     >             new WebInfConfiguration(),
>     >>     >             new WebXmlConfiguration(),
>     >>     >             new MetaInfConfiguration(),
>     >>     >             new FragmentConfiguration(),
>     >>     >             new EnvConfiguration(),
>     >>     >             new PlusConfiguration(),
>     >>     >             new JettyWebXmlConfiguration()
>     >>     >         });
>     >>
>     >>     Why do I need to declare all of these? As I understand it, I
>     should only
>     >>     need the ones that affect the container config that I want
>     (Like if I
>     >>     don't have any web-fragment.xmls I could skip the
>     >>     FragmentConfiguration.) (I'll note that it takes
>     significantly longer to
>     >>     start up when they're all configured, vs when I only include
>     the ones I
>     >>     need)
>     >>
>     >>     So in that example, it requires that you
>     setParentLoaderPriority(true),
>     >>     which changes the way classloading happens. If I set that to
>     true, my
>     >>     war deployment works, but it will not ever work with it set
>     to false.
>     >>     Why is this the case, but it works fine if I were to run the
>     war file
>     >>     with a standalone jetty (say with jetty-launcher)?
>     >>
>     >>     >
>     >>     > Next, you'll require jetty-annotations.jar (and transitive
>     dependencies)
>     >>     > in your environment too.
>     >>
>     >>     Yep, no problem there. It also appears that I need to have
>     spring-web in
>     >>     the environment that I start jetty in, else it doesn't do the
>     spring
>     >>     WebApplicationInitializer detection at all.
>     >>
>     >>     //Without spring-web
>     >>     15:21:05.217 INFO  o.e.j.s.Server - jetty-9.2.3.v20140905
>     >>     15:21:06.509 INFO  o.e.j.w.StandardDescriptorProcessor - NO
>     JSP Support
>     >>     for /, did not find org.apache.jasper.servlet.JspServlet
>     >>     15:21:06.528 INFO  o.e.j.s.h.ContextHandler - Started
>     >>   
>      o.e.j.w.WebAppContext@13dbe345{/,file:/tmp/jetty-0.0.0.0-8080-war-1.NOPE.war-_-any-7447262048590329370.dir/webapp/,AVAILABLE}{/home/dkowis/gitwork/repose/Valve2/valve/build/war-1.NOPE.war}
>     >>
>     >>
>     >>     //with spring-web
>     >>     15:21:34.659 INFO  o.e.j.w.StandardDescriptorProcessor - NO
>     JSP Support
>     >>     for /, did not find org.apache.jasper.servlet.JspServlet
>     >>     15:21:34.663 INFO  / - No Spring WebApplicationInitializer types
>     >>     detected on classpath
>     >>     15:21:34.679 INFO  o.e.j.s.h.ContextHandler - Started
>     >>   
>      o.e.j.w.WebAppContext@7709d976{/,file:/tmp/jetty-0.0.0.0-8080-war-1.NOPE.war-_-any-2624512083090645583.dir/webapp/,AVAILABLE}{/home/dkowis/gitwork/repose/Valve2/valve/build/war-1.NOPE.war}
>     >>
>     >>
>     >>     >
>     >>     > After that, you'll need to make sure that the following are
>     in your
>     >>     > WEB-INF/lib directories
>     >>     >
>     >>     > The spring jar(s) that contains the classes:
>     >>     >
>     >>     >   * org.springframework.web.SpringServletContainerInitializer
>     >>     >
>     >>     
>     <https://github.com/spring-projects/spring-framework/blob/v4.1.0.RELEASE/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java>
>     >>     >     (this is the class that Jetty finds and calls)
>     >>     >   * org.springframework.web.WebApplicationInitializer
>     >>     >
>     >>     
>     <https://github.com/spring-projects/spring-framework/blob/v4.1.0.RELEASE/spring-web/src/main/java/org/springframework/web/WebApplicationInitializer.java>
>     >>     >     (this is the type of class that the
>     >>     >     SpringServletContainerInitializer has stated that it
>     handles
>     >>     >
>     >>     
>     <https://github.com/spring-projects/spring-framework/blob/v4.1.0.RELEASE/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java#L110>)
>     >>     >
>     >>     > Make sure these are only in your webapp's WEB-INF/lib
>     directory.
>     >>     > Then, all of your classes that implement
>     WebApplicationInitializer
>     >>     > should be in WEB-INF/classes/ or WEB-INF/lib/
>     >>     >
>     >>     > That should be it.
>     >>     > What happens is Jetty scans all of your container jars,
>     then WEB-INF/lib
>     >>     > jars, then WEB-INF/classes files.
>     >>     > In the process, it sees that
>     WEB-INF/lib/spring-something.jar has a
>     >>     > resource called
>     META-INF/services/javax.servlet.ServletContainerInitializer
>     >>     > which references the
>     >>     > org.springframework.web.SpringServletContainerInitializer
>     >>     >
>     >>   
>      <https://github.com/spring-projects/spring-framework/blob/v4.1.0.RELEASE/spring-web/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer>
>     >>     >
>     >>     > Jetty will see the
>     @HandlesType(WebApplicationInitializer.class) on that
>     >>     > ServletContainerInitializer and call the standard
>     >>     > ServletContainerInitializer.onStartup(Set<Class<?>>
>     >>     > webAppInitializerClasses, ServletContext servletContext)
>     >>     >
>     >>   
>      <https://github.com/spring-projects/spring-framework/blob/v4.1.0.RELEASE/spring-web/src/main/java/org/springframework/web/SpringServletContainerInitializer.java#L145>
>     >>     > with all of the classes that implement
>     WebApplicationInitializer that it
>     >>     > has found.
>     >>     >
>     >>     > At this point, Jetty is out of the equation and Spring is
>     doing the rest
>     >>     > of the initialization for itself.
>     >>
>     >>     I've got all this, but it's not happening.
>     >>
>     >>     My war file contents:
>     >>     https://gist.github.com/dkowis/ffba7f0dc84e1d7d1bef
>     >>
>     >>     I have the things you describe, but it doesn't behave the way you
>     >>     describe. I'll push up some commits for this project
>     demonstrating this
>     >>     on a branch: https://github.com/dkowis/valve2/tree/warDeploy
>     >>
>     >>     Unless I've missed something, the environment you describe I've
>     >>     duplicated, but it's not working. (Maybe I did miss something)
>     >>
>     >>     >
>     >>     > Good luck
>     >>     >
>     >>     > --
>     >>     > Joakim Erdfelt <joakim@xxxxxxxxxxx
>     <mailto:joakim@xxxxxxxxxxx> <mailto:joakim@xxxxxxxxxxx
>     <mailto:joakim@xxxxxxxxxxx>>
>     >>     <mailto:joakim@xxxxxxxxxxx <mailto:joakim@xxxxxxxxxxx>
>     <mailto:joakim@xxxxxxxxxxx <mailto:joakim@xxxxxxxxxxx>>>>
>     >>     > webtide.com <http://webtide.com> <http://webtide.com>
>     <http://www.webtide.com/> -
>     >>     intalio.com/jetty <http://intalio.com/jetty>
>     <http://intalio.com/jetty>
>     >>     > <http://intalio.com/jetty>
>     >>     > Expert advice, services and support from from the Jetty &
>     CometD experts
>     >>     > eclipse.org/jetty <http://eclipse.org/jetty>
>     <http://eclipse.org/jetty>
>     >>     <http://eclipse.org/jetty/> - cometd.org <http://cometd.org>
>     <http://cometd.org>
>     >>     > <http://cometd.org/>
>     >>     >
>     >>     > On Tue, Sep 23, 2014 at 12:11 PM, David Kowis
>     >>     > <dkowis+jettyUsers@xxxxxxxxx
>     <mailto:dkowis%2BjettyUsers@xxxxxxxxx>
>     >>     <mailto:dkowis%2BjettyUsers@xxxxxxxxx
>     <mailto:dkowis%252BjettyUsers@xxxxxxxxx>>
>     >>     <mailto:dkowis+jettyUsers@xxxxxxxxx
>     <mailto:dkowis%2BjettyUsers@xxxxxxxxx>
>     >>     <mailto:dkowis%2BjettyUsers@xxxxxxxxx
>     <mailto:dkowis%252BjettyUsers@xxxxxxxxx>>>> wrote:
>     >>     >
>     >>     >     On 09/23/2014 12:58 PM, David Kowis wrote:
>     >>     >     > I found this thread:
>     >>     >     >
>     http://dev.eclipse.org/mhonarc/lists/jetty-users/msg04587.html
>     >>     >
>     >>     >     I found a couple more things:
>     >>     >
>     >>     
>     http://www.eclipse.org/jetty/documentation/current/jetty-classloading.html
>     >>     >
>     >>     >     So now I've got an additional commit:
>     >>     >     a44cb9a9a5437fd1eee60d6071d5fc4ef8f8ce79
>     >>     >
>     >>     >     This works, but it only works if I set
>     >>     parentLoaderPriority(true), from
>     >>     >     the documentation I'm not exactly clear as to why this
>     works.
>     >>     >
>     >>     >     The classes I want to load are all in the War file
>     themselves,
>     >>     they
>     >>     >     shouldn't be necessary in the classpath that I'm
>     configuring
>     >>     the server
>     >>     >     in. There must be something else wrong...
>     >>     >
>     >>     >     I don't want to include the classes in the launcher
>     project's
>     >>     classpath,
>     >>     >     when they should all be in the war file.
>     >>     >
>     >>     >     I have this working with the servlet launcher mechanism,
>     >>     because I do
>     >>     >     want to actaully share some things in a spring context
>     at one
>     >>     level
>     >>     >     higher than the war files, so perhaps it's best if I
>     don't try
>     >>     to deploy
>     >>     >     lots of war files, and just have the jetties be in my one
>     >>     classpath.
>     >>     >
>     >>     >     --
>     >>     >     David Kowis
>     >>     >
>     >>     >     >
>     >>     >     > It gets me part of the way there, but I'm not
>     deploying using a
>     >>     >     > directory, I'm deploying using an existing war file.
>     >>     >     >   Jetty Version: 9.2.3.v20140905
>     >>     >     >
>     >>     >     > I tried setting:
>     >>     >     > (note this is Scala, but it doesn't really matter in this
>     >>     context)
>     >>     >     > val webapp = new WebAppContext()
>     >>     >     > webapp.setContextPath("/")
>     >>     >     > webapp.setWar(config.getString("warLocation"))
>     >>     >     >
>     >>     >
>     >>     
>     webapp.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
>     >>     >     > ".*/WEB-INF/classes/.*")
>     >>     >     >
>     >>     >     > I'm not sure how to get it to pick up my
>     WebAppInitializer
>     >>     class. The
>     >>     >     > jetty logs indicate that it has tried, but not found
>     anything:
>     >>     >     > 12:54:15.653 INFO  / - No Spring
>     WebApplicationInitializer types
>     >>     >     > detected on classpath
>     >>     >     >
>     >>     >     >
>     >>     >     > I'll note that the warfile deploys beautifully in
>     Jetty 9 using
>     >>     >     > https://github.com/Khoulaiz/gradle-jetty-eclipse-plugin
>     >>     >     >
>     >>     >     > Its only when I'm trying to do it myself, using this
>     simple
>     >>     embedded
>     >>     >     > mechanism that it doesn't work. I'm probably missing
>     something
>     >>     >     obvious,
>     >>     >     > but I can't quite figure it out.
>     >>     >     >
>     >>     >     > The project is here: https://github.com/dkowis/valve2
>     >>     >     >
>     >>     >     > You can get here with `gradle run` (I'm using gradle
>     2.x) at
>     >>     the root,
>     >>     >     > at commit 9db7cc77f5
>     >>     >     >
>     >>     >     > Thanks in advance!
>     >>     >     > David Kowis
>     >>     >     >
>     >>     >     > PS: sorry for double send if this happened, I sent
>     the other
>     >>     using the
>     >>     >     > wrong email address.
>     >>     >     > _______________________________________________
>     >>     >     > jetty-users mailing list
>     >>     >     > jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx> <mailto:jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx>>
>     >>     <mailto:jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx> <mailto:jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx>>>
>     >>     >     > To change your delivery options, retrieve your
>     password, or
>     >>     >     unsubscribe from this list, visit
>     >>     >     > https://dev.eclipse.org/mailman/listinfo/jetty-users
>     >>     >     >
>     >>     >
>     >>     >     _______________________________________________
>     >>     >     jetty-users mailing list
>     >>     >     jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx> <mailto:jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx>>
>     >>     <mailto:jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx> <mailto:jetty-users@xxxxxxxxxxx
>     <mailto:jetty-users@xxxxxxxxxxx>>>
>     >>     >     To change your delivery options, retrieve your password, or
>     >>     >     unsubscribe from this list, visit
>     >>     >     https://dev.eclipse.org/mailman/listinfo/jetty-users
>     >>     >
>     >>     >
>     >>     >
>     >>     >
>     >>     > _______________________________________________
>     >>     > jetty-users mailing list
>     >>     > jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>
>     <mailto:jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>>
>     >>     > To change your delivery options, retrieve your password, or
>     >>     unsubscribe from this list, visit
>     >>     > https://dev.eclipse.org/mailman/listinfo/jetty-users
>     >>     >
>     >>
>     >>     _______________________________________________
>     >>     jetty-users mailing list
>     >>     jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>
>     <mailto:jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>>
>     >>     To change your delivery options, retrieve your password, or
>     >>     unsubscribe from this list, visit
>     >>     https://dev.eclipse.org/mailman/listinfo/jetty-users
>     >>
>     >>
>     >>
>     >>
>     >> _______________________________________________
>     >> jetty-users mailing list
>     >> jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>
>     >> To change your delivery options, retrieve your password, or
>     unsubscribe from this list, visit
>     >> https://dev.eclipse.org/mailman/listinfo/jetty-users
>     >>
>     >
>     > _______________________________________________
>     > jetty-users mailing list
>     > jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>
>     > To change your delivery options, retrieve your password, or
>     unsubscribe from this list, visit
>     > https://dev.eclipse.org/mailman/listinfo/jetty-users
>     >
> 
>     _______________________________________________
>     jetty-users mailing list
>     jetty-users@xxxxxxxxxxx <mailto:jetty-users@xxxxxxxxxxx>
>     To change your delivery options, retrieve your password, or
>     unsubscribe from this list, visit
>     https://dev.eclipse.org/mailman/listinfo/jetty-users
> 
> 
> 
> 
> _______________________________________________
> jetty-users mailing list
> jetty-users@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
> https://dev.eclipse.org/mailman/listinfo/jetty-users
> 




Back to the top