MMPP is usually only relevant for MessageSources that emit messages one-at-a-time. As you have found, the JPA adapter creates a list that can be busted apart into single messages with a simple <splitter/>.
If, say, there are 100 objects but you limit the max results to 10 and you set MMPP to 10 (or higher); you'll get 10 messages with 10 each. However, this could cost 10 round trips to the database. You'd be better off just getting all 100 in a single call.
Hope that's clear.
As far as the task executor is concerned - it's all about when the message is handed off to another thread.
In Artem's example, the handoff is done AFTER the splitter - this means that each individual message will processed in parallel (up to the pool size).
By putting it on the <poller/>, you'd do the handoff before the spliiter, so you wouldn't get any parallel processing - each "split" message would be handled on the same thread (serially).
Of course, if you want all the processing to occur in a single transaction, then you must not handoff to another thread.
Gary P. Russell
Spring Integration Team
SpringSource, a division of VMware