We probably don't show the DATA pool configuration in any example, but the way is easy.
Just take the template of the adapters.xml configuration file in the in-process Adapter SDK and look for "data_adapter_pool".
Here is the link for Moderato.
If subscribe() is slow, the delay will affect the originating client subscription and any other client subscription to the same item happening at the same time.
Afterwards, as long as there is at least one client subscription active, other client subscriptions to the same item are handled by Lightstreamer immediately, as you pointed out.
If all client subscriptions are closed, unsubscribe() is invoked and the next client subscription to the same item will cause subscribe() to be invoked again.
So, if subscribe() is very slow and the clients give up, it is possible that the unsubscribe() and a subsequent subscribe() are required before its termination and in that case they will be delayed. This is what the Javadoc meant.
If you perform subscribe() and unsubscribe() asynchronously, then, as you correctly notice, you cannot signal a subscription failure.
But this is not very important, as the only difference is that, if subscribe() throws a SubscriptionException, the Server will log the exception and will not invoke unsubscribe().
However, as subscribe() and unsubscribe() operations are enqueued by your Adapter, you must be careful in associating any update notification to the corresponding subscribe() invocation.
To this purpose, it is advised that you always use smartUpdate() rather than update().
I don't see alternatives, but the latter technique should be feasible.