Is there a reason SimpleRole#equals(Object) uses Class#cast(Object) instead of a normal Java cast? We did some profiling of our application and this method showed up.
A related issue seems to be that SimpleRoleGroup#roles is a ArrayList rather than a Set so every add* method has to call java.util.ArrayList#indexOf(Object) which has linear rather than constant complexity.