2009-04-15 28 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 2009-04-15 14:01:30

回答

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 
    } 
}