Как сказал Тимо, у вас нет реальной альтернативы, кроме как сделать код JNI надежным. Если вы не можете сделать это (например, если у вас нет источника), то, возможно, вы могли бы пойти на межпроцессное решение. Поместите код JNI в отдельный процесс сервера, выполните вызовы RMI или HTTP. В случае сбоя перезапустите «сервер», но основная JVM выживет. Очевидно, что это приводит к снижению производительности и увеличению сложности, но, может быть, вы можете себе это позволить?