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. -- Joakim Erdfelt <[email protected]> webtide.com <http://www.webtide.com/> - intalio.com/jetty Expert advice, services and support from from the Jetty & CometD experts eclipse.org/jetty - cometd.org On Tue, Sep 23, 2014 at 2:25 PM, David Kowis <[email protected]> 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 <[email protected] <mailto:[email protected]>> > >> 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 1:28 PM, David Kowis > >> <[email protected] <mailto:[email protected]>> > 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 <[email protected] <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>>> > >> > 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 12:11 PM, David Kowis > >> > <[email protected] > >> <mailto:dkowis%[email protected]> > >> <mailto:[email protected] > >> <mailto:dkowis%[email protected]>>> 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 > >> > > [email protected] <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>> > >> > > 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 > >> > [email protected] <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>> > >> > 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 > >> > [email protected] <mailto:[email protected]> > >> > 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 > >> [email protected] <mailto:[email protected]> > >> 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 > >> [email protected] > >> 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 > > [email protected] > > 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 > [email protected] > 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 [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/jetty-users
