2009-04-15 2 views
2

Ich bin neu in Java und habe einen kleinen, aber ziemlich wichtigen, Sparservice in Java geschrieben.Wie kann ich nach einer Exception einen Sparserver in Java erneut spawnen?

Ich habe festgestellt, dass es gelegentlich ohne Fehlermeldung zu dienen aufhört; Es scheint, dass der Java-Prozess einfach nach dem Zufallsprinzip ohne Stack-Trace oder Ausnahme stirbt.

Was wäre der beste Weg, um sicherzustellen, dass dieser Prozess auch nach einem Fehler am Leben bleibt? Hier ist die Hauptfunktion, wenn es hilft:

public static void main(String [] args) { 
    try { 
     MyAppServiceHandler handler = new MyAppServiceHandler(); 
     MyApp.Processor processor = new MyApp.Processor(handler); 
     TServerTransport serverTransport = new TServerSocket(8080); 
     TServer server = null; 
     server = new TSimpleServer(processor, serverTransport); 
     System.out.println("Starting thrift server..."); 
     server.serve(); 
    } 
    catch (TTransportException e) { 
     e.printStackTrace(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Welche Ausnahme erhalten Sie und in welchem ​​Teil Ihres Codes? – Eddie

+0

Ich sehe keine Ausnahmen, weshalb ich gefragt habe. Bei einem kopflosen System läuft der Dienst kontinuierlich und der Fehler ist sporadisch, daher gibt es nicht viel Feedback. –

Antwort

1

ich zu einer besseren Lösung geändert habe.

Meine main Funktion in Java sieht wie folgt aus:

public static void main(String [] args) { 
    try { 
     MyAppServiceHandler handler = new MyAppServiceHandler(); 
     MyApp.Processor processor = new MyApp.Processor(handler); 
     TServerTransport serverTransport = new TServerSocket(8080); 
     TServer server = null; 
     server = new TSimpleServer(processor, serverTransport); 
     System.out.println("Starting thrift server..."); 
     server.serve(); 
    } 
    catch (TTransportException e) { 
     e.printStackTrace(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Dies lässt die sever, sterben, die gegen geht, was ich aus der ursprünglichen Lösung gesucht. Allerdings wird der Java-Prozess/Server jetzt von Supervisor initiiert, der den Prozess im Auge behält und neu erstellt, wenn er stirbt, während die ursprüngliche Lösung (um eine while-Schleife zu verwenden) den Server am Leben erhält, aber Stack-Spuren druckt, wenn a Problem beim Verbinden mit dem Port, und diese Fehlermeldungen würden verpasst werden.

0

, wenn der Anruf zu dienen blockieren Sie tun können:

public static void main(String [] args) { 
    while(true){ 
    try { 
     MyAppServiceHandler handler = new MyAppServiceHandler(); 
     MyApp.Processor processor = new MyApp.Processor(handler); 
     TServerTransport serverTransport = new TServerSocket(8080); 
     TServer server = null; 
     server = new TSimpleServer(processor, serverTransport); 
     System.out.println("Starting thrift server..."); 
     server.serve(); 
    } 
    catch (TTransportException e) { 
     e.printStackTrace(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    //do cleanup 
    } 
} 
Verwandte Themen