Hi,
Some clarifications are needed:

DataProvider - The implementation that will manage all the updates both for common items and user-specific items.
MetaDataProvider - The implementation that will use the username, password info in getItems function to provide user specific handling customizing general item names to user-specific ones.
JMSAdapter - Just a specific DataProvider implementation used as example in our distribution that receives messages over JMS.

You can take a look to the javadocs of MetadataProvider and DataProvider, to the "General Concept.pdf" file (find it under the DOCS-SDKs folder of the distribution) and to the User-specific push thread for further clarifications.