obviously all the load in the adapter is load on the server process.

you may want to optimize the thread usage using java.util.concurrent classes

also, if the data is not completely user-customized but you simply have different users that can see different sets of data you may want to use the getItems method to translate the id with the set of items the user can see ( set of data -> item ).

In any case you may want to check that the id a user is subscribing is his own. You can implemt your MetadataProvider to do such checks