[undertow-dev] Undertow extensions library?

Stuart Douglas sdouglas at redhat.com
Wed Jul 23 02:46:14 EDT 2014


Sorry for the late reply, been very busy this week.

I had a look and so far I think it looks like a really good start, but I 
don't think this really belongs in the main Undertow repo (it would then 
need Java 8 to build for one thing, which I don't really want at this 
stage).


I'm still not sure where the best place to have these is, at the moment 
I am leaning towards a separate undertow-contrib repository, with a new 
repo for each component to allow them to be versioned separately.

Stuart

Bill O'Neil wrote:
> I had a few ideas I put together and would appreciate some feedback. A
> lot of it revolves around Java 8 but I kept all of the extensions
> themselves at Java 7. The main goal of Java 8 was to make constructing
> HttpHandlers easier when you delegate to other handlers.
>
> Example:
>
> Handlers.routing()
> .add(Methods.GET, "/messages", HandlerBuilder
>
> .create(CustomHandlers.json(Messages::getMessages))
>
> .wrap(CustomHandlers::timing, "getMessages")
>
> .wrap(BlockingHandler::new)
>
> .build())
>
> Here is my branch https://github.com/billoneil/undertow/tree/feature/ext
>
> Here is the entry point to an example that puts it all together.
> https://github.com/billoneil/undertow/blob/feature/ext/ext/examples/src/main/java/io/undertow/ext/examples/rest/RestServer.java
>
>
>
> Please excuse the boring example I couldn't think of anything
> interesting.
>
> If you run it locally
>
>
> curl -X POST localhost:8080/messages/optional -d '{"title": "Optional",
> "message": "Using optional"}'
> {"success":true}
>
> curl -X POST localhost:8080/messages/lambda -d '{"title": "Lambda",
> "message": "Using Lambda"}'
> {"success":true}
>
> curl -X POST localhost:8080/messages -d '{"title": "Method References",
> "message": "Using method references"}'
> {"success":true}
>
> curl -X GET localhost:8080/messages
> [
>
> *
> {
> o
> title: "Optional",
> o
> message: "Using optional"
> },
> *
> {
> o
> title: "Lambda",
> o
> message: "Using Lambda"
> },
> *
> {
> o
> title: "Method References",
> o
> message: "Using method references"
> }
>
> ]
>
> curl -X GET localhost:8080/info/metrics
> {
>
> *
> version: "3.0.0",
> *
> gauges: { },
> *
> counters: { },
> *
> histograms: { },
> *
> meters:
> {
> o
> response.status.code.200:
> {
> +
> count: 8,
> +
> m15_rate: 21.787938213503697,
> +
> m1_rate: 6.5304307794735275,
> +
> m5_rate: 18.017228623496,
> +
> mean_rate: 4.457584495510739,
> +
> units: "events/minute"
> }
> },
> *
> timers:
> {
> o
> createMessageLambda:
> {
> +
> count: 1,
> +
> max: 1.169,
> +
> mean: 1.169,
> +
> min: 1.169,
> +
> p50: 1.169,
> +
> p75: 1.169,
> +
> p95: 1.169,
> +
> p98: 1.169,
> +
> p99: 1.169,
> +
> p999: 1.169,
> +
> stddev: 0,
> +
> m15_rate: 0.059490549916151686,
> +
> m1_rate: 0.1812199126454006,
> +
> m5_rate: 0.14211865026090975,
> +
> mean_rate: 0.5343847126926461,
> +
> duration_units: "milliseconds",
> +
> rate_units: "calls/minute"
> },
> o
> createMessageMethodReferences:
> {
> +
> count: 1,
> +
> max: 0.648,
> +
> mean: 0.648,
> +
> min: 0.648,
> +
> p50: 0.648,
> +
> p75: 0.648,
> +
> p95: 0.648,
> +
> p98: 0.648,
> +
> p99: 0.648,
> +
> p999: 0.648,
> +
> stddev: 0,
> +
> m15_rate: 0.05982197273776584,
> +
> m1_rate: 0.19696865690816925,
> +
> m5_rate: 0.14450714325124409,
> +
> mean_rate: 0.5343791108783038,
> +
> duration_units: "milliseconds",
> +
> rate_units: "calls/minute"
> },
> o
> createMessageOptional:
> {
> +
> count: 1,
> +
> max: 94.579,
> +
> mean: 94.579,
> +
> min: 94.579,
> +
> p50: 94.579,
> +
> p75: 94.579,
> +
> p95: 94.579,
> +
> p98: 94.579,
> +
> p99: 94.579,
> +
> p999: 94.579,
> +
> stddev: 0,
> +
> m15_rate: 10.678581251856285,
> +
> m1_rate: 2.0852873214053433,
> +
> m5_rate: 8.456257076624562,
> +
> mean_rate: 0.5343875445806129,
> +
> duration_units: "milliseconds",
> +
> rate_units: "calls/minute"
> },
> o
> getMessages:
> {
> +
> count: 3,
> +
> max: 9.809999999999999,
> +
> mean: 3.6413333333333333,
> +
> min: 0.514,
> +
> p50: 0.6,
> +
> p75: 9.809999999999999,
> +
> p95: 9.809999999999999,
> +
> p98: 9.809999999999999,
> +
> p99: 9.809999999999999,
> +
> p999: 9.809999999999999,
> +
> stddev: 5.342395093339066,
> +
> m15_rate: 0.18767034671569677,
> +
> m1_rate: 1.2185014871528328,
> +
> m5_rate: 0.49650226189858143,
> +
> mean_rate: 1.6030845484157583,
> +
> duration_units: "milliseconds",
> +
> rate_units: "calls/minute"
> },
> o
> getMetrics:
> {
> +
> count: 0,
> +
> max: 0,
> +
> mean: 0,
> +
> min: 0,
> +
> p50: 0,
> +
> p75: 0,
> +
> p95: 0,
> +
> p98: 0,
> +
> p99: 0,
> +
> p999: 0,
> +
> stddev: 0,
> +
> m15_rate: 0,
> +
> m1_rate: 0,
> +
> m5_rate: 0,
> +
> mean_rate: 0,
> +
> duration_units: "milliseconds",
> +
> rate_units: "calls/minute"
> }
> }
>
> }
>
>
>
>
>
>
> On Thu, Jul 3, 2014 at 9:28 AM, Bill O'Neil <bill at dartalley.com
> <mailto:bill at dartalley.com>> wrote:
>
> I have mostly just been getting familiar with undertow for side
> projects. I would be happy to share anything I come up with though
> to get some feedback.
>
>
> On Wed, Jul 2, 2014 at 10:44 AM, Jason Greene
> <jason.greene at redhat.com <mailto:jason.greene at redhat.com>> wrote:
>
> On Jul 2, 2014, at 9:02 AM, Bill O'Neil <bill at dartalley.com
> <mailto:bill at dartalley.com>> wrote:
>
> > Is there any plan to open up an undertow-ext library where
> the community can make small modules that hook into 3rd party
> dependencies? For example, an HttpHandler that uses
> Jackson/Gson to serialize to json and set appropriate headers,
> or an HTML templating framework for rendering HTML.
> >
> > Would you prefer these to be hosted by 3rd parties instead?
>
> I think this is a great idea. Are you interested in being a
> maintainer of such a thing?
>
> --
> Jason T. Greene
> WildFly Lead / JBoss EAP Platform Architect
> JBoss, a division of Red Hat
>
>
>


More information about the undertow-dev mailing list