docs: public static void main(String[] args)
      {
          Map<String,Object> propertiesTemp = new Hashtable<String,Object>();
          Util.parseArgs(propertiesTemp, args);
          if (propertiesTemp.get(DBParams.FREEIFDONE) == null)
              propertiesTemp.put(DBParams.FREEIFDONE, DBConstants.FALSE);   // Don't free when only the last app is running.
          if (propertiesTemp.get(DBParams.LOCAL) == null)
              propertiesTemp.put(DBParams.LOCAL, DBParams.JDBC); // Remote Server ALWAYS uses Jdbc
          if (propertiesTemp.get(DBParams.REMOTE) == null)
              propertiesTemp.put(DBParams.REMOTE, DBParams.JDBC);
          if (propertiesTemp.get(DBParams.TABLE) == null)
              propertiesTemp.put(DBParams.TABLE, DBParams.JDBC);
          if (propertiesTemp.get(MessageConstants.MESSAGE_FILTER) == null)
              propertiesTemp.put(MessageConstants.MESSAGE_FILTER, MessageConstants.TREE_FILTER);  // Default for a server
  
          RemoteSessionServer remoteServer = null;
          try {
              remoteServer = new RemoteSessionServer(null, null, propertiesTemp);
          } catch (RemoteException e) {
              e.printStackTrace();
          }
  
          Environment env = new Environment(propertiesTemp);
          // Note the order that I do this... this is because MainApplication may need access to the remoteapp during initialization
          BaseApplication app = new MainApplication();
          remoteServer.init(app, null, null);     // Okay to call init twice here
          Map<String,Object> properties = null;
          if (args != null)
          {
              properties = new Hashtable<String,Object>();
              Util.parseArgs(properties, args);
          }
          app.init(env, properties, null); // Default application (with params).
      }