You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Jerry Cwiklik (Closed) (JIRA)" <de...@uima.apache.org> on 2012/01/25 21:19:40 UTC

[jira] [Closed] (UIMA-2358) UIMA AS should add a global UncaughtExceptionHandler

     [ https://issues.apache.org/jira/browse/UIMA-2358?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jerry Cwiklik closed UIMA-2358.
-------------------------------

    Resolution: Fixed

After further code review it turns out that UIMA AS does catch Throwable in PrimitiveAnalysisEngineController_impl.process() and JmsInputChannel.onMessage(). If OOM happens while a thread is executing in either of these methods, the UIMA AS catches the error. Added additional code to examine a Throwable instance and if it is of type Error, both of these methods dump a stack trace with a message, and subsequently call System.exit(2). Also, added custom global DefaultUncaughtExceptionHandler in case OOM happens somewhere where it is not caught. OOM can happen in any of the jvm threads, and not necessarily in one where the memory leak happens. In such a case,the custom handler will also dump a stack trace with a message and exit the jvm with System.exit(2).
                
> UIMA AS should add a global UncaughtExceptionHandler 
> -----------------------------------------------------
>
>                 Key: UIMA-2358
>                 URL: https://issues.apache.org/jira/browse/UIMA-2358
>             Project: UIMA
>          Issue Type: Bug
>          Components: Async Scaleout
>            Reporter: Jerry Cwiklik
>            Assignee: Jerry Cwiklik
>            Priority: Minor
>             Fix For: 2.4.0AS
>
>
> Currently UIMA AS process doesnt handle uncaught exceptions. Specifically, it should catch OOM Error and exit the process. When the OOM happens now, the jvm dumps an error (stack trace) and the UIMA AS process just hangs. Since JDK 1.5, java supports per thread as well a system wide (for all threads) custom UncaughtExceptionHandler. The application implements this interface and injects the handler to a specific thread via:
> Thread.currentThread().setUncaughtExceptionHandler(new MyExceptionHandler());
> Alternatively, one can set a global error handler via:
> Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
> The latter is the approach that I will implement. When OOM Error happens (and perhaps for all errors), the UIMA AS process should exit. For all other exceptions (not caught in a executing thread), the custom exception handler will simply log the exception at WARNING level.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira