2009-04-15 4 views
2

私はJavaを使い慣れていませんが、小さくても非常に重要な、Javaのスリラーサービスを作成しました。例外が発生した後、リプレイサーバーをJavaで再生成するにはどうすればよいですか?

時折、エラーメッセージが表示されずに配信が停止することがあります。 Javaプロセスはスタックトレースや例外なしでランダムに死んでいるようです。

このプロセスがエラーの後でも有効であることを確認するにはどうすればよいでしょうか?

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

あなたはどのような例外を取得していますか、そしてコードのどの部分にありますか? – Eddie

+0

私は例外を見ていないので、私は尋ねた。そのヘッドレスシステムでは、サービスが継続的に実行され、エラーは散発的なので、多くのフィードバックはありません。 –

答えて

1

私はよりよい解決策に変更したことが役立つならばここでの主な機能は、です。 Javaで

main関数は次のようになります。

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(); 
    } 
} 

これは、私は元の溶液から欲しかったものに反する死ぬサーバを、残します。しかし、Javaプロセス/サーバは、プロセスに目を留め、死んでもそれを再解析するSupervisorから開始されますが、元の解決策(whileループを使用する)はサーバを生かしたままにしますが、ポートに接続する際に問題が発生し、これらのエラーメッセージが表示されなくなります。

0

にサービスを提供するための呼び出しは、あなたが行うことができますブロックしている場合:

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 
    } 
} 
関連する問題