docs: public DirContext createSubcontext(String name,
                                         Attributes attrs) throws OperationNotSupportedException, WIMSystemException, EntityAlreadyExistsException, EntityNotFoundException {
          final String METHODNAME = "createSubcontext";
          DirContext dirContext = null;
          TimedDirContext ctx = getDirContext();
          checkWritePermission(ctx);
          try {
              try {
                  long startTime = System.currentTimeMillis();
                  dirContext = ctx.createSubcontext(new LdapName(name), attrs);
                  long endTime = System.currentTimeMillis();
                  if ((endTime - startTime) > LDAP_CONNECT_TIMEOUT_TRACE) {
                      if (tc.isDebugEnabled())
                          Tr.debug(tc, METHODNAME + " **LDAPConnect time: " + (endTime - startTime) + " ms, lock held " + Thread.holdsLock(iLock)
                                       + ", principal=" + name);
                  } else {
                      handleBindStat(endTime - startTime);
                  }
              } catch (NamingException e) {
                  if (!isConnectionException(e)) {
                      throw e;
                  }
                  ctx = reCreateDirContext(ctx, e.toString());
                  long startTime = System.currentTimeMillis();
                  dirContext = ctx.createSubcontext(new LdapName(name), attrs);
                  long endTime = System.currentTimeMillis();
                  if ((endTime - startTime) > LDAP_CONNECT_TIMEOUT_TRACE) {
                      if (tc.isDebugEnabled())
                          Tr.debug(tc, METHODNAME + " **LDAPConnect time: " + (endTime - startTime) + " ms, lock held " + Thread.holdsLock(iLock)
                                       + ", principal=" + name);
                  } else {
                      handleBindStat(endTime - startTime);
                  }
              }
          } catch (NameAlreadyBoundException e) {
              String msg = Tr.formatMessage(tc, WIMMessageKey.ENTITY_ALREADY_EXIST, WIMMessageHelper.generateMsgParms(name));
              throw new EntityAlreadyExistsException(WIMMessageKey.ENTITY_ALREADY_EXIST, msg, e);
          } catch (NameNotFoundException e) {
              String msg = Tr.formatMessage(tc, WIMMessageKey.PARENT_NOT_FOUND, WIMMessageHelper.generateMsgParms(e.toString(true)));
              throw new EntityNotFoundException(WIMMessageKey.PARENT_NOT_FOUND, msg, e);
          } catch (NamingException e) {
              String msg = Tr.formatMessage(tc, WIMMessageKey.NAMING_EXCEPTION, WIMMessageHelper.generateMsgParms(e.toString(true)));
              throw new WIMSystemException(WIMMessageKey.NAMING_EXCEPTION, msg, e);
          } finally {
              releaseDirContext(ctx);
          }
          return dirContext;
      }