<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Probably best to log a bug to capture this issue. <br>
    </p>
    <p>It reminds me of another issue I've been meaning to wrap up:<br>
      <a class="moz-txt-link-freetext" href="https://bugs.openjdk.java.net/browse/JDK-8223260">https://bugs.openjdk.java.net/browse/JDK-8223260</a></p>
    <p>Similar scenario in how the ContextFactory is searched for. My
      proposed<br>
      patch is to cache a factory per classloader (for the NamingManager
      issue at least)<br>
      <br>
      regards,<br>
      Sean.<br>
    </p>
    <div class="moz-cite-prefix">On 27/08/2019 16:16, Florent Guillaume
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAF-4BpM+8m_mWHsBZJTepu_sPF-kfQPMy0GpjH1my3-o144E4A@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div dir="ltr">
          <div dir="ltr">
            <div dir="ltr">
              <div dir="ltr">
                <div dir="ltr">
                  <div dir="ltr">
                    <div dir="ltr">
                      <div dir="ltr">Hi,
                        <div><br>
                        </div>
                        <div>When switching from Java 8 to Java 11,
                          we're experiencing an important slowdown when
                          executing LoginContext.login(), especially
                          under concurrency.</div>
                        <div><br>
                        </div>
                        <div>We tracked this down to JDK-8047789 which
                          changed the way the lookup of LoginModules is
                          done in LoginContext.invoke. Previously, it
                          was a simple Class.forName that is of course
                          extremely optimized. After JDK-8047789, there
                          is first a ServiceLoader-based lookup for the
                          class. This lookup doesn't seem to be cached.
                          In our case, it has to open the 400+ JARs in
                          our classpath (we're not using modules yet) to
                          check the content
                          of META-INF/services/javax.security.auth.spi.LoginModule,
                          and in addition this hits a synchronized block
                          in ZipFile.getEntry which prevents any
                          performance under concurrency.</div>
                        <div><br>
                        </div>
                        <div>Is there anything we can do to improve
                          LoginContext.login() in this context?</div>
                        <div><br>
                        </div>
                        <div>For reference, the code path to the
                          synchronized block:</div>
                        <div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.zip.ZipFile.getEntry(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ZipFile.java:346">java.base@11.0.4/ZipFile.java:346</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>-
                            locked <0x000000068b18bdd0> (a
                            java.util.jar.JarFile)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.zip.ZipFile$1.getEntry(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ZipFile.java:1121">java.base@11.0.4/ZipFile.java:1121</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.jar.JarFile.getEntry0(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/JarFile.java:576">java.base@11.0.4/JarFile.java:576</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.jar.JarFile.getEntry(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/JarFile.java:506">java.base@11.0.4/JarFile.java:506</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.jar.JarFile.getJarEntry(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/JarFile.java:468">java.base@11.0.4/JarFile.java:468</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
jdk.internal.loader.URLClassPath$JarLoader.getResource(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassPath.java:929">java.base@11.0.4/URLClassPath.java:929</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
jdk.internal.loader.URLClassPath$JarLoader.findResource(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassPath.java:912">java.base@11.0.4/URLClassPath.java:912</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
jdk.internal.loader.URLClassPath$1.next(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassPath.java:341">java.base@11.0.4/URLClassPath.java:341</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
jdk.internal.loader.URLClassPath$1.hasMoreElements(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassPath.java:351">java.base@11.0.4/URLClassPath.java:351</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.net.URLClassLoader$3$1.run(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassLoader.java:687">java.base@11.0.4/URLClassLoader.java:687</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.net.URLClassLoader$3$1.run(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassLoader.java:685">java.base@11.0.4/URLClassLoader.java:685</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.security.AccessController.doPrivileged(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/Native">java.base@11.0.4/Native</a>
                            Method)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.net.URLClassLoader$3.next(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassLoader.java:684">java.base@11.0.4/URLClassLoader.java:684</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.net.URLClassLoader$3.hasMoreElements(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/URLClassLoader.java:709">java.base@11.0.4/URLClassLoader.java:709</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.lang.CompoundEnumeration.next(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ClassLoader.java:3022">java.base@11.0.4/ClassLoader.java:3022</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.lang.CompoundEnumeration.hasMoreElements(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ClassLoader.java:3031">java.base@11.0.4/ClassLoader.java:3031</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
org.apache.catalina.loader.WebappClassLoaderBase$CombinedEnumeration.inc(WebappClassLoaderBase.java:2670)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
org.apache.catalina.loader.WebappClassLoaderBase$CombinedEnumeration.hasMoreElements(WebappClassLoaderBase.java:2655)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ServiceLoader.java:1202">java.base@11.0.4/ServiceLoader.java:1202</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ServiceLoader.java:1220">java.base@11.0.4/ServiceLoader.java:1220</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ServiceLoader.java:1264">java.base@11.0.4/ServiceLoader.java:1264</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.ServiceLoader$2.hasNext(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ServiceLoader.java:1299">java.base@11.0.4/ServiceLoader.java:1299</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.util.ServiceLoader$3.hasNext(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/ServiceLoader.java:1384">java.base@11.0.4/ServiceLoader.java:1384</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
javax.security.auth.login.LoginContext.invoke(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/LoginContext.java:691">java.base@11.0.4/LoginContext.java:691</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
javax.security.auth.login.LoginContext$4.run(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/LoginContext.java:665">java.base@11.0.4/LoginContext.java:665</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
javax.security.auth.login.LoginContext$4.run(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/LoginContext.java:663">java.base@11.0.4/LoginContext.java:663</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
java.security.AccessController.doPrivileged(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/Native">java.base@11.0.4/Native</a>
                            Method)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
javax.security.auth.login.LoginContext.invokePriv(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/LoginContext.java:663">java.base@11.0.4/LoginContext.java:663</a>)</div>
                          <div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>at
javax.security.auth.login.LoginContext.login(<a class="moz-txt-link-abbreviated" href="mailto:java.base@11.0.4/LoginContext.java:574">java.base@11.0.4/LoginContext.java:574</a>)</div>
                        </div>
                        <div><br>
                        </div>
                        <div>Thanks,</div>
                        <div><br>
                        </div>
                        <div>Florent<br clear="all">
                          <div><br>
                          </div>
                          -- <br>
                          <div dir="ltr" class="gmail_signature">
                            <div dir="ltr">
                              <div>
                                <div dir="ltr">
                                  <table
style="color:rgb(10,10,10);font-family:Arial,Helvetica,sans-serif;font-size:12px;border-collapse:collapse;border-spacing:0px;padding:0px;vertical-align:top;width:600px">
                                    <tbody>
                                      <tr
                                        style="padding:0px;vertical-align:top">
                                        <td
style="font-family:Arial,Helvetica,sans-serif;line-height:1.33;padding:0px;vertical-align:top;word-wrap:break-word;width:38px;border-collapse:collapse"><a
href="https://www.nuxeo.com/"
style="background-color:transparent;border-bottom-width:0px;color:rgb(0,102,255);line-height:1.33;margin:0px;padding:0px"
                                            target="_blank"
                                            moz-do-not-send="true"><img
src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_64/nuxeo-logo-x.png"
                                              alt="Nuxeo Logo"
                                              style="border: none;
                                              display: block;
                                              vertical-align: middle;
                                              max-width: 100%; height:
                                              32px; clear: both;
                                              margin-top: 4px; outline:
                                              0px; text-decoration:
                                              none; width: 32px;"
                                              moz-do-not-send="true"
                                              width="32" height="32"></a></td>
                                        <td
style="font-family:Arial,Helvetica,sans-serif;line-height:1.33;padding:0px;vertical-align:top;word-wrap:break-word;border-collapse:collapse">
                                          <p
style="font-size:15px;line-height:1.33;color:rgb(31,40,191);margin:0px;padding:0px"><span
                                              style="font-weight:700">Florent
                                              Guillaume</span>  Head of
                                            R&D  <a
                                              href="https://www.linkedin.com/in/fguillaume/"
style="background-color:transparent;border-bottom-width:0px;color:inherit"
                                              target="_blank"
                                              moz-do-not-send="true"><img
src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_28/static/linkedin.png"
                                                alt="LinkedIn"
                                                style="border-style:
                                                none; display:
                                                inline-block;
                                                vertical-align: middle;
                                                max-width: 100%; height:
                                                auto;"
                                                moz-do-not-send="true"
                                                width="14" height="14"></a> <a
href="https://twitter.com/efge"
style="background-color:transparent;border-bottom-width:0px;color:inherit"
                                              target="_blank"
                                              moz-do-not-send="true"><img
src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_28/static/twitter.png"
                                                alt="Twitter"
                                                style="border-style:
                                                none; display:
                                                inline-block;
                                                vertical-align: middle;
                                                max-width: 100%; height:
                                                auto;"
                                                moz-do-not-send="true"
                                                width="14" height="14"></a> <a
href="https://github.com/efge"
style="background-color:transparent;border-bottom-width:0px;color:inherit"
                                              target="_blank"
                                              moz-do-not-send="true"><img
src="http://res.cloudinary.com/nuxeo/image/upload/c_scale,w_28/static/github.png"
                                                alt="Github"
                                                style="border-style:
                                                none; display:
                                                inline-block;
                                                vertical-align: middle;
                                                max-width: 100%; height:
                                                auto;"
                                                moz-do-not-send="true"
                                                width="14" height="14"></a></p>
                                          <p
style="font-weight:700;font-size:15px;line-height:1.33;color:rgb(0,102,255);margin:0px
                                            0px 10px;padding:0px">Nuxeo
                                            Content Services Platform. <span
style="color:rgb(31,40,191)">Stay ahead.</span></p>
                                        </td>
                                      </tr>
                                    </tbody>
                                  </table>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
  </body>
</html>