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>
 
... 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>
 
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>">
<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

Reply via email to