Exploiting runtime bytecode manipulation to add roles to Java agents