2009-12-23 13 views
10

Tengo un dll que contiene código C heredado, llamo a este dll a través de JNI, pero a veces el código C falla y hace que la JVM termine. ¿Hay alguna manera de evitar el bloqueo de JVM? ¿Puedo manejar la falla JNI y dejar que la JVM sobreviva? :)Manejar un bloqueo JNI

Respuesta

3

Si es el código C el que falla, entonces la única manera de evitar que tome la JVM es evitar que el código C se bloquee en primer lugar. Ese es uno de los principales peligros/problemas que obtienes al escribir código JNI, ya que hace que la combinación de Java y C sea algo más frágil en comparación con algo que está escrito en Java puro.

4

Como ha dicho Timo, no tiene otra alternativa que hacer robusto el código JNI. Si no puede hacer eso (por ejemplo, si no tiene la fuente), entonces quizás podría optar por una solución entre procesos. Coloque el código JNI en un proceso de servidor por separado, realice llamadas RMI o HTTP. Si se bloquea, reinicie el "servidor" pero la JVM principal sobrevive. Obviamente, hay una sobrecarga de rendimiento y un aumento en la complejidad, pero tal vez puede permitirse esto?