<div dir="ltr">Hi,<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 8, 2015 at 8:25 AM, Philippe Marschall <span dir="ltr">&lt;<a href="mailto:kustos@gmx.net" target="_blank">kustos@gmx.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi<br>
<br>
I’m aware this may no technically be the right list to discuss this but this list is impacted by this and fairly active.<br>
<br>
During load testing of our application we found a case we spend 10% of your CPU time in SimpleRole#equals (see attachment). This is because SimpleRoleGroup uses an ArrayList to maintain a unique set of roles. As a result it has to call ArrayList#contains a lot, which is itself O(n). In fact because that’s done when iterating over all the roles it becomes O(n^2). In our case our principals can have up to 200 roles. I don’t know if this is exceptionally many or a common case.<br></blockquote><div><br></div><div>200 doesn&#39;t seem like so many. The &quot;problem&quot; often is that the term &quot;role&quot; makes people think they are only allowed to use it for things like &quot;administrator&quot; and &quot;manager&quot; and such. In that view 200 may be much.</div><div><br></div><div>But, nothing in Java EE security imposes this, and if you want to use roles with names like &quot;can_see_updated_interest&quot;, then 200 is really nothing.</div><div><br></div><div>From the call stack, I guess this is triggered via @RolesAllowed on an EJB right?</div><div><br></div><div>Theoretically, this is where JACC could come in according to the Java EE standards. This would allow you to implement your own (optimized if necessary) logic for &quot;is user/caller in role&quot;.</div><div><br></div><div>However despite being Java EE 7 certified, it seems it&#39;s not actually possible to install a JACC provider on JBoss. This is a bit of a spec hole, unfortunately. Most of the code seems to be there in JBoss (WildFly), but there&#39;s just no place where you can actually put your own JACC provider.</div><div><br></div><div>Kind regards,</div><div>Arjan Tijms</div></div></div></div>