On Tue, Oct 13, 2020 at 8:27 PM Michael Osipov <micha...@apache.org> wrote:

> Am 2020-10-13 um 16:05 schrieb r...@apache.org:
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > remm pushed a commit to branch 8.5.x
> > in repository https://gitbox.apache.org/repos/asf/tomcat.git
> >
> >
> > The following commit(s) were added to refs/heads/8.5.x by this push:
> >       new 883600b  Always retry on a new connection, even when pooling
> > 883600b is described below
> >
> > commit 883600b8a77c0be93b3a8dc2404e8d1110970ee7
> > Author: remm <r...@apache.org>
> > AuthorDate: Tue Oct 13 14:19:54 2020 +0200
> >
> >      Always retry on a new connection, even when pooling
> >
> >      This keeps the same very simple design as for the single connection
> >      scenario, for now.
> > ---
> >   java/org/apache/catalina/realm/JNDIRealm.java | 22
> +++++++++++++++++++---
> >   webapps/docs/changelog.xml                    |  5 +++++
> >   2 files changed, 24 insertions(+), 3 deletions(-)
> >
> > diff --git a/java/org/apache/catalina/realm/JNDIRealm.java
> b/java/org/apache/catalina/realm/JNDIRealm.java
> > index 72087ab..98007f7 100644
> > --- a/java/org/apache/catalina/realm/JNDIRealm.java
> > +++ b/java/org/apache/catalina/realm/JNDIRealm.java
> > @@ -1311,7 +1311,7 @@ public class JNDIRealm extends RealmBase {
> >                   close(connection);
> >
> >                   // open a new directory context.
> > -                connection = get();
> > +                connection = get(true);
> >
> >                   // Try the authentication again.
> >                   principal = authenticate(connection, username,
> credentials);
> > @@ -2389,12 +2389,28 @@ public class JNDIRealm extends RealmBase {
> >        * @exception NamingException if a directory server error occurs
> >        */
> >       protected JNDIConnection get() throws NamingException {
> > +        return get(false);
> > +    }
> > +
> > +    /**
> > +     * Open (if necessary) and return a connection to the configured
> > +     * directory server for this Realm.
> > +     * @param create when pooling, this forces creation of a new
> connection,
> > +     *   for example after an error
> > +     * @return the connection
> > +     * @exception NamingException if a directory server error occurs
> > +     */
> > +    protected JNDIConnection get(boolean create) throws NamingException
> {
> >           JNDIConnection connection = null;
> >           // Use the pool if available, otherwise use the single
> connection
> >           if (connectionPool != null) {
> > -            connection = connectionPool.pop();
> > -            if (connection == null) {
> > +            if (create) {
> >                   connection = create();
> > +            } else {
> > +                connection = connectionPool.pop();
> > +                if (connection == null) {
> > +                    connection = create();
> > +                }
> >               }
> >           } else {
> >               singleConnectionLock.lock();
>
> That suitable and simple approach.
>

If you have the code for adding a max idle check on hand and tested, you
should add it IMO, it will be more efficient.

Rémy

Reply via email to