Hi Chris, Good point about the fragment bundle, though actually the jetty.xml found in the etc folder will always override one provided by a fragment bundle. You might still use this approach to add the logging class to the jetty bundle. Even though the filter might work I think adding a custom RequestHandler is better.
regards, Achim 2014-12-23 0:32 GMT+01:00 Christoffer Soop <[email protected]>: > > Hi Achim, > > Thanks a lot for the (very) rapid feedback! Good to hear that I am headed > in the right direction. > > Yes, I know about the jetty.xml in the etc folder but I hesitate to change > the default one as I still need to provide the implementation class in a > lib/bundle somewhere that has to be available when the PAX Web Jetty bundle > is configured/started. Doing it with a fragment seems... more self > contained and is also the intended way of configuring Jetty in PAX Web from > what I can tell. > > There is another solution that I have thought about that would achieve > much of the same effect and that is to use a Servlet Filter. The big > advantage I guess is that we are more in a standard usecase so there is no > “hacking” of the SMX distribution. On the other hand I guess I am not able > to chop _all_ requests handled by Jetty (which is what I want to do) and > also I don’t have access to some of the Jetty specific methods on the > request/response objects. Using a custom RequestLog implementation seems > like the right way to do it. > > Best regards and again thanks, > > Chris > > > On 23 dec 2014, at 00:09, Achim Nierbeck <[email protected]> > wrote: > > > > Hi Chris, > > > > the NCSA logger is not configured by means of a jetty.xml, it's > configured > > through the pax web properties configuration / configuration admin. > > Never the less you did choose the right approach to add another > > RequestLogger. Though you don't need use a fragment bundle. > > ServiceMix/Karaf uses a file based jetty.xml which is placed in the etc > > folder, you just need to alter that one. > > > > The jetty.xml seems to be correct. > > A simpler approach by using a service might be an interesting idea, > though > > it's not supported yet. > > > > regards, Achim > > > > > > > > 2014-12-22 23:49 GMT+01:00 Christoffer Soop <[email protected] > <mailto:[email protected]>>: > >> > >> Hi, > >> > >> I am trying to replace the NCSA log with a custom RequestLog > >> implementation in ServiceMix 4.5.3. I started out by lookging at > >> > >> https://wiki.eclipse.org/Jetty/Tutorial/RequestLog < > https://wiki.eclipse.org/Jetty/Tutorial/RequestLog> < > >> https://wiki.eclipse.org/Jetty/Tutorial/RequestLog < > https://wiki.eclipse.org/Jetty/Tutorial/RequestLog>> > >> > >> ... but quickly realized I should probably not replace the OPS4J Pax Web > >> configuration. Instead I should extend it following the tutorial at > >> > >> > >> > https://ops4j1.jira.com/wiki/display/paxweb/Advanced+Jetty+Configuration < > https://ops4j1.jira.com/wiki/display/paxweb/Advanced+Jetty+Configuration> > < > >> > https://ops4j1.jira.com/wiki/display/paxweb/Advanced+Jetty+Configuration < > https://ops4j1.jira.com/wiki/display/paxweb/Advanced+Jetty+Configuration>> > >> > >> I have thus created a Jetty configuration fragment like so: > >> > >> <?xml version="1.0"?> > >> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting// > >> DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd < > http://jetty.mortbay.org/configure.dtd> < > >> http://jetty.mortbay.org/configure.dtd < > http://jetty.mortbay.org/configure.dtd>>"> > >> <Configure class="org.eclipse.jetty.server.Server"> > >> <Get name="handler"> > >> <Call name="addHandler"> > >> <Arg> > >> <New > >> id="RequestLog" > class="org.eclipse.jetty.server.handler.RequestLogHandler"> > >> > >> <Set name="requestLog"> > >> > >> <New id="RequestLogImpl" > >> class="edu.loopback.jetty.CustomJettyRequestLog" /> > >> > >> </Set> > >> </New> > >> </Arg> > >> </Call> > >> </Get> > >> </Configure> > >> > >> This I hope will a) fetch the Server configuration and b) add my > >> CustomJettyRequestLog to a new RequestLogHandler, assuming it can > co-exist > >> peacfully with the existing NCSA RequestLogHandler. Replacing the > default > >> handler would seem like a better option but I have no clue on how to go > >> about this… > >> > >> Just installing my fragment does not seem to make a difference and when > I > >> refresh the OPS4J Pax Web - Jetty bundle I get the following error: > >> > >> 23:04:39,477 | ERROR | g.ops4j.pax.web) | configadmin > >> | 5 - org.apache.felix.configadmin - 1.2.8 | Configuration for > >> org.ops4j.pax.web has already been used for service > >> [org.osgi.service.cm.ManagedService, id=85, bundle=138] and will now > also > >> be given to [org.osgi.service.cm.ManagedService, id=293, bundle=138] > >> > >> This I take to meet that instead of merging my configuration, a new > Jetty > >> configuration is added. > >> > >> My guess is that I need to make sure that my bundle is loaded before the > >> Fragment-Host org.ops4j.pax.web.pax-web-jetty in order to make it the > merge > >> with the Fragement-Host when starting the Pax Jetty bundle. From what I > can > >> tell this means I should > >> create a feature > >> add the service to the startup.properties with a start level below > >> (similar to?) the OPS4J Pax Web Jetty bundle > >> add the feature and feature repository to org.apache.karaf.features.cfg > >> add my bundle to the system repository folder > >> As I am already swimming in deep water I would much appreciate any > >> feedback on this - in particular if somebody could please validate the > >> approach confirming that > >> Changing the default NCSA RequestLog implementation requires a Pax Web > >> Jetty fragment > >> The fragment needs to start before Pax Web Jetty > >> The jetty.xml is correct > >> Of course, if there is a simpler way to switch to my custom RequestLog I > >> am all ears… One could dream of a simple property with a class name > >> somewhere... > >> > >> Best regards, > >> > >> Chris > > > > > > > > -- > > > > Apache Member > > Apache Karaf <http://karaf.apache.org/ <http://karaf.apache.org/>> > Committer & PMC > > OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/ < > http://wiki.ops4j.org/display/paxweb/Pax+Web/>> Committer & > > Project Lead > > blog <http://notizblog.nierbeck.de/ <http://notizblog.nierbeck.de/>> > > Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS < > http://bit.ly/1ps9rkS>> > > > > Software Architect / Project Manager / Scrum Master > > -- Apache Member Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead blog <http://notizblog.nierbeck.de/> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS> Software Architect / Project Manager / Scrum Master
