OpenCV вылетает веб-приложение при повторном развертывании - PullRequest
0 голосов
/ 29 мая 2018

Кажется, я не могу заново развернуть мое весеннее загрузочное веб-приложение, не перезапустив весь сервер Tomcat.Всякий раз, когда я повторяю развертывание, трассировка стека сообщает мне, что opencv уже загружен в другой загрузчик классов и не удается развернуть.

Я использую пакет OpenCV OpenPnP.https://github.com/openpnp/opencv.

У меня был этот статический метод в моем веб-приложении

   static{
        nu.pattern.OpenCV.loadShared();
        System.out.println("=====================LOADED CV================" + Core.VERSION);
    }

Поскольку веб-приложение каждый раз ломалось, я решил его развернуть, я решил собрать отдельную программу и загрузить ее в свою папку/apache-tomcat-7.0.52/lib и запустите ее как основной метод, чтобы загрузить ее один раз

public class SeparateJarFromWebApp{
       public static void main (String args[]){
            System.out.println("==============RUNNING MAIN CLASS===========");
            nu.pattern.OpenCV.loadShared();
            System.out.println("=====================LOADED CV================" + Core.VERSION);
        } 
    }

После запуска команды запустите метод main моего jar-файла, я получаю сообщение:

 You have loaded library /tmp/opencv_openpnp3438207847480914494/nu/pattern/opencv/linux/x86_64/libopencv_java320.so which might have disabled stack guard. The VM will try to fix the stack guard now.

Затем я запустил свое веб-приложение без каких-либо команд для загрузки openCv, так как оно уже было загружено моим отдельным jar-файлом.Но я получаю это в моей трассировке стека:

java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(III)J

У меня нет идей

1 Ответ

0 голосов
/ 29 мая 2018

При быстром взгляде на код это выглядит так, как будто он инициализирует некоторую нативную библиотеку.Если библиотека не позволяет выполнять как выгрузку, так и загрузку, вам не повезло в отношении повторного развертывания.

Вы могли бы иметь возможность развернуть opencv в каталоге lib tomcat, где он находится по адресупо крайней мере, в том месте, где он будет инициализирован только один раз (при условии, что это делает только одно веб-приложение), и вам нужно быть готовым к тому, что любая вторая инициализация (например, при повторном развертывании вашего веб-приложения) завершится неудачно.

Почему вы ожидаете, что какой-то случайный main метод в jar-файле на пути к классам будет выполняться при развертывании на веб-сервере, я не знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...