Luca Rosellini created FLUME-2782:
-------------------------------------

             Summary: 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: 1.6, v1.5.2
            Reporter: Luca Rosellini


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)

Reply via email to