Hi guys,

so as outlined in previous thread [1], I have prototyped a JMS batching approach for push message delivery.




We've discussed the approach with Matthias, Mirek Novak and Ondrej Chaloupka (EAP QE & JMS/JTA experts, thank you guys!) and these documents describes a concept that we have came with:

Diagram: https://docs.google.com/a/fryc.eu/drawings/d/13IsJWPSJNYXtst-UVxQYmzH36C_EXQMYYr_jcu7nFmE/edit?usp=sharing

Text Doc: https://docs.google.com/document/d/1X65P_U9O62Z5JZhKi9ZvBuZU1OrL4pNHNddlzJK6rMg/edit?usp=sharing






Implementation-wise, I've so far prototyped the messaging part (split SenderService functionality to two subsequent queues with MDBs as shown on diagram),

but that's just a start, since we must configure it appropriately for efficiency (queue configuration and batch sizes) and verify that configuration works as expected,

the prototype lives on a branch (unpolished, to be squashed later): https://github.com/lfryc/aerogear-unifiedpush-server/tree/jms-batching

Off course, you can play with it already. :-)





Apart from the new requirement of using Java EE full profile (JMS), the prototype leverages implementation-specific configurations and APIs:
That pretty much binds us to WildFly/EAP - we can tweak it to run on any compliant app server, but without specific configurations it won't work properly.



Once configured and functionally tested (that can even wait for Beta2 I guess),

we can cooperate with Mobile QE on testing (Stefan, Adam), their test suite contains mocks of APNS/GCM against which we can load test.



Cheers!

~ Lukas


[1] http://aerogear-dev.1069024.n5.nabble.com/aerogear-dev-UnifiedPush-new-requirement-JMS-Java-EE-Full-profile-tp11268.html