0

私は、Tomcat 7、Spring 3.1.1、および Windows 7 Pro x64 で大きくて奇妙な問題を抱えています。

この問題は、Web アプリが例外をスローし、それがこのカスタム HandlerExceptionResolver によって管理されている場合に発生します。

public class JsonHandlerExceptionResolver implements HandlerExceptionResolver {

    private static Logger log = Logger.getLogger(JsonHandlerExceptionResolver.class);


    @Override
    @ResponseBody
    public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse response, Object obj, Exception e) {
        Output out=new Output(false);
        out.setException(e.getClass().getName());
        out.setError(e.getLocalizedMessage());
        response.setContentType("application/json");
        log.error("",e);
        try{
            response.getWriter().println(new Gson().toJson(new Output(e.getMessage(),e.getClass().getSimpleName())));
            response.getWriter().flush();
            response.getWriter().close();
        }catch (Exception e1) {
            log.error(e1);
            e1.printStackTrace();
        }
        return null;
    }

}

http リクエストがハングし、ロックを解除するには tomcat を停止する必要があります。ログ ファイルでは正しいスタック トレースを確認できますが、それは tomcat shutdown コマンドの後でのみ出力されます (したがって、Tomcat が実際にハングしていることがわかります)。

奇妙なことに、この問題は、Tomcat が C# アプリケーション (適切な引数で javaw プロセスを実行する) によって起動された場合にのみ発生し、コマンドライン (同じコマンドを使用して) で起動しようとすると、問題は発生しません! このエラーは体系的なものではないことに注意してください。多くの同一システム (win7 + tomcat) で機能します。何ができるか知っていますか?

4

1 に答える 1

0

私の推測では、C# が Tomcat を生成している場合、StartInfo.RedirectStandardError プロパティをチェックすることで確認できる共有 IO に問題がある可能性があります。

長い説明については、ProcessInfo および RedirectStandardOutputを参照してください。

乾杯

于 2013-08-27T08:12:28.760 に答える