public void uncaughtException(Thread t, Throwable e) { if (e instanceof Error) { // Speicherreserve freigeben, damit die Ausgaben nach einem OutOfMemoryError funktionieren _reserve = null; try { System.err.println( "Schwerwiegender Laufzeitfehler: Ein Thread hat sich wegen eines Errors beendet, Prozess wird terminiert"); System.err.println(t); e.printStackTrace(System.err); _debug.error( "Schwerwiegender Laufzeitfehler: " + t + " hat sich wegen eines Errors beendet, Prozess wird terminiert", e); } catch (Throwable ignored) { // Weitere Fehler während der Ausgaben werden ignoriert, damit folgendes exit() auf jeden // Fall ausgeführt wird. } System.exit(1); } else { System.err.println("Laufzeitfehler: Ein Thread hat sich wegen einer Exception beendet:"); System.err.println(t); e.printStackTrace(System.err); _debug.error("Laufzeitfehler: " + t + " hat sich wegen einer Exception beendet", e); } }
/** * Diese Methode erstellt eine Verbindung zum Datenverteiler anhand der Standard-Parameter her. * * @param application Applikation, die eine Verbindung zum Datenverteiler benötigt. * @param applicationTypePid Pid des Applikationstyps. Der Datenverteiler erzeugt für die * Appliaktion ein Objekt dieses Typs. Der Applikationstyp sollte "typ.applikation" sein oder * davon abgeleitet sein. * @param args Aufrufargumente der Applikation */ public static void run( StandardApplication application, String applicationTypePid, String[] args) { createApplicationLabel(args); final ArgumentList argumentList = new ArgumentList(args); initializeDebug(application, argumentList); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler()); try { // ArgumentListe wird in ClientDavParameters konvertiert final ClientDavParameters parameters = new ClientDavParameters(argumentList); parameters.setApplicationTypePid(applicationTypePid); parameters.setApplicationName(_applicationName); // zuerst darf die Applikation die ArgumentListe durcharbeiten application.parseArguments(argumentList); argumentList.ensureAllArgumentsUsed(); final ClientDavInterface connection = new ClientDavConnection(parameters); // Fertigmeldung für Start/Stop wird eplizit selbst übernommen establishConnection(connection); _applicationLabel.append( connection.getLocalConfigurationAuthority().getPid()); // ApplikationsKennung MessageSender.getInstance().init(connection, _applicationName, _applicationLabel.toString()); application.initialize(connection); // Fertigmeldung wird gesendet connection.sendApplicationReadyMessage(); } catch (Exception ex) { _debug.error("Fehler", ex); System.exit(1); } }
/** * Diese Methode startet einen Login-Dialog und meldet sich anhand der eingetragenen IP-Adresse, * Portnummer, Benutzername und Passwort beim Datenverteiler an. * * @param application Applikation, die eine Verbindung zum Datenverteiler benötigt. * @param applicationTypePid Pid des Applikationstyps. Der Datenverteiler erzeugt für die * Appliaktion ein Objekt dieses Typs. Der Applikationstyp sollte "typ.applikation" sein oder * davon abgeleitet sein. * @param args Aufrufargumente der Applikation */ public static void run(GUIApplication application, String applicationTypePid, String[] args) { createApplicationLabel(args); final ArgumentList argumentList = new ArgumentList(args); initializeDebug(application, argumentList); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler()); try { // soll der Login-Dialog überhaupt angezeigt werden? boolean autoLogin = argumentList.fetchArgument("-autologin=false").booleanValue(); if (autoLogin) { if (!(argumentList.hasArgument("-benutzer") && argumentList.hasArgument("-authentifizierung"))) { if (argumentList.hasArgument("-benutzer")) argumentList.fetchArgument("-benutzer"); if (argumentList.hasArgument("-authentifizierung")) { argumentList.fetchArgument("-authentifizierung"); } _debug.warning( "Der Login-Dialog wird trotz des Aufrufparameters '-autologin' aufgerufen, da die Parameter '-benutzer' und '-authentifizierung' " + "unvollständig oder nicht korrekt angegeben wurden."); autoLogin = false; } } // ArgumentListe wird in ClientDavParameters konvertiert final ClientDavParameters parameters = new ClientDavParameters(argumentList); // zuerst darf die Applikation die ArgumentListe durcharbeiten parameters.setApplicationTypePid(applicationTypePid); parameters.setApplicationName(_applicationName); application.parseArguments(argumentList); argumentList.ensureAllArgumentsUsed(); // System.out.println("IP: " + parameters.getDavCommunicationAddress() + " Port: " + // parameters.getDavCommunicationSubAddress()); ClientDavInterface connection = null; if (autoLogin) { connection = new ClientDavConnection(parameters); // Verbindung aufbauen (inkl. Anmelden zur Fertigmeldung für Start/Stop) establishConnection(connection); } else { // Login-Dialog aufrufen, der eine Verbindung zum Datenverteiler aufbaut und zurückgibt. connection = application.connect(parameters); } if (connection != null) { _applicationLabel.append( connection.getLocalConfigurationAuthority().getPid()); // ApplikationsKennung MessageSender.getInstance() .init(connection, _applicationName, _applicationLabel.toString()); application.initialize(connection); // Fertigmeldung senden connection.sendApplicationReadyMessage(); } else { throw new RuntimeException( "Die Verbindung zum Datenverteiler konnte nicht hergestellt werden."); } } catch (Exception ex) { _debug.error("Fehler in der Applikation", ex); System.exit(1); } }