Выполнить собственный код через JNI / DLL или EXE? - PullRequest
3 голосов
/ 12 октября 2009

У нас есть собственное приложение, к которому мы можем получить доступ через JNI-> DLL или запустив EXE с параметрами командной строки. Какой будет лучший подход?

Мы будем вызывать этот метод около 100 раз в день. Производительность не супер важна. Это нативное приложение было разработано группой за пределами нашей компании, поэтому мы не слишком знакомы с кодом (хотя мы и владеем им).

Маршрут EXE кажется более простым и понятным (тем более, что мы не использовали много C). Также я понимаю, что с JNI вы можете привести к сбою JVM, если в вашем DLL-коде есть утечка памяти или другие проблемы.

Ответы [ 2 ]

5 голосов
/ 12 октября 2009

Я бы настоятельно рекомендовал подход .exe.

  1. в случае сбоя вы можете восстановить .exe
  2. Вы не будете страдать от утечек / повреждений памяти и т. Д.

Недостатком является то, что вам, возможно, придется анализировать выходные данные .exe, чтобы определить результаты / состояние и т. Д., И если он не предназначен для этого, то это может быть нецелесообразно (или даже невозможно).

Но в качестве первого подхода порождение .exe - это путь. Не забудьте использовать stdout / err одновременно , чтобы избежать любых проблем с зависанием .exe (распространенная проблема, если верить SO).

4 голосов
/ 12 октября 2009

В этом случае я бы назвал .exe, главным образом потому, что нестабильное приложение в этом случае не может сломать JVM.

И вызов .exe 100 раз в день достаточно быстро.

С другой стороны, если .dll предоставляет хороший API, то использование этого даст вам больше шансов на диагностику проблемы, если что-то пойдет не так.

...