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

Reply via email to