[ https://issues.apache.org/jira/browse/FLUME-2782?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15629073#comment-15629073 ]
Tristan Stevens commented on FLUME-2782: ---------------------------------------- I think this patch makes sense, although I've not fully tested it. Ideally, we'd need some unit tests to be added for a new feature to test that what you are doing will work. I wonder whether getServlet() should return FlumeHTTPSource rather than HTTPSource - meaning that whoever calls this needs to at least subclass FlumeHTTPSource rather than adding any old HTTPSource in?? FLUME-2698 is conflicting with this and is currently open for review - I'd propose we roll this change into that one at the same time. [~lucarosellini] Would you like to propose some unit tests for this (or [~jmb] if you are feeling so inclined)?? > Extension-friendly HttpSource > ----------------------------- > > Key: FLUME-2782 > URL: https://issues.apache.org/jira/browse/FLUME-2782 > Project: Flume > Issue Type: Improvement > Components: Sinks+Sources > Affects Versions: v1.6.0, v1.5.2 > Reporter: Luca Rosellini > Labels: HTTP, Source > Attachments: extensible-flume-HttpSource.patch > > > This patch allows third-party to developers extend HttpSource behavior > easily, without having to reimplement the whole thing. > More specifically: > * Adds an hook to customize {{org.mortbay.jetty.servlet.Context}}. > * Delegates the HttpServlet instance creation to a protected factory method. > * Changes FlumeHttpServlet visibility to {{protected}}, to let third party > developers extend from it. > * Adds an hook in {{FlumeHTTPServlet}} to customize {{HttpServletResponse}} > before it is flushed. > We developed this patch because we had to add a custom servlet filter to the > Jetty context. > Having this patch applied, a third-party developer could easily extend > {{HttpSource}} like this: > {code:title=CustomHTTPSource.java|borderStyle=solid} > public class CustomHTTPSource extends HTTPSource { > @Override > protected void customizeServletContext(Context context) { > super.customizeServletContext(context); > context.addFilter(MyCustomHttpServletFilter.class,"/*",0); > } > @Override > protected HttpServlet getServlet() { > return new KeedioFlumeHTTPServlet(); > } > protected class KeedioFlumeHTTPServlet extends FlumeHTTPServlet{ > @Override > protected void customizeServletResponse(HttpServletRequest request, > HttpServletResponse response) { > super.customizeServletResponse(request, response); > response.addHeader("Accept-Encoding","..."); > } > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)