I only have one beef with app roles: you can't disengage it once it's been engaged. The app role is engaged until the connection is closed. The connection may or may not be close when you destroy the connection object, depending on whether connection pooling is enabled. If connection pooling is enabled, the connection will be returned to the pool where it will either expire and be closed or handed out the next time that a connection is requested.
If the connection is reused, the app role will still be engaged.
Cute eh?
-Mike