void processPropertyChange( String propertyName )
        {
            final Set<String> ofInterest = new HashSet<>();
            ofInterest.add( "sms.smpp.host" );
            ofInterest.add( "sms.smpp.port" );
            ofInterest.add( "sms.smpp.systemId" );
            ofInterest.add( "sms.smpp.password" );
            ofInterest.add( "sms.smpp.systemType" );
            ofInterest.add( "sms.smpp.receive.ton" );
            ofInterest.add( "sms.smpp.receive.npi" );

            if ( ofInterest.contains( propertyName ) )
            {
                Log.debug( "Property change for '{}' detected. Clearing all (inactive) sessions.", propertyName );
                if ( getNumActive() > 0 )
                {
                    // This can occur when an SMS is being sent while the property is being updated at the same time.
                    Log.warn( "Note that property change for '{}' will not affect one or more sessions that are currently actively used (although changes will be applied after the session is rotated out, due to time-based eviction).", propertyName );
                }
                clear();
            }

            // No need to clear the sessions for these properties:
            if ( propertyName.equals( "sms.smpp.connections.maxAmount" ) )
            {
                setMaxTotal( JiveGlobals.getIntProperty( "sms.smpp.connections.maxAmount", 1 ) );
                setNumTestsPerEvictionRun( getMaxTotal() );
            }

            if ( propertyName.equals( "sms.smpp.connections.idleMillis" ) )
            {
                setMinEvictableIdleTimeMillis( JiveGlobals.getLongProperty( "sms.smpp.connections.idleMillis", 1000 * 60 * 2 ) );
                if ( getMinEvictableIdleTimeMillis() > 0 )
                {
                    setTimeBetweenEvictionRunsMillis( getMinEvictableIdleTimeMillis() / 10 );
                }
            }
        }
Implementation of an Object pool that manages instances of SMPPSession. The intend of this pool is to have a
single session, that's allowed to be idle for at least two minutes before being closed.

The pool reacts to Openfire property changes, clearing all (inactive) sessions when a property used to create
a session is modified. Note that sessions that are borrowed from the pool are not affected by such a change. When
a property change occurs while a session is borrowed, a warning is logged (the property change will be applied
when that session is eventually rotated out of the pool by the eviction strategy.

@author Guus der Kinderen, guus.der.kinderen@gmail.com
xmppserver/src/main/java/org/jivesoftware/util/SmsService.java