There are 2 options here:
Metadata can take a ServiceRegistry as ctor param : new Metadata( serviceRegistry )
this will be the short term solution
serviceRegistry.getService( Metadata.class )
possibly the long term solution
pro/con: metadata lives on as part of SessionFactory (would continue to be available)
possible first step to allowing "changes on the fly"
maybe utilize internal caching (not our cache API) rather than simple maps to leverage disk storage capabilities of the cache (infinispan or ehcache)