You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flume.apache.org by "Luca Rosellini (JIRA)" <ji...@apache.org> on 2016/11/04 10:49:58 UTC
[jira] [Updated] (FLUME-2782) Extension-friendly HttpSource
[ https://issues.apache.org/jira/browse/FLUME-2782?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Luca Rosellini updated FLUME-2782:
----------------------------------
Attachment: extensible-flume-HttpSource_v2.diff
I attach an update of this patch in which:
# {{getServlet()}} now returns {{FlumeHTTPServlet}}, as [~tmgstev] suggested.
# added some JavaDoc to {{HTTPSource}} explaining how to extend the component and plug a custom servlet implementation.
# some method of {{TestHTTPSource}} have been moved to {{AbstractTestHTTPSource}}
# added the new test class {{TestCustomHTTPSource}}
> 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, extensible-flume-HttpSource_v2.diff
>
>
> 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)