You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2015/10/06 07:22:59 UTC

[2/4] mina-sshd git commit: [SSHD-566] Allow specific properties overrides per session and channel

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSessionImpl.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSessionImpl.java b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSessionImpl.java
index 11ca880..b524923 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSessionImpl.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerSessionImpl.java
@@ -26,8 +26,8 @@ import java.util.Map;
 import java.util.Objects;
 
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.NamedResource;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.ServiceFactory;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
@@ -58,8 +58,8 @@ public class ServerSessionImpl extends AbstractSession implements ServerSession
 
     public ServerSessionImpl(ServerFactoryManager server, IoSession ioSession) throws Exception {
         super(true, server, ioSession);
-        maxBytes = Math.max(32, getLongProperty(ServerFactoryManager.REKEY_BYTES_LIMIT, maxBytes));
-        maxKeyInterval = getLongProperty(ServerFactoryManager.REKEY_TIME_LIMIT, maxKeyInterval);
+        maxBytes = Math.max(32, PropertyResolverUtils.getLongProperty(this, ServerFactoryManager.REKEY_BYTES_LIMIT, maxBytes));
+        maxKeyInterval = PropertyResolverUtils.getLongProperty(this, ServerFactoryManager.REKEY_TIME_LIMIT, maxKeyInterval);
         log.info("Server session created from {}", ioSession.getRemoteAddress());
         sendServerIdentification();
     }
@@ -101,7 +101,7 @@ public class ServerSessionImpl extends AbstractSession implements ServerSession
 
     protected void sendServerIdentification() {
         FactoryManager manager = getFactoryManager();
-        String ident = FactoryManagerUtils.getString(manager, ServerFactoryManager.SERVER_IDENTIFICATION);
+        String ident = PropertyResolverUtils.getString(manager, ServerFactoryManager.SERVER_IDENTIFICATION);
         if (GenericUtils.isEmpty(ident)) {
             serverVersion = DEFAULT_SSH_VERSION_PREFIX + manager.getVersion();
         } else {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
index 6c7a096..493ef4d 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerUserAuthService.java
@@ -23,10 +23,9 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.NamedResource;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.Service;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
@@ -63,14 +62,14 @@ public class ServerUserAuthService extends AbstractCloseable implements Service,
         }
 
         this.session = (ServerSession) s;
-        maxAuthRequests = session.getIntProperty(ServerFactoryManager.MAX_AUTH_REQUESTS, ServerFactoryManager.DEFAULT_MAX_AUTH_REQUESTS);
+        maxAuthRequests = PropertyResolverUtils.getIntProperty(session, ServerFactoryManager.MAX_AUTH_REQUESTS, ServerFactoryManager.DEFAULT_MAX_AUTH_REQUESTS);
 
         ServerFactoryManager manager = getFactoryManager();
         userAuthFactories = new ArrayList<>(manager.getUserAuthFactories());
         // Get authentication methods
         authMethods = new ArrayList<>();
 
-        String mths = FactoryManagerUtils.getString(manager, ServerFactoryManager.AUTH_METHODS);
+        String mths = PropertyResolverUtils.getString(session, ServerFactoryManager.AUTH_METHODS);
         if (GenericUtils.isEmpty(mths)) {
             for (NamedFactory<UserAuth> uaf : manager.getUserAuthFactories()) {
                 authMethods.add(new ArrayList<>(Collections.singletonList(uaf.getName())));
@@ -203,8 +202,7 @@ public class ServerUserAuthService extends AbstractCloseable implements Service,
         }
 
         if (success) {
-            FactoryManager manager = getFactoryManager();
-            Integer maxSessionCount = FactoryManagerUtils.getInteger(manager, ServerFactoryManager.MAX_CONCURRENT_SESSIONS);
+            Integer maxSessionCount = PropertyResolverUtils.getInteger(session, ServerFactoryManager.MAX_CONCURRENT_SESSIONS);
             if (maxSessionCount != null) {
                 int currentSessionCount = session.getActiveSessionCountForUser(username);
                 if (currentSessionCount >= maxSessionCount) {
@@ -222,9 +220,9 @@ public class ServerUserAuthService extends AbstractCloseable implements Service,
              *      authentication is successful.  This message contains text to be
              *      displayed to the client user before authentication is attempted.
              */
-            String welcomeBanner = FactoryManagerUtils.getString(manager, ServerFactoryManager.WELCOME_BANNER);
+            String welcomeBanner = PropertyResolverUtils.getString(session, ServerFactoryManager.WELCOME_BANNER);
             if (GenericUtils.length(welcomeBanner) > 0) {
-                String lang = FactoryManagerUtils.getStringProperty(manager,
+                String lang = PropertyResolverUtils.getStringProperty(session,
                                         ServerFactoryManager.WELCOME_BANNER_LANGUAGE,
                                         ServerFactoryManager.DEFAULT_WELCOME_BANNER_LANGUAGE);
                 buffer = session.createBuffer(SshConstants.SSH_MSG_USERAUTH_BANNER, welcomeBanner.length() + lang.length() + Long.SIZE);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java b/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java
index d47fc74..eb06156 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java
@@ -66,8 +66,9 @@ import java.util.concurrent.Future;
 
 import org.apache.sshd.common.Factory;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.common.PropertyResolver;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.config.VersionProperties;
 import org.apache.sshd.common.digest.BuiltinDigests;
 import org.apache.sshd.common.digest.Digest;
@@ -96,81 +97,6 @@ import org.apache.sshd.server.ExitCallback;
 import org.apache.sshd.server.SessionAware;
 import org.apache.sshd.server.session.ServerSession;
 
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.ACE4_APPEND_DATA;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.ACE4_READ_ATTRIBUTES;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.ACE4_READ_DATA;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.ACE4_WRITE_ATTRIBUTES;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.ACE4_WRITE_DATA;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.EXT_NEWLINE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.EXT_SUPPORTED;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.EXT_SUPPORTED2;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.EXT_VENDOR_ID;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.EXT_VERSIONS;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SFTP_V3;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SFTP_V4;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SFTP_V5;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SFTP_V6;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_ACCESSTIME;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_ALL;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_BITS;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_CREATETIME;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_MODIFYTIME;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_OWNERGROUP;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_PERMISSIONS;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FILEXFER_ATTR_SIZE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_ACCESS_DISPOSITION;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_APPEND;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_APPEND_DATA;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_APPEND_DATA_ATOMIC;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_CREAT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_CREATE_NEW;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_CREATE_TRUNCATE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_EXCL;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_OPEN_EXISTING;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_OPEN_OR_CREATE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_READ;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_TRUNC;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_TRUNCATE_EXISTING;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXF_WRITE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_ATTRS;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_BLOCK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_CLOSE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_DATA;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_EXTENDED;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_EXTENDED_REPLY;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_FSETSTAT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_FSTAT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_HANDLE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_INIT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_LINK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_LSTAT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_MKDIR;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_NAME;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_OPEN;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_OPENDIR;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_READ;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_READDIR;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_READLINK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_REALPATH;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_REALPATH_STAT_ALWAYS;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_REALPATH_STAT_IF;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_REMOVE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_RENAME;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_RENAME_ATOMIC;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_RENAME_OVERWRITE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_RMDIR;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_SETSTAT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_STAT;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_STATUS;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_SYMLINK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_UNBLOCK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_VERSION;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FXP_WRITE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FX_FAILURE;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FX_OK;
-import static org.apache.sshd.common.subsystem.sftp.SftpConstants.SSH_FX_OP_UNSUPPORTED;
-
 /**
  * SFTP subsystem
  *
@@ -211,8 +137,8 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      */
     public static final String SFTP_VERSION = "sftp-version";
 
-    public static final int LOWER_SFTP_IMPL = SFTP_V3; // Working implementation from v3
-    public static final int HIGHER_SFTP_IMPL = SFTP_V6; //  .. up to
+    public static final int LOWER_SFTP_IMPL = SftpConstants.SFTP_V3; // Working implementation from v3
+    public static final int HIGHER_SFTP_IMPL = SftpConstants.SFTP_V6; //  .. up to
     public static final String ALL_SFTP_IMPL;
 
     /**
@@ -376,11 +302,11 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         Factory<? extends Random> factory = manager.getRandomFactory();
         this.randomizer = factory.create();
 
-        this.fileHandleSize = FactoryManagerUtils.getIntProperty(manager, FILE_HANDLE_SIZE, DEFAULT_FILE_HANDLE_SIZE);
+        this.fileHandleSize = PropertyResolverUtils.getIntProperty(session, FILE_HANDLE_SIZE, DEFAULT_FILE_HANDLE_SIZE);
         ValidateUtils.checkTrue(this.fileHandleSize >= MIN_FILE_HANDLE_SIZE, "File handle size too small: %d", this.fileHandleSize);
         ValidateUtils.checkTrue(this.fileHandleSize <= MAX_FILE_HANDLE_SIZE, "File handle size too big: %d", this.fileHandleSize);
 
-        this.maxFileHandleRounds = FactoryManagerUtils.getIntProperty(manager, MAX_FILE_HANDLE_RAND_ROUNDS, DEFAULT_FILE_HANDLE_ROUNDS);
+        this.maxFileHandleRounds = PropertyResolverUtils.getIntProperty(session, MAX_FILE_HANDLE_RAND_ROUNDS, DEFAULT_FILE_HANDLE_ROUNDS);
         ValidateUtils.checkTrue(this.maxFileHandleRounds >= MIN_FILE_HANDLE_ROUNDS, "File handle rounds too small: %d", this.maxFileHandleRounds);
         ValidateUtils.checkTrue(this.maxFileHandleRounds <= MAX_FILE_HANDLE_ROUNDS, "File handle rounds too big: %d", this.maxFileHandleRounds);
 
@@ -485,81 +411,81 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         }
 
         switch (type) {
-            case SSH_FXP_INIT:
+            case SftpConstants.SSH_FXP_INIT:
                 doInit(buffer, id);
                 break;
-            case SSH_FXP_OPEN:
+            case SftpConstants.SSH_FXP_OPEN:
                 doOpen(buffer, id);
                 break;
-            case SSH_FXP_CLOSE:
+            case SftpConstants.SSH_FXP_CLOSE:
                 doClose(buffer, id);
                 break;
-            case SSH_FXP_READ:
+            case SftpConstants.SSH_FXP_READ:
                 doRead(buffer, id);
                 break;
-            case SSH_FXP_WRITE:
+            case SftpConstants.SSH_FXP_WRITE:
                 doWrite(buffer, id);
                 break;
-            case SSH_FXP_LSTAT:
+            case SftpConstants.SSH_FXP_LSTAT:
                 doLStat(buffer, id);
                 break;
-            case SSH_FXP_FSTAT:
+            case SftpConstants.SSH_FXP_FSTAT:
                 doFStat(buffer, id);
                 break;
-            case SSH_FXP_SETSTAT:
+            case SftpConstants.SSH_FXP_SETSTAT:
                 doSetStat(buffer, id);
                 break;
-            case SSH_FXP_FSETSTAT:
+            case SftpConstants.SSH_FXP_FSETSTAT:
                 doFSetStat(buffer, id);
                 break;
-            case SSH_FXP_OPENDIR:
+            case SftpConstants.SSH_FXP_OPENDIR:
                 doOpenDir(buffer, id);
                 break;
-            case SSH_FXP_READDIR:
+            case SftpConstants.SSH_FXP_READDIR:
                 doReadDir(buffer, id);
                 break;
-            case SSH_FXP_REMOVE:
+            case SftpConstants.SSH_FXP_REMOVE:
                 doRemove(buffer, id);
                 break;
-            case SSH_FXP_MKDIR:
+            case SftpConstants.SSH_FXP_MKDIR:
                 doMakeDirectory(buffer, id);
                 break;
-            case SSH_FXP_RMDIR:
+            case SftpConstants.SSH_FXP_RMDIR:
                 doRemoveDirectory(buffer, id);
                 break;
-            case SSH_FXP_REALPATH:
+            case SftpConstants.SSH_FXP_REALPATH:
                 doRealPath(buffer, id);
                 break;
-            case SSH_FXP_STAT:
+            case SftpConstants.SSH_FXP_STAT:
                 doStat(buffer, id);
                 break;
-            case SSH_FXP_RENAME:
+            case SftpConstants.SSH_FXP_RENAME:
                 doRename(buffer, id);
                 break;
-            case SSH_FXP_READLINK:
+            case SftpConstants.SSH_FXP_READLINK:
                 doReadLink(buffer, id);
                 break;
-            case SSH_FXP_SYMLINK:
+            case SftpConstants.SSH_FXP_SYMLINK:
                 doSymLink(buffer, id);
                 break;
-            case SSH_FXP_LINK:
+            case SftpConstants.SSH_FXP_LINK:
                 doLink(buffer, id);
                 break;
-            case SSH_FXP_BLOCK:
+            case SftpConstants.SSH_FXP_BLOCK:
                 doBlock(buffer, id);
                 break;
-            case SSH_FXP_UNBLOCK:
+            case SftpConstants.SSH_FXP_UNBLOCK:
                 doUnblock(buffer, id);
                 break;
-            case SSH_FXP_EXTENDED:
+            case SftpConstants.SSH_FXP_EXTENDED:
                 doExtended(buffer, id);
                 break;
             default:
                 log.warn("Unknown command type received: {}", Integer.valueOf(type));
-                sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OP_UNSUPPORTED, "Command " + type + " is unsupported or not implemented");
+                sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OP_UNSUPPORTED, "Command " + type + " is unsupported or not implemented");
         }
 
-        if (type != SSH_FXP_INIT) {
+        if (type != SftpConstants.SSH_FXP_INIT) {
             requestsCount++;
         }
     }
@@ -604,7 +530,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
                 break;
             default:
                 log.info("Received unsupported SSH_FXP_EXTENDED({})", extension);
-                sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OP_UNSUPPORTED, "Command SSH_FXP_EXTENDED(" + extension + ") is unsupported or not implemented");
+                sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OP_UNSUPPORTED, "Command SSH_FXP_EXTENDED(" + extension + ") is unsupported or not implemented");
                 break;
         }
     }
@@ -620,7 +546,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         }
 
         buffer.clear();
-        buffer.putByte((byte) SSH_FXP_EXTENDED_REPLY);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_EXTENDED_REPLY);
         buffer.putInt(id);
         SpaceAvailableExtensionInfo.encode(buffer, info);
         send(buffer);
@@ -651,7 +577,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doTextSeek(int id, String handle, long line) throws IOException {
@@ -674,7 +600,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doOpenSSHFsync(int id, String handle) throws IOException {
@@ -697,7 +623,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         int blockSize = buffer.getInt();
         try {
             buffer.clear();
-            buffer.putByte((byte) SSH_FXP_EXTENDED_REPLY);
+            buffer.putByte((byte) SftpConstants.SSH_FXP_EXTENDED_REPLY);
             buffer.putInt(id);
             buffer.putString(SftpConstants.EXT_CHECK_FILE);
             doCheckFileHash(id, targetType, target, Arrays.asList(algos), startOffset, length, blockSize, buffer);
@@ -725,7 +651,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
              *       the server MUST return STATUS_PERMISSION_DENIED.
              */
             int access = fileHandle.getAccessMask();
-            if ((access & ACE4_READ_DATA) == 0) {
+            if ((access & SftpConstants.ACE4_READ_DATA) == 0) {
                 throw new AccessDeniedException("File not opened for read: " + path);
             }
         } else {
@@ -870,7 +796,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         }
 
         buffer.clear();
-        buffer.putByte((byte) SSH_FXP_EXTENDED_REPLY);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_EXTENDED_REPLY);
         buffer.putInt(id);
         buffer.putString(targetType);
         buffer.putBytes(hashValue);
@@ -897,7 +823,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
              *      was opened
              */
             int access = fileHandle.getAccessMask();
-            if ((access & ACE4_READ_DATA) == 0) {
+            if ((access & SftpConstants.ACE4_READ_DATA) == 0) {
                 throw new AccessDeniedException("File not opened for read: " + path);
             }
         } else {
@@ -1028,7 +954,9 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
          * channel.
          */
         if (requestsCount > 0L) {
-            sendStatus(BufferUtils.clear(buffer), id, SSH_FX_FAILURE, "Version selection not the 1st request for proposal = " + proposed);
+            sendStatus(BufferUtils.clear(buffer), id,
+                       SftpConstants.SSH_FX_FAILURE,
+                       "Version selection not the 1st request for proposal = " + proposed);
             session.close(true);
             return;
         }
@@ -1043,9 +971,9 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         }
         if (result) {
             version = Integer.parseInt(proposed);
-            sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+            sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
         } else {
-            sendStatus(BufferUtils.clear(buffer), id, SSH_FX_FAILURE, "Unsupported version " + proposed);
+            sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_FAILURE, "Unsupported version " + proposed);
             session.close(true);
         }
     }
@@ -1074,7 +1002,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         }
 
         int value = digit - '0';
-        String all = checkVersionCompatibility(buffer, id, value, SSH_FX_FAILURE);
+        String all = checkVersionCompatibility(buffer, id, value, SftpConstants.SSH_FX_FAILURE);
         if (GenericUtils.isEmpty(all)) {    // validation failed
             return null;
         } else {
@@ -1102,7 +1030,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         int hig = HIGHER_SFTP_IMPL;
         String available = ALL_SFTP_IMPL;
         // check if user wants to use a specific version
-        Integer sftpVersion = FactoryManagerUtils.getInteger(session, SFTP_VERSION);
+        Integer sftpVersion = PropertyResolverUtils.getInteger(session, SFTP_VERSION);
         if (sftpVersion != null) {
             int forcedValue = sftpVersion;
             if ((forcedValue < LOWER_SFTP_IMPL) || (forcedValue > HIGHER_SFTP_IMPL)) {
@@ -1139,7 +1067,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doBlock(int id, String handle, long offset, long length, int mask) throws IOException {
@@ -1165,7 +1093,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, found ? SSH_FX_OK : SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK, "");
+        sendStatus(BufferUtils.clear(buffer), id, found ? SftpConstants.SSH_FX_OK : SftpConstants.SSH_FX_NO_MATCHING_BYTE_RANGE_LOCK, "");
     }
 
     protected boolean doUnblock(int id, String handle, long offset, long length) throws IOException {
@@ -1196,7 +1124,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doLink(int id, String targetPath, String linkPath, boolean symLink) throws IOException {
@@ -1216,7 +1144,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doSymLink(int id, String targetPath, String linkPath) throws IOException {
@@ -1267,7 +1195,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         String oldPath = buffer.getString();
         String newPath = buffer.getString();
         int flags = 0;
-        if (version >= SFTP_V5) {
+        if (version >= SftpConstants.SFTP_V5) {
             flags = buffer.getInt();
         }
         try {
@@ -1277,7 +1205,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doRename(int id, String oldPath, String newPath, int flags) throws IOException {
@@ -1289,10 +1217,10 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         Collection<CopyOption> opts = Collections.emptyList();
         if (flags != 0) {
             opts = new ArrayList<>();
-            if ((flags & SSH_FXP_RENAME_ATOMIC) == SSH_FXP_RENAME_ATOMIC) {
+            if ((flags & SftpConstants.SSH_FXP_RENAME_ATOMIC) == SftpConstants.SSH_FXP_RENAME_ATOMIC) {
                 opts.add(StandardCopyOption.ATOMIC_MOVE);
             }
-            if ((flags & SSH_FXP_RENAME_OVERWRITE) == SSH_FXP_RENAME_OVERWRITE) {
+            if ((flags & SftpConstants.SSH_FXP_RENAME_OVERWRITE) == SftpConstants.SSH_FXP_RENAME_OVERWRITE) {
                 opts.add(StandardCopyOption.REPLACE_EXISTING);
             }
         }
@@ -1320,7 +1248,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     @SuppressWarnings("resource")
@@ -1338,7 +1266,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         FileHandle srcHandle = validateHandle(readHandle, rh, FileHandle.class);
         Path srcPath = srcHandle.getFile();
         int srcAccess = srcHandle.getAccessMask();
-        if ((srcAccess & ACE4_READ_DATA) != ACE4_READ_DATA) {
+        if ((srcAccess & SftpConstants.ACE4_READ_DATA) != SftpConstants.ACE4_READ_DATA) {
             throw new AccessDeniedException("File not opened for read: " + srcPath);
         }
 
@@ -1359,7 +1287,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
 
         FileHandle dstHandle = inPlaceCopy ? srcHandle : validateHandle(writeHandle, wh, FileHandle.class);
         int dstAccess = dstHandle.getAccessMask();
-        if ((dstAccess & ACE4_WRITE_DATA) != ACE4_WRITE_DATA) {
+        if ((dstAccess & SftpConstants.ACE4_WRITE_DATA) != SftpConstants.ACE4_WRITE_DATA) {
             throw new AccessDeniedException("File not opened for write: " + srcHandle);
         }
 
@@ -1409,7 +1337,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doCopyFile(int id, String srcFile, String dstFile, boolean overwriteDestination) throws IOException {
@@ -1432,8 +1360,8 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
 
     protected void doStat(Buffer buffer, int id) throws IOException {
         String path = buffer.getString();
-        int flags = SSH_FILEXFER_ATTR_ALL;
-        if (version >= SFTP_V4) {
+        int flags = SftpConstants.SSH_FILEXFER_ATTR_ALL;
+        if (version >= SftpConstants.SFTP_V4) {
             flags = buffer.getInt();
         }
 
@@ -1468,7 +1396,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         Pair<Path, Boolean> result;
         try {
             LinkOption[] options = IoUtils.getLinkOptions(false);
-            if (version < SFTP_V6) {
+            if (version < SftpConstants.SFTP_V6) {
                 /*
                  * See http://www.openssh.com/txt/draft-ietf-secsh-filexfer-02.txt:
                  *
@@ -1494,9 +1422,9 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
 
                 Path p = result.getFirst();
                 Boolean status = result.getSecond();
-                if (control == SSH_FXP_REALPATH_STAT_IF) {
+                if (control == SftpConstants.SSH_FXP_REALPATH_STAT_IF) {
                     if (status == null) {
-                        attrs = handleUnknownStatusFileAttributes(p, SSH_FILEXFER_ATTR_ALL, options);
+                        attrs = handleUnknownStatusFileAttributes(p, SftpConstants.SSH_FILEXFER_ATTR_ALL, options);
                     } else if (status) {
                         try {
                             attrs = getAttributes(p, IoUtils.getLinkOptions(false));
@@ -1511,9 +1439,9 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
                             log.debug("Dummy attributes for non-existing file: " + p);
                         }
                     }
-                } else if (control == SSH_FXP_REALPATH_STAT_ALWAYS) {
+                } else if (control == SftpConstants.SSH_FXP_REALPATH_STAT_ALWAYS) {
                     if (status == null) {
-                        attrs = handleUnknownStatusFileAttributes(p, SSH_FILEXFER_ATTR_ALL, options);
+                        attrs = handleUnknownStatusFileAttributes(p, SftpConstants.SSH_FILEXFER_ATTR_ALL, options);
                     } else if (status) {
                         attrs = getAttributes(p, options);
                     } else {
@@ -1576,7 +1504,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doRemoveDirectory(int id, String path, LinkOption... options) throws IOException {
@@ -1599,7 +1527,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doMakeDirectory(int id, String path, Map<String, ?> attrs, LinkOption... options) throws IOException {
@@ -1634,7 +1562,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doRemove(int id, String path, LinkOption... options) throws IOException {
@@ -1689,12 +1617,12 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
                 // large size or have a timeout to occur.
 
                 reply = BufferUtils.clear(buffer);
-                reply.putByte((byte) SSH_FXP_NAME);
+                reply.putByte((byte) SftpConstants.SSH_FXP_NAME);
                 reply.putInt(id);
                 int lenPos = reply.wpos();
                 reply.putInt(0);
 
-                int count = doReadDir(id, dh, reply, FactoryManagerUtils.getIntProperty(session, MAX_PACKET_LENGTH_PROP, DEFAULT_MAX_PACKET_LENGTH));
+                int count = doReadDir(id, dh, reply, PropertyResolverUtils.getIntProperty(session, MAX_PACKET_LENGTH_PROP, DEFAULT_MAX_PACKET_LENGTH));
                 BufferUtils.updateLengthPlaceholder(reply, lenPos, count);
                 if (log.isDebugEnabled()) {
                     log.debug("doReadDir({})[{}] - sent {} entries", handle, h, count);
@@ -1764,7 +1692,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doFSetStat(int id, String handle, Map<String, ?> attrs) throws IOException {
@@ -1786,7 +1714,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doSetStat(int id, String path, Map<String, ?> attrs) throws IOException {
@@ -1797,8 +1725,8 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
 
     protected void doFStat(Buffer buffer, int id) throws IOException {
         String handle = buffer.getString();
-        int flags = SSH_FILEXFER_ATTR_ALL;
-        if (version >= SFTP_V4) {
+        int flags = SftpConstants.SSH_FILEXFER_ATTR_ALL;
+        if (version >= SftpConstants.SFTP_V4) {
             flags = buffer.getInt();
         }
 
@@ -1824,8 +1752,8 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
 
     protected void doLStat(Buffer buffer, int id) throws IOException {
         String path = buffer.getString();
-        int flags = SSH_FILEXFER_ATTR_ALL;
-        if (version >= SFTP_V4) {
+        int flags = SftpConstants.SSH_FILEXFER_ATTR_ALL;
+        if (version >= SftpConstants.SFTP_V4) {
             flags = buffer.getInt();
         }
 
@@ -1860,7 +1788,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "");
     }
 
     protected void doWrite(int id, String handle, long offset, int length, byte[] data, int doff, int remaining) throws IOException {
@@ -1890,7 +1818,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         String handle = buffer.getString();
         long offset = buffer.getLong();
         int requestedLength = buffer.getInt();
-        int maxAllowed = FactoryManagerUtils.getIntProperty(session, MAX_PACKET_LENGTH_PROP, DEFAULT_MAX_PACKET_LENGTH);
+        int maxAllowed = PropertyResolverUtils.getIntProperty(session, MAX_PACKET_LENGTH_PROP, DEFAULT_MAX_PACKET_LENGTH);
         int readLen = Math.min(requestedLength, maxAllowed);
 
         if (log.isTraceEnabled()) {
@@ -1904,7 +1832,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             buffer.clear();
             buffer.ensureCapacity(readLen + Long.SIZE /* the header */, Int2IntFunction.IDENTITY);
 
-            buffer.putByte((byte) SSH_FXP_DATA);
+            buffer.putByte((byte) SftpConstants.SSH_FXP_DATA);
             buffer.putInt(id);
             int lenPos = buffer.wpos();
             buffer.putInt(0);
@@ -1945,7 +1873,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             return;
         }
 
-        sendStatus(BufferUtils.clear(buffer), id, SSH_FX_OK, "", "");
+        sendStatus(BufferUtils.clear(buffer), id, SftpConstants.SSH_FX_OK, "", "");
     }
 
     protected void doClose(int id, String handle) throws IOException {
@@ -1960,50 +1888,50 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
          * Be consistent with FileChannel#open - if no mode specified then READ is assumed
          */
         int access = 0;
-        if (version >= SFTP_V5) {
+        if (version >= SftpConstants.SFTP_V5) {
             access = buffer.getInt();
             if (access == 0) {
-                access = ACE4_READ_DATA | ACE4_READ_ATTRIBUTES;
+                access = SftpConstants.ACE4_READ_DATA | SftpConstants.ACE4_READ_ATTRIBUTES;
             }
         }
 
         int pflags = buffer.getInt();
         if (pflags == 0) {
-            pflags = SSH_FXF_READ;
+            pflags = SftpConstants.SSH_FXF_READ;
         }
 
-        if (version < SFTP_V5) {
+        if (version < SftpConstants.SFTP_V5) {
             int flags = pflags;
             pflags = 0;
-            switch (flags & (SSH_FXF_READ | SSH_FXF_WRITE)) {
-                case SSH_FXF_READ:
-                    access |= ACE4_READ_DATA | ACE4_READ_ATTRIBUTES;
+            switch (flags & (SftpConstants.SSH_FXF_READ | SftpConstants.SSH_FXF_WRITE)) {
+                case SftpConstants.SSH_FXF_READ:
+                    access |= SftpConstants.ACE4_READ_DATA | SftpConstants.ACE4_READ_ATTRIBUTES;
                     break;
-                case SSH_FXF_WRITE:
-                    access |= ACE4_WRITE_DATA | ACE4_WRITE_ATTRIBUTES;
+                case SftpConstants.SSH_FXF_WRITE:
+                    access |= SftpConstants.ACE4_WRITE_DATA | SftpConstants.ACE4_WRITE_ATTRIBUTES;
                     break;
                 default:
-                    access |= ACE4_READ_DATA | ACE4_READ_ATTRIBUTES;
-                    access |= ACE4_WRITE_DATA | ACE4_WRITE_ATTRIBUTES;
+                    access |= SftpConstants.ACE4_READ_DATA | SftpConstants.ACE4_READ_ATTRIBUTES;
+                    access |= SftpConstants.ACE4_WRITE_DATA | SftpConstants.ACE4_WRITE_ATTRIBUTES;
                     break;
             }
-            if ((flags & SSH_FXF_APPEND) != 0) {
-                access |= ACE4_APPEND_DATA;
-                pflags |= SSH_FXF_APPEND_DATA | SSH_FXF_APPEND_DATA_ATOMIC;
+            if ((flags & SftpConstants.SSH_FXF_APPEND) != 0) {
+                access |= SftpConstants.ACE4_APPEND_DATA;
+                pflags |= SftpConstants.SSH_FXF_APPEND_DATA | SftpConstants.SSH_FXF_APPEND_DATA_ATOMIC;
             }
-            if ((flags & SSH_FXF_CREAT) != 0) {
-                if ((flags & SSH_FXF_EXCL) != 0) {
-                    pflags |= SSH_FXF_CREATE_NEW;
-                } else if ((flags & SSH_FXF_TRUNC) != 0) {
-                    pflags |= SSH_FXF_CREATE_TRUNCATE;
+            if ((flags & SftpConstants.SSH_FXF_CREAT) != 0) {
+                if ((flags & SftpConstants.SSH_FXF_EXCL) != 0) {
+                    pflags |= SftpConstants.SSH_FXF_CREATE_NEW;
+                } else if ((flags & SftpConstants.SSH_FXF_TRUNC) != 0) {
+                    pflags |= SftpConstants.SSH_FXF_CREATE_TRUNCATE;
                 } else {
-                    pflags |= SSH_FXF_OPEN_OR_CREATE;
+                    pflags |= SftpConstants.SSH_FXF_OPEN_OR_CREATE;
                 }
             } else {
-                if ((flags & SSH_FXF_TRUNC) != 0) {
-                    pflags |= SSH_FXF_TRUNCATE_EXISTING;
+                if ((flags & SftpConstants.SSH_FXF_TRUNC) != 0) {
+                    pflags |= SftpConstants.SSH_FXF_TRUNCATE_EXISTING;
                 } else {
-                    pflags |= SSH_FXF_OPEN_EXISTING;
+                    pflags |= SftpConstants.SSH_FXF_OPEN_EXISTING;
                 }
             }
         }
@@ -2035,7 +1963,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
                     path, Integer.toHexString(access), Integer.toHexString(pflags), attrs);
         }
         int curHandleCount = handles.size();
-        int maxHandleCount = FactoryManagerUtils.getIntProperty(session, MAX_OPEN_HANDLES_PER_SESSION, DEFAULT_MAX_OPEN_HANDLES);
+        int maxHandleCount = PropertyResolverUtils.getIntProperty(session, MAX_OPEN_HANDLES_PER_SESSION, DEFAULT_MAX_OPEN_HANDLES);
         if (curHandleCount > maxHandleCount) {
             throw new IllegalStateException("Too many open handles: current=" + curHandleCount + ", max.=" + maxHandleCount);
         }
@@ -2073,7 +2001,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             log.debug("Received SSH_FXP_INIT (version={})", Integer.valueOf(id));
         }
 
-        String all = checkVersionCompatibility(buffer, id, id, SSH_FX_OP_UNSUPPORTED);
+        String all = checkVersionCompatibility(buffer, id, id, SftpConstants.SSH_FX_OP_UNSUPPORTED);
         if (GenericUtils.isEmpty(all)) { // i.e. validation failed
             return;
         }
@@ -2086,7 +2014,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
 
         buffer.clear();
 
-        buffer.putByte((byte) SSH_FXP_VERSION);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_VERSION);
         buffer.putInt(version);
         appendExtensions(buffer, all);
 
@@ -2126,7 +2054,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
     }
 
     protected List<OpenSSHExtension> resolveOpenSSHExtensions() {
-        String value = FactoryManagerUtils.getString(session, OPENSSH_EXTENSIONS_PROP);
+        String value = PropertyResolverUtils.getString(session, OPENSSH_EXTENSIONS_PROP);
         if (value == null) {    // No override
             return DEFAULT_OPEN_SSH_EXTENSIONS;
         }
@@ -2155,7 +2083,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
     }
 
     protected Collection<String> getSupportedClientExtensions() {
-        String value = FactoryManagerUtils.getString(session, CLIENT_EXTENSIONS_PROP);
+        String value = PropertyResolverUtils.getString(session, CLIENT_EXTENSIONS_PROP);
         if (value == null) {
             return DEFAULT_SUPPORTED_CLIENT_EXTENSIONS;
         }
@@ -2178,7 +2106,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      * @see SftpConstants#EXT_VERSIONS
      */
     protected void appendVersionsExtension(Buffer buffer, String value) {
-        buffer.putString(EXT_VERSIONS);
+        buffer.putString(SftpConstants.EXT_VERSIONS);
         buffer.putString(value);
     }
 
@@ -2192,7 +2120,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      * @see SftpConstants#EXT_NEWLINE
      */
     protected void appendNewlineExtension(Buffer buffer, String value) {
-        buffer.putString(EXT_NEWLINE);
+        buffer.putString(SftpConstants.EXT_NEWLINE);
         buffer.putString(value);
     }
 
@@ -2207,14 +2135,15 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 4.4</A>
      */
     protected void appendVendorIdExtension(Buffer buffer, Map<String, ?> versionProperties) {
-        buffer.putString(EXT_VENDOR_ID);
+        buffer.putString(SftpConstants.EXT_VENDOR_ID);
 
+        PropertyResolver resolver = PropertyResolverUtils.toPropertyResolver(Collections.unmodifiableMap(versionProperties));
         // placeholder for length
         int lenPos = buffer.wpos();
         buffer.putInt(0);
-        buffer.putString(FactoryManagerUtils.getStringProperty(versionProperties, "groupId", getClass().getPackage().getName()));   // vendor-name
-        buffer.putString(FactoryManagerUtils.getStringProperty(versionProperties, "artifactId", getClass().getSimpleName()));       // product-name
-        buffer.putString(FactoryManagerUtils.getStringProperty(versionProperties, "version", FactoryManager.DEFAULT_VERSION));      // product-version
+        buffer.putString(PropertyResolverUtils.getStringProperty(resolver, "groupId", getClass().getPackage().getName()));   // vendor-name
+        buffer.putString(PropertyResolverUtils.getStringProperty(resolver, "artifactId", getClass().getSimpleName()));       // product-name
+        buffer.putString(PropertyResolverUtils.getStringProperty(resolver, "version", FactoryManager.DEFAULT_VERSION));      // product-version
         buffer.putLong(0L); // product-build-number
         BufferUtils.updateLengthPlaceholder(buffer, lenPos);
     }
@@ -2229,20 +2158,20 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      *               - may be {@code null}/empty
      */
     protected void appendSupportedExtension(Buffer buffer, Collection<String> extras) {
-        buffer.putString(EXT_SUPPORTED);
+        buffer.putString(SftpConstants.EXT_SUPPORTED);
 
         int lenPos = buffer.wpos();
         buffer.putInt(0); // length placeholder
         // supported-attribute-mask
-        buffer.putInt(SSH_FILEXFER_ATTR_SIZE | SSH_FILEXFER_ATTR_PERMISSIONS
-                | SSH_FILEXFER_ATTR_ACCESSTIME | SSH_FILEXFER_ATTR_CREATETIME
-                | SSH_FILEXFER_ATTR_MODIFYTIME | SSH_FILEXFER_ATTR_OWNERGROUP
-                | SSH_FILEXFER_ATTR_BITS);
+        buffer.putInt(SftpConstants.SSH_FILEXFER_ATTR_SIZE | SftpConstants.SSH_FILEXFER_ATTR_PERMISSIONS
+                | SftpConstants.SSH_FILEXFER_ATTR_ACCESSTIME | SftpConstants.SSH_FILEXFER_ATTR_CREATETIME
+                | SftpConstants.SSH_FILEXFER_ATTR_MODIFYTIME | SftpConstants.SSH_FILEXFER_ATTR_OWNERGROUP
+                | SftpConstants.SSH_FILEXFER_ATTR_BITS);
         // TODO: supported-attribute-bits
         buffer.putInt(0);
         // supported-open-flags
-        buffer.putInt(SSH_FXF_READ | SSH_FXF_WRITE | SSH_FXF_APPEND
-                | SSH_FXF_CREAT | SSH_FXF_TRUNC | SSH_FXF_EXCL);
+        buffer.putInt(SftpConstants.SSH_FXF_READ | SftpConstants.SSH_FXF_WRITE | SftpConstants.SSH_FXF_APPEND
+                | SftpConstants.SSH_FXF_CREAT | SftpConstants.SSH_FXF_TRUNC | SftpConstants.SSH_FXF_EXCL);
         // TODO: supported-access-mask
         buffer.putInt(0);
         // max-read-size
@@ -2265,19 +2194,19 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      * @see <A HREF="https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#page-10">DRAFT 13 section 5.4</A>
      */
     protected void appendSupported2Extension(Buffer buffer, Collection<String> extras) {
-        buffer.putString(EXT_SUPPORTED2);
+        buffer.putString(SftpConstants.EXT_SUPPORTED2);
 
         int lenPos = buffer.wpos();
         buffer.putInt(0); // length placeholder
         // supported-attribute-mask
-        buffer.putInt(SSH_FILEXFER_ATTR_SIZE | SSH_FILEXFER_ATTR_PERMISSIONS
-                | SSH_FILEXFER_ATTR_ACCESSTIME | SSH_FILEXFER_ATTR_CREATETIME
-                | SSH_FILEXFER_ATTR_MODIFYTIME | SSH_FILEXFER_ATTR_OWNERGROUP
-                | SSH_FILEXFER_ATTR_BITS);
+        buffer.putInt(SftpConstants.SSH_FILEXFER_ATTR_SIZE | SftpConstants.SSH_FILEXFER_ATTR_PERMISSIONS
+                | SftpConstants.SSH_FILEXFER_ATTR_ACCESSTIME | SftpConstants.SSH_FILEXFER_ATTR_CREATETIME
+                | SftpConstants.SSH_FILEXFER_ATTR_MODIFYTIME | SftpConstants.SSH_FILEXFER_ATTR_OWNERGROUP
+                | SftpConstants.SSH_FILEXFER_ATTR_BITS);
         // TODO: supported-attribute-bits
         buffer.putInt(0);
         // supported-open-flags
-        buffer.putInt(SSH_FXF_ACCESS_DISPOSITION | SSH_FXF_APPEND_DATA);
+        buffer.putInt(SftpConstants.SSH_FXF_ACCESS_DISPOSITION | SftpConstants.SSH_FXF_APPEND_DATA);
         // TODO: supported-access-mask
         buffer.putInt(0);
         // max-read-size
@@ -2295,21 +2224,21 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
     }
 
     protected void sendHandle(Buffer buffer, int id, String handle) throws IOException {
-        buffer.putByte((byte) SSH_FXP_HANDLE);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_HANDLE);
         buffer.putInt(id);
         buffer.putString(handle);
         send(buffer);
     }
 
     protected void sendAttrs(Buffer buffer, int id, Map<String, ?> attributes) throws IOException {
-        buffer.putByte((byte) SSH_FXP_ATTRS);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_ATTRS);
         buffer.putInt(id);
         writeAttrs(buffer, attributes);
         send(buffer);
     }
 
     protected void sendPath(Buffer buffer, int id, Path f, Map<String, ?> attrs) throws IOException {
-        buffer.putByte((byte) SSH_FXP_NAME);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_NAME);
         buffer.putInt(id);
         buffer.putInt(1);   // one reply
 
@@ -2323,11 +2252,11 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
         }
         buffer.putString(normalizedPath);
 
-        if (version == SFTP_V3) {
+        if (version == SftpConstants.SFTP_V3) {
             f = resolveFile(normalizedPath);
             buffer.putString(getLongName(f, attrs));
             buffer.putInt(0);   // no flags
-        } else if (version >= SFTP_V4) {
+        } else if (version >= SftpConstants.SFTP_V4) {
             writeAttrs(buffer, attrs);
         } else {
             throw new IllegalStateException("sendPath(" + f + ") unsupported version: " + version);
@@ -2338,12 +2267,12 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
     protected void sendLink(Buffer buffer, int id, String link) throws IOException {
         //in case we are running on Windows
         String unixPath = link.replace(File.separatorChar, '/');
-        buffer.putByte((byte) SSH_FXP_NAME);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_NAME);
         buffer.putInt(id);
         buffer.putInt(1);   // one response
 
         buffer.putString(unixPath);
-        if (version == SFTP_V3) {
+        if (version == SftpConstants.SFTP_V3) {
             buffer.putString(unixPath);
         }
 
@@ -2397,10 +2326,10 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
      * @throws IOException If failed to generate the entry data
      */
     protected void writeDirEntry(int id, DirectoryHandle dir, Buffer buffer, int index, Path f, String shortName, LinkOption... options) throws IOException {
-        Map<String, ?> attrs = resolveFileAttributes(f, SSH_FILEXFER_ATTR_ALL, options);
+        Map<String, ?> attrs = resolveFileAttributes(f, SftpConstants.SSH_FILEXFER_ATTR_ALL, options);
 
         buffer.putString(shortName);
-        if (version == SFTP_V3) {
+        if (version == SftpConstants.SFTP_V3) {
             String longName = getLongName(f, options);
             buffer.putString(longName);
             if (log.isTraceEnabled()) {
@@ -2532,7 +2461,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
     }
 
     protected Map<String, Object> getAttributes(Path file, LinkOption... options) throws IOException {
-        return getAttributes(file, SSH_FILEXFER_ATTR_ALL, options);
+        return getAttributes(file, SftpConstants.SSH_FILEXFER_ATTR_ALL, options);
     }
 
     protected Map<String, Object> handleUnknownStatusFileAttributes(Path file, int flags, LinkOption... options) throws IOException {
@@ -2871,7 +2800,7 @@ public class SftpSubsystem extends AbstractLoggingBean implements Command, Runna
             log.debug("Send SSH_FXP_STATUS (substatus={}, lang={}, msg={})", substatus, lang, msg);
         }
 
-        buffer.putByte((byte) SSH_FXP_STATUS);
+        buffer.putByte((byte) SftpConstants.SSH_FXP_STATUS);
         buffer.putInt(id);
         buffer.putInt(substatus);
         buffer.putString(msg);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
index 855d368..3b048e7 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/x11/X11ForwardSupport.java
@@ -29,7 +29,7 @@ import org.apache.sshd.client.future.DefaultOpenFuture;
 import org.apache.sshd.client.future.OpenFuture;
 import org.apache.sshd.common.Closeable;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.channel.ChannelOutputStream;
@@ -152,7 +152,7 @@ public class X11ForwardSupport extends AbstractInnerCloseable implements IoHandl
         ChannelForwardedX11 channel = new ChannelForwardedX11(session);
         session.setAttribute(ChannelForwardedX11.class, channel);
         this.service.registerChannel(channel);
-        channel.open().verify(FactoryManagerUtils.getLongProperty(this.service.getSession(), CHANNEL_OPEN_TIMEOUT_PROP, DEFAULT_CHANNEL_OPEN_TIMEOUT));
+        channel.open().verify(PropertyResolverUtils.getLongProperty(channel, CHANNEL_OPEN_TIMEOUT_PROP, DEFAULT_CHANNEL_OPEN_TIMEOUT));
     }
 
     @Override
@@ -168,7 +168,7 @@ public class X11ForwardSupport extends AbstractInnerCloseable implements IoHandl
         ChannelForwardedX11 channel = (ChannelForwardedX11) session.getAttribute(ChannelForwardedX11.class);
         Buffer buffer = new ByteArrayBuffer();
         buffer.putBuffer(message);
-        
+
         OutputStream outputStream = channel.getInvertedIn();
         outputStream.write(buffer.array(), buffer.rpos(), buffer.available());
         outputStream.flush();
@@ -195,9 +195,12 @@ public class X11ForwardSupport extends AbstractInnerCloseable implements IoHandl
                 throw new SshException("Session has been closed");
             }
             openFuture = new DefaultOpenFuture(lock);
+
+            Session session = getSession();
             if (log.isDebugEnabled()) {
-                log.debug("Send SSH_MSG_CHANNEL_OPEN on channel {}", Integer.valueOf(id));
+                log.debug("Send SSH_MSG_CHANNEL_OPEN on {} channel {}", session, Integer.valueOf(id));
             }
+
             Buffer buffer = session.createBuffer(SshConstants.SSH_MSG_CHANNEL_OPEN);
             buffer.putString(type);
             buffer.putInt(id);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java b/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
index 642c198..d885e26 100644
--- a/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/KeepAliveTest.java
@@ -29,7 +29,7 @@ import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.channel.ClientChannel;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.server.Command;
 import org.apache.sshd.server.SshServer;
 import org.apache.sshd.util.test.BaseTestSupport;
@@ -59,7 +59,7 @@ public class KeepAliveTest extends BaseTestSupport {
     @Before
     public void setUp() throws Exception {
         sshd = setupTestServer();
-        FactoryManagerUtils.updateProperty(sshd, FactoryManager.IDLE_TIMEOUT, TIMEOUT);
+        PropertyResolverUtils.updateProperty(sshd, FactoryManager.IDLE_TIMEOUT, TIMEOUT);
         sshd.setShellFactory(new TestEchoShellFactory());
         sshd.start();
         port = sshd.getPort();
@@ -96,7 +96,7 @@ public class KeepAliveTest extends BaseTestSupport {
     @Test
     public void testClientWithHeartBeat() throws Exception {
         SshClient client = setupTestClient();
-        FactoryManagerUtils.updateProperty(client, ClientFactoryManager.HEARTBEAT_INTERVAL, HEARTBEAT);
+        PropertyResolverUtils.updateProperty(client, ClientFactoryManager.HEARTBEAT_INTERVAL, HEARTBEAT);
         client.start();
 
         try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java b/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
index ccb5705..d6e38ec 100644
--- a/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/KeyReExchangeTest.java
@@ -39,7 +39,7 @@ import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.channel.ChannelShell;
 import org.apache.sshd.client.channel.ClientChannel;
 import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.cipher.BuiltinCiphers;
 import org.apache.sshd.common.future.KeyExchangeFuture;
@@ -84,10 +84,10 @@ public class KeyReExchangeTest extends BaseTestSupport {
     protected void setUp(long bytesLimit, long timeLimit) throws Exception {
         sshd = setupTestServer();
         if (bytesLimit > 0L) {
-            FactoryManagerUtils.updateProperty(sshd, ServerFactoryManager.REKEY_BYTES_LIMIT, bytesLimit);
+            PropertyResolverUtils.updateProperty(sshd, ServerFactoryManager.REKEY_BYTES_LIMIT, bytesLimit);
         }
         if (timeLimit > 0L) {
-            FactoryManagerUtils.updateProperty(sshd, ServerFactoryManager.REKEY_TIME_LIMIT, timeLimit);
+            PropertyResolverUtils.updateProperty(sshd, ServerFactoryManager.REKEY_TIME_LIMIT, timeLimit);
         }
 
         sshd.start();

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/LoadTest.java b/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
index fce8bcb..45c8c4b 100644
--- a/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/LoadTest.java
@@ -26,7 +26,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -35,7 +34,7 @@ import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.channel.ClientChannel;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.cipher.BuiltinCiphers;
 import org.apache.sshd.common.cipher.Cipher;
@@ -117,9 +116,8 @@ public class LoadTest extends BaseTestSupport {
 
     protected void runClient(String msg) throws Exception {
         try (SshClient client = setupTestClient()) {
-            Map<String, Object> props = client.getProperties();
-            FactoryManagerUtils.updateProperty(props, FactoryManager.MAX_PACKET_SIZE, 1024 * 16);
-            FactoryManagerUtils.updateProperty(props, FactoryManager.WINDOW_SIZE, 1024 * 8);
+            PropertyResolverUtils.updateProperty(client, FactoryManager.MAX_PACKET_SIZE, 1024 * 16);
+            PropertyResolverUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 1024 * 8);
             client.setKeyExchangeFactories(Arrays.asList(
                     ClientBuilder.DH2KEX.transform(BuiltinDHFactories.dhg1)));
             client.setCipherFactories(Arrays.<NamedFactory<Cipher>>asList(BuiltinCiphers.blowfishcbc));

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java b/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
index 736223d..6380390 100644
--- a/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/PortForwardingTest.java
@@ -50,7 +50,7 @@ import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.channel.ChannelDirectTcpip;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.SshdSocketAddress;
 import org.apache.sshd.common.forward.TcpipForwarder;
 import org.apache.sshd.common.forward.TcpipForwarderFactory;
@@ -94,8 +94,8 @@ public class PortForwardingTest extends BaseTestSupport {
     @Before
     public void setUp() throws Exception {
         sshd = setupTestServer();
-        FactoryManagerUtils.updateProperty(sshd, FactoryManager.WINDOW_SIZE, 2048);
-        FactoryManagerUtils.updateProperty(sshd, FactoryManager.MAX_PACKET_SIZE, 256);
+        PropertyResolverUtils.updateProperty(sshd, FactoryManager.WINDOW_SIZE, 2048);
+        PropertyResolverUtils.updateProperty(sshd, FactoryManager.MAX_PACKET_SIZE, 256);
         sshd.setTcpipForwardingFilter(AcceptAllForwardingFilter.INSTANCE);
         sshd.start();
 
@@ -590,8 +590,8 @@ public class PortForwardingTest extends BaseTestSupport {
 
     protected ClientSession createNativeSession() throws Exception {
         client = setupTestClient();
-        FactoryManagerUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 2048);
-        FactoryManagerUtils.updateProperty(client, FactoryManager.MAX_PACKET_SIZE, 256);
+        PropertyResolverUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 2048);
+        PropertyResolverUtils.updateProperty(client, FactoryManager.MAX_PACKET_SIZE, 256);
         client.setTcpipForwardingFilter(AcceptAllForwardingFilter.INSTANCE);
         client.start();
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java b/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
index 66f3ce4..31befd4 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ProxyTest.java
@@ -35,7 +35,7 @@ import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.SshdSocketAddress;
 import org.apache.sshd.server.SshServer;
 import org.apache.sshd.server.forward.AcceptAllForwardingFilter;
@@ -60,8 +60,8 @@ public class ProxyTest extends BaseTestSupport {
     @Before
     public void setUp() throws Exception {
         sshd = setupTestServer();
-        FactoryManagerUtils.updateProperty(sshd, FactoryManager.WINDOW_SIZE, 2048);
-        FactoryManagerUtils.updateProperty(sshd, FactoryManager.MAX_PACKET_SIZE, "256");
+        PropertyResolverUtils.updateProperty(sshd, FactoryManager.WINDOW_SIZE, 2048);
+        PropertyResolverUtils.updateProperty(sshd, FactoryManager.MAX_PACKET_SIZE, "256");
         sshd.setTcpipForwardingFilter(AcceptAllForwardingFilter.INSTANCE);
         sshd.start();
         sshPort = sshd.getPort();
@@ -140,8 +140,8 @@ public class ProxyTest extends BaseTestSupport {
 
     protected ClientSession createNativeSession() throws Exception {
         client = setupTestClient();
-        FactoryManagerUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 2048);
-        FactoryManagerUtils.updateProperty(client, FactoryManager.MAX_PACKET_SIZE, 256);
+        PropertyResolverUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 2048);
+        PropertyResolverUtils.updateProperty(client, FactoryManager.MAX_PACKET_SIZE, 256);
         client.setTcpipForwardingFilter(AcceptAllForwardingFilter.INSTANCE);
         client.start();
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java b/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
index 3db63b8..7e65911 100644
--- a/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/SinglePublicKeyAuthTest.java
@@ -28,7 +28,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.future.AuthFuture;
 import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.keyprovider.KeyPairProvider;
 import org.apache.sshd.server.ServerFactoryManager;
@@ -68,7 +68,7 @@ public class SinglePublicKeyAuthTest extends BaseTestSupport {
     @Before
     public void setUp() throws Exception {
         sshd = setupTestServer();
-        FactoryManagerUtils.updateProperty(sshd, ServerFactoryManager.AUTH_METHODS, UserAuthPublicKeyFactory.NAME);
+        PropertyResolverUtils.updateProperty(sshd, ServerFactoryManager.AUTH_METHODS, UserAuthPublicKeyFactory.NAME);
         sshd.setPublickeyAuthenticator(new PublickeyAuthenticator() {
             @SuppressWarnings("synthetic-access")
             @Override

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java b/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
index f4f3db9..12843e7 100644
--- a/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/WelcomeBannerTest.java
@@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.auth.UserInteraction;
 import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.server.ServerFactoryManager;
 import org.apache.sshd.server.SshServer;
 import org.apache.sshd.util.test.BaseTestSupport;
@@ -49,7 +49,7 @@ public class WelcomeBannerTest extends BaseTestSupport {
     @Before
     public void setUp() throws Exception {
         sshd = setupTestServer();
-        FactoryManagerUtils.updateProperty(sshd, ServerFactoryManager.WELCOME_BANNER, WELCOME);
+        PropertyResolverUtils.updateProperty(sshd, ServerFactoryManager.WELCOME_BANNER, WELCOME);
         sshd.start();
         port = sshd.getPort();
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java
index 97030c9..a6a2cbb 100644
--- a/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/client/ClientTest.java
@@ -64,9 +64,9 @@ import org.apache.sshd.client.subsystem.SubsystemClient;
 import org.apache.sshd.client.subsystem.sftp.SftpClient;
 import org.apache.sshd.common.Factory;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
 import org.apache.sshd.common.NamedFactory;
 import org.apache.sshd.common.NamedResource;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.RuntimeSshException;
 import org.apache.sshd.common.Service;
 import org.apache.sshd.common.SshConstants;
@@ -228,6 +228,84 @@ public class ClientTest extends BaseTestSupport {
     }
 
     @Test
+    public void testPropertyResolutionHierarchy() throws Exception {
+        final String SESSION_PROP_NAME = getCurrentTestName() + "-session";
+        final AtomicReference<Object> sessionConfigValueHolder = new AtomicReference<>(null);
+        client.addSessionListener(new SessionListener() {
+            @Override
+            public void sessionEvent(Session session, Event event) {
+                updateSessionConfigProperty(session, event);
+            }
+
+            @Override
+            public void sessionCreated(Session session) {
+                updateSessionConfigProperty(session, "sessionCreated");
+            }
+
+            @Override
+            public void sessionClosed(Session session) {
+                updateSessionConfigProperty(session, "sessionClosed");
+            }
+
+            private void updateSessionConfigProperty(Session session, Object value) {
+                PropertyResolverUtils.updateProperty(session, SESSION_PROP_NAME, value);
+                sessionConfigValueHolder.set(value);
+            }
+        });
+
+        final String CHANNEL_PROP_NAME = getCurrentTestName() + "-channel";
+        final AtomicReference<Object> channelConfigValueHolder = new AtomicReference<>(null);
+        client.addChannelListener(new ChannelListener() {
+            @Override
+            public void channelOpenSuccess(Channel channel) {
+                updateChannelConfigProperty(channel, "channelOpenSuccess");
+            }
+
+            @Override
+            public void channelOpenFailure(Channel channel, Throwable reason) {
+                updateChannelConfigProperty(channel, "channelOpenFailure");
+            }
+
+            @Override
+            public void channelInitialized(Channel channel) {
+                updateChannelConfigProperty(channel, "channelInitialized");
+            }
+
+            @Override
+            public void channelClosed(Channel channel) {
+                updateChannelConfigProperty(channel, "channelClosed");
+            }
+
+            private void updateChannelConfigProperty(Channel channel, Object value) {
+                PropertyResolverUtils.updateProperty(channel, CHANNEL_PROP_NAME, value);
+                channelConfigValueHolder.set(value);
+            }
+        });
+        client.start();
+
+        try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
+            assertSame("Session established", sessionConfigValueHolder.get(), PropertyResolverUtils.getObject(session, SESSION_PROP_NAME));
+            session.addPasswordIdentity(getCurrentTestName());
+            session.auth().verify(5L, TimeUnit.SECONDS);
+            assertSame("Session authenticated", sessionConfigValueHolder.get(), PropertyResolverUtils.getObject(session, SESSION_PROP_NAME));
+
+            try (ChannelExec channel = session.createExecChannel(getCurrentTestName());
+                 OutputStream stdout = new NoCloseOutputStream(System.out);
+                 OutputStream stderr = new NoCloseOutputStream(System.err)) {
+                assertSame("Channel created", channelConfigValueHolder.get(), PropertyResolverUtils.getObject(channel, CHANNEL_PROP_NAME));
+                assertNull("Direct channel created session prop", PropertyResolverUtils.getObject(channel.getProperties(), SESSION_PROP_NAME));
+                assertSame("Indirect channel created session prop", sessionConfigValueHolder.get(), PropertyResolverUtils.getObject(channel, SESSION_PROP_NAME));
+
+                channel.setOut(stdout);
+                channel.setErr(stderr);
+                channel.open().verify(9L, TimeUnit.SECONDS);
+            }
+        } finally {
+            client.stop();
+        }
+    }
+
+    @Test
     public void testClientStillActiveIfListenerExceptions() throws Exception {
         final Map<String, Integer> eventsMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
         final Collection<String> failuresSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
@@ -389,10 +467,10 @@ public class ClientTest extends BaseTestSupport {
 
     @Test
     public void testAsyncClient() throws Exception {
-        FactoryManagerUtils.updateProperty(sshd, FactoryManager.WINDOW_SIZE, 1024);
+        PropertyResolverUtils.updateProperty(sshd, FactoryManager.WINDOW_SIZE, 1024);
         sshd.setShellFactory(new AsyncEchoShellFactory());
 
-        FactoryManagerUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 1024);
+        PropertyResolverUtils.updateProperty(client, FactoryManager.WINDOW_SIZE, 1024);
         client.start();
 
         try (ClientSession session = createTestClientSession();
@@ -1083,7 +1161,7 @@ public class ClientTest extends BaseTestSupport {
         });
 
         final int MAX_PROMPTS = 3;
-        FactoryManagerUtils.updateProperty(client, ClientFactoryManager.PASSWORD_PROMPTS, MAX_PROMPTS);
+        PropertyResolverUtils.updateProperty(client, ClientFactoryManager.PASSWORD_PROMPTS, MAX_PROMPTS);
 
         client.start();
 
@@ -1105,7 +1183,7 @@ public class ClientTest extends BaseTestSupport {
     public void testDefaultKeyboardInteractiveInSessionUserInteractive() throws Exception {
         final AtomicInteger count = new AtomicInteger();
         final int MAX_PROMPTS = 3;
-        FactoryManagerUtils.updateProperty(client, ClientFactoryManager.PASSWORD_PROMPTS, MAX_PROMPTS);
+        PropertyResolverUtils.updateProperty(client, ClientFactoryManager.PASSWORD_PROMPTS, MAX_PROMPTS);
 
         client.setUserAuthFactories(Collections.<NamedFactory<UserAuth>>singletonList(UserAuthKeyboardInteractiveFactory.INSTANCE));
         client.start();
@@ -1147,7 +1225,7 @@ public class ClientTest extends BaseTestSupport {
     public void testKeyboardInteractiveInSessionUserInteractiveFailure() throws Exception {
         final AtomicInteger count = new AtomicInteger();
         final int MAX_PROMPTS = 3;
-        FactoryManagerUtils.updateProperty(client, ClientFactoryManager.PASSWORD_PROMPTS, MAX_PROMPTS);
+        PropertyResolverUtils.updateProperty(client, ClientFactoryManager.PASSWORD_PROMPTS, MAX_PROMPTS);
         client.setUserAuthFactories(Collections.<NamedFactory<UserAuth>>singletonList(UserAuthKeyboardInteractiveFactory.INSTANCE));
         client.start();
 

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/client/config/hosts/HostConfigEntryResolverTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/client/config/hosts/HostConfigEntryResolverTest.java b/sshd-core/src/test/java/org/apache/sshd/client/config/hosts/HostConfigEntryResolverTest.java
index 769797b..7680b46 100644
--- a/sshd-core/src/test/java/org/apache/sshd/client/config/hosts/HostConfigEntryResolverTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/client/config/hosts/HostConfigEntryResolverTest.java
@@ -36,7 +36,7 @@ import org.apache.sshd.client.ClientFactoryManager;
 import org.apache.sshd.client.SshClient;
 import org.apache.sshd.client.config.keys.ClientIdentityLoader;
 import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.SshdSocketAddress;
 import org.apache.sshd.common.config.keys.FilePasswordProvider;
 import org.apache.sshd.common.config.keys.KeyUtils;
@@ -142,7 +142,7 @@ public class HostConfigEntryResolverTest extends BaseTestSupport {
                 throw new FileNotFoundException("Unknown location: " + location);
             }
         });
-        FactoryManagerUtils.updateProperty(client, ClientFactoryManager.IGNORE_INVALID_IDENTITIES, false);
+        PropertyResolverUtils.updateProperty(client, ClientFactoryManager.IGNORE_INVALID_IDENTITIES, false);
 
         final String HOST = getClass().getSimpleName();
         final HostConfigEntry entry = new HostConfigEntry(HOST, TEST_LOCALHOST, port, USER);
@@ -212,7 +212,7 @@ public class HostConfigEntryResolverTest extends BaseTestSupport {
                 throw new FileNotFoundException("Unknown location: " + location);
             }
         });
-        FactoryManagerUtils.updateProperty(client, ClientFactoryManager.IGNORE_INVALID_IDENTITIES, false);
+        PropertyResolverUtils.updateProperty(client, ClientFactoryManager.IGNORE_INVALID_IDENTITIES, false);
 
         final Collection<KeyPair> clientIdentities = Collections.singletonList(defaultIdentity);
         client.setKeyPairProvider(new AbstractKeyPairProvider() {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
index b130ba4..eaa18b9 100644
--- a/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpTest.java
@@ -55,7 +55,7 @@ import org.apache.sshd.client.subsystem.sftp.extensions.BuiltinSftpClientExtensi
 import org.apache.sshd.client.subsystem.sftp.extensions.SftpClientExtension;
 import org.apache.sshd.common.Factory;
 import org.apache.sshd.common.FactoryManager;
-import org.apache.sshd.common.FactoryManagerUtils;
+import org.apache.sshd.common.PropertyResolverUtils;
 import org.apache.sshd.common.file.FileSystemFactory;
 import org.apache.sshd.common.random.Random;
 import org.apache.sshd.common.session.Session;
@@ -196,7 +196,7 @@ public class SftpTest extends AbstractSftpClientTestSupport {
                     byte[] actual = new byte[expected.length];
                     int maxAllowed = actual.length / 4;
                     // allow less than actual
-                    FactoryManagerUtils.updateProperty(sshd, SftpSubsystem.MAX_PACKET_LENGTH_PROP, maxAllowed);
+                    PropertyResolverUtils.updateProperty(sshd, SftpSubsystem.MAX_PACKET_LENGTH_PROP, maxAllowed);
                     try(CloseableHandle handle = sftp.open(file, OpenMode.Read)) {
                         int readLen = sftp.read(handle, 0L, actual);
                         assertEquals("Mismatched read len", maxAllowed, readLen);

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a9d975b6/sshd-core/src/test/java/org/apache/sshd/common/FactoryManagerUtilsTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/common/FactoryManagerUtilsTest.java b/sshd-core/src/test/java/org/apache/sshd/common/FactoryManagerUtilsTest.java
deleted file mode 100644
index 05ccdaf..0000000
--- a/sshd-core/src/test/java/org/apache/sshd/common/FactoryManagerUtilsTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.common;
-
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.sshd.common.session.Session;
-import org.apache.sshd.util.test.BaseTestSupport;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.junit.runners.MethodSorters;
-import org.mockito.Mockito;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class FactoryManagerUtilsTest extends BaseTestSupport {
-    public FactoryManagerUtilsTest() {
-        super();
-    }
-
-    @Test
-    public void testLongProperty() {
-        final long expected = System.currentTimeMillis();
-        final String name = getCurrentTestName();
-
-        Session session = createMockSession();
-        assertEquals("Mismatched empty props value", expected, FactoryManagerUtils.getLongProperty(session, name, expected));
-
-        FactoryManagerUtils.updateProperty(session, name, expected);
-        testLongProperty(session, name, expected);
-
-        FactoryManagerUtils.updateProperty(session, name, Long.toString(expected));
-        testLongProperty(session, name, expected);
-    }
-
-    private void testLongProperty(Session session, String name, long expected) {
-        FactoryManager manager = session.getFactoryManager();
-        Map<String, ?> props = manager.getProperties();
-        Object value = props.get(name);
-        Class<?> type = value.getClass();
-        String storage = type.getSimpleName();
-
-        {
-            Long actual = FactoryManagerUtils.getLong(session, name);
-            assertNotNull("No actual Long value found for storage as " + storage, actual);
-            assertEquals("Mismatched values on Long retrieval for storage as " + storage, expected, actual.longValue());
-        }
-
-        {
-            String actual = FactoryManagerUtils.getString(session, name);
-            assertNotNull("No actual String value found for storage as " + storage, actual);
-            assertEquals("Mismatched values on String retrieval for storage as " + storage, Long.toString(expected), actual.toString());
-        }
-    }
-
-    @Test
-    public void testIntegerProperty() {
-        final int expected = 3777347;
-        final String name = getCurrentTestName();
-
-        Session session = createMockSession();
-        assertEquals("Mismatched empty props value", expected, FactoryManagerUtils.getIntProperty(session, name, expected));
-
-        FactoryManagerUtils.updateProperty(session, name, expected);
-        testIntegerProperty(session, name, expected);
-
-        FactoryManagerUtils.updateProperty(session, name, Integer.toString(expected));
-        testIntegerProperty(session, name, expected);
-
-        // store as Long but retrieve as Integer
-        FactoryManagerUtils.updateProperty(session, name, Long.valueOf(expected));
-        testIntegerProperty(session, name, expected);
-    }
-
-    private void testIntegerProperty(Session session, String name, int expected) {
-        FactoryManager manager = session.getFactoryManager();
-        Map<String, ?> props = manager.getProperties();
-        Object value = props.get(name);
-        Class<?> type = value.getClass();
-        String storage = type.getSimpleName();
-
-        {
-            Integer actual = FactoryManagerUtils.getInteger(session, name);
-            assertNotNull("No actual Long value found for storage as " + storage, actual);
-            assertEquals("Mismatched values on Long retrieval for storage as " + storage, expected, actual.intValue());
-        }
-
-        {
-            String actual = FactoryManagerUtils.getString(session, name);
-            assertNotNull("No actual String value found for storage as " + storage, actual);
-            assertEquals("Mismatched values on String retrieval for storage as " + storage, Long.toString(expected), actual.toString());
-        }
-    }
-
-    @Test
-    public void testBooleanProperty() {
-        for (final boolean expected : new boolean[]{false, true}) {
-            final String name = getCurrentTestName();
-
-            Session session = createMockSession();
-            assertEquals("Mismatched empty props value", expected, FactoryManagerUtils.getBooleanProperty(session, name, expected));
-
-            FactoryManagerUtils.updateProperty(session, name, expected);
-            testBooleanProperty(session, name, expected);
-
-            FactoryManagerUtils.updateProperty(session, name, Boolean.toString(expected));
-            testBooleanProperty(session, name, expected);
-        }
-    }
-
-    private void testBooleanProperty(Session session, String name, boolean expected) {
-        FactoryManager manager = session.getFactoryManager();
-        Map<String, ?> props = manager.getProperties();
-        Object value = props.get(name);
-        Class<?> type = value.getClass();
-        String storage = type.getSimpleName();
-
-        {
-            Boolean actual = FactoryManagerUtils.getBoolean(session, name);
-            assertNotNull("No actual Long value found for storage as " + storage, actual);
-            assertEquals("Mismatched values on Long retrieval for storage as " + storage, expected, actual.booleanValue());
-        }
-
-        {
-            String actual = FactoryManagerUtils.getString(session, name);
-            assertNotNull("No actual String value found for storage as " + storage, actual);
-            assertEquals("Mismatched values on String retrieval for storage as " + storage, Boolean.toString(expected), actual.toString());
-        }
-    }
-
-    private Session createMockSession() {
-        Map<String, Object> props = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER);
-        FactoryManager manager = Mockito.mock(FactoryManager.class);
-        Mockito.when(manager.getProperties()).thenReturn(props);
-
-        Session session = Mockito.mock(Session.class);
-        Mockito.when(session.getUsername()).thenReturn(getCurrentTestName());
-        Mockito.when(session.getFactoryManager()).thenReturn(manager);
-        return session;
-    }
-}