public static void main(String[] arguments) {
		ArgumentList argumentList = new ArgumentList(arguments);
		Debug.init("DataGenerator", argumentList);
		debug = Debug.getLogger();

		/* Vollständige Aufrufparameter-Zeile */
		String[] originalArguments = new String[arguments.length];
		for(int i = 0; i < arguments.length; i++) {
			originalArguments[i] = arguments[i];
		}

		/* Der Datengenerator */
		final DataGenerator application;

		dkd = new DataKindDeterminer(
				DataKindDeterminer.isSender, "Quelle", DataKindDeterminer.notExamineParamData
		);


		final ClientDavParameters parameters;
		final List subscriptions;

		/**
		 * Der XML-Leser
		 */
		XmlFormatReader xfr = null;

		try {
			parameters = new ClientDavParameters(arguments);
			parameters.setApplicationName("DataGenerator");
			connection = new ClientDavConnection(parameters);
			connection.connect();
			connection.login();
			dataModel = connection.getDataModel();

			pmc = new ProtocolModuleConnector(argumentList, originalArguments);
			if(argumentList.hasArgument("-eingabe")) {
				isGenerator = false;
				xfr = new XmlFormatReader(argumentList);
			}
			if(argumentList.hasArgument("-autark")) {
				isAutarkic = argumentList.fetchArgument("-autark").booleanValue();
			}

			if(argumentList.hasArgument("-sendesteuerung")) {
				hasSendControl = argumentList.fetchArgument("-sendesteuerung")
						.booleanValue();
				isSendControlValid = true;
			}
			else {
				isSendControlValid = false;
			}


			subscriptions = dkd.getDataKinds(argumentList);
			argumentList.ensureAllArgumentsUsed();

			checkSubscription(subscriptions);
		}
		catch(Exception e) {
			debug.error("Fehler beim Auswerten der Argumente:");
			debug.error("  " + e.getMessage());
			debug.error(
					"Benutzung:\tjava de.bsvrz.pat.datgen.generator.main.DataGenerator [-protModul=<modulName>] [-datei=<protokollDatei>] [-autark] [<weitereParameterDesVerwendetenProtokollierungsmoduls>] ([-zyklus=<zyklusVon>[-<zyklusBis>]] [-anzahl=<anzahlZyklen>] [-spreizung=<spreizungsGrad>] [-zeit=<zeitstempelWert>] [-rolle=<anmeldeRolle>] objekte=<objektSpezifikationen> -daten=<datenSpezifikation>)+"
			);
			debug.error(
					"bzw.\t\tjava de.bsvrz.pat.datgen.generator.main.DataGenerator [-protModul=<modulName>] -eingabe=<eingabeDatei> [-zeitstempel=<wiedergabeVerhalten>] [-datei=<protokollDatei>] [-autark] [<weitereParameterDesVerwendetenProtokollierungsmoduls>] ([-rolle=<anmeldeRolle>] -objekte=<objektSpezifikationen> -daten=<datenSpezifikation>)+"
			);
			debug.error(
					"-protModul: Name des Moduls, welches ein Protokollierungsmodul implementiert. Wird kein Protokollierungsmodul angegeben, so wird das Standardmodul hinzugeladen."
			);
			debug.error("-eingabe: XML-Datei mit den einzuspielenden Daten");
			debug.error(
					"-basisUri: Basis-URI für die DTD. Muß angegeben werden, wenn die URI der DTD in der einzulesenden XML-Datei nicht als absolute URI angegeben ist."
			);
			debug.error(
					"-zeitstempel: \"uebernehmen\", wenn die Zeitstempel aus der Eingabedatei übernommen werden sollen; \"anpassen\", wenn die Startzeit des Protokolls durch die Startzeit des Starts des Datengenerators ersetzt werden soll"
			);
			debug.error("-validieren: \"ja\", falls die einzulesende XML-Datei validiert werden soll, sonst \"nein\"");
			debug.error("-datei: Name der Protokolldatei");
			debug.error("-autark: Die erzeugten Daten werden nicht an den DaV gesendet");
			debug.error("-sendesteuerung: \"ja\", falls Sendesteuerung erwünscht, sonst \"nein\".");
			if(pmc != null) {
				debug.error(pmc.getHelp());
			}
			else {
				debug.error("<weitere Parameter des Protokollierungsmoduls>");
			}
			debug.error(
					"-zyklus: Zeitangabe als Folge von Zahlen und Einheiten (t für Tage, h für Stunden, m für Minuten, s für Sekunden und ms für Millisekunden"
			);
			debug.error("-anzahl: Anzahl der Zyklen oder 0, wenn die Anzahl nicht beschränkt ist");
			debug.error("-spreizung: Zahl zwischen 0 und 100 als Anteil in Prozent der Zykluszeit, die zum Senden der Datensätze benutzt wird");
			if(dkd != null) {
				debug.error("-zeit: " + dkd.getValidTimeOptions().getInfo());
				debug.error("-rolle: " + dkd.getValidRoles().getInfo());
			}
			else {
				debug.error("-zeit: <keine Information verfügbar>");
				debug.error("-rolle: <keine Information verfügbar>");
			}
			debug.error("-objekte: Komma separierte Liste von Objekt-Ids oder PIDs mit optionalem durch Doppelpunkt getrenntem Mengennamen");
			debug.error("-daten: Durch Doppelpunkt getrennt Attributgruppen-PID, Aspekt-PID und optional Simulationsvariante");
			System.exit(1);
			return;
		}

		try {
			if(isGenerator) {
				application = new DataGenerator(parameters, subscriptions);
			}
			else {
				application = new DataGenerator(parameters, subscriptions, xfr);
			}
		}
		catch(Exception e) {
			debug.error("  " + e + " " + e.getMessage());
//			e.printStackTrace();
			System.exit(1);
			return;
		}
	}