docs: public RemoteTask createRemoteTask(String strServer, String strRemoteApp, String strUserID, String strPassword)
      {
          RemoteTask remoteTask = null;
          if (Params.NONE.equalsIgnoreCase(strServer))
              return null;    // No server specified, don't use one.
          try {
              if (strUserID == null)
                  strUserID = this.getProperty(Params.USER_ID);
              String strLanguage = this.getLanguage(true);
              Map<String,Object> properties = this.getServerProperties();
              if (strUserID != null)
                  properties.put(Params.USER_ID, strUserID);
              if (strLanguage != null)
  	            if (strLanguage.length() > 0)
      	            properties.put(Params.LANGUAGE, strLanguage);
              if (properties.get(Params.DOMAIN) == null)
              	if (this.getProperty(Params.DOMAIN) != null)
              		properties.put(Params.DOMAIN, this.getProperty(Params.DOMAIN));
              if (properties.get(Constants.SYSTEM_NAME) == null)
                  if (this.getProperty(Constants.SYSTEM_NAME) != null)
                      properties.put(Constants.SYSTEM_NAME, this.getProperty(Constants.SYSTEM_NAME));
              if (m_mainRemoteTask == null)
              {
                  ApplicationServer appServer = null;
                  int iConnectionType = getConnectionType();
                  if (iConnectionType == PROXY)
                  {   // Use HTTP proxy instead of RMI
                      String strBaseServletPath = this.getBaseServletPath();
                      appServer = new ApplicationProxy(strServer, strBaseServletPath, strRemoteApp);
                  }
                  if (iConnectionType == LOCAL_SERVICE)
                  {   // Use local OSGi service instead of RMI
                      if ((strRemoteApp == null) || (strRemoteApp.indexOf('.') == -1))
                          strRemoteApp = Params.DEFAULT_REMOTE_APP;
                      // WARNING: This may take a while, so don't run this in your main thread.
                  	appServer = (ApplicationServer)ClassServiceUtility.getClassService().getClassFinder(null).getClassBundleService(null, strRemoteApp, null, null, -1);
                  }
                  if (appServer == null)
                  {
                      Util.getLogger().log(Level.SEVERE, "Remote server " + strRemoteApp + " did not come up");
                      return null;
                  }
                  remoteTask = appServer.createRemoteTask(properties);
                  m_mainRemoteTask = remoteTask;
              }
              else
              {
                  remoteTask = m_mainRemoteTask.createRemoteTask(properties);
              }
          } catch (RemoteException ex)    {
              ex.printStackTrace();
          }
          return remoteTask;
      }