* Add ability to listen on component lifecycle
* Use ReentrantReadWriteLock in PermitManager