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:52 PM, Joakim Erdfelt wrote:
> Here ya go
> 
> https://github.com/joakime/valve2/commit/62eeab9e328be37dfc09d48803e1a8d7d59c442c

This is extremely handy, thanks!

I would need to run multiple local servers, as that's part of the
problem I'm needing to prototype out, so I'll expand on this a bit.

Thanks again, hopefully I won't need to be back with questions tomorrow :D

--
David Kowis

> 
> 
> --
> 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:21 PM, David Kowis
> <dkowis+jettyUsers@xxxxxxxxx <mailto:dkowis+jettyUsers@xxxxxxxxx>> 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`
> 
>     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
> 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