#tomcat #permissions #java-native-interface #windows-server-2008 #tesseract
#tomcat #разрешения #java-native-interface #windows-server-2008 #тессеракт
Вопрос:
Я изо всех сил пытаюсь заставить работать Java-сервлет, который использует Tesseract через проект Tess4J. При инициализации основного класса библиотеки (TessAPI) сервлет останавливается со следующим исключением:
java.lang.UnsatisfiedLinkError: Access is denied.
com.sun.jna.Native.open(Native Method)
com.sun.jna.Native.open(Native.java:1759)
com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
com.sun.jna.Library$Handler.<init>(Library.java:147)
com.sun.jna.Native.loadLibrary(Native.java:412)
com.sun.jna.Native.loadLibrary(Native.java:391)
net.sourceforge.tess4j.TessAPI.<clinit>(Unknown Source)
it.sampleProj.DocumentVisualizer.startOCRConfidence(DocumentVisualizer.java:301)
it.sampleProj.DocumentVisualizer.startRecognition(DocumentVisualizer.java:220)
it.sampleProj.DocumentIdentifier.recognizeDocument(DocumentIdentifier.java:147)
it.sampleProj.DocumentIdentifier.startDocumentSearch(DocumentIdentifier.java:89)
it.sampleProj.DocumentRecognizerServlet.doPost(DocumentRecognizerServlet.java:106)
javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
Я использую 64-битный Apache Tomcat8 с 64-битным JDK 7.0.60 и Tesseract.exe и связанные с этим .64-разрядные DLL-файлы на 64-разрядном сервере Windows 2008 Server R2.
Эта ошибка звучит как проблема с разрешениями, и я не уверен в том, какая учетная запись пользователя используется Tomcat для запуска. В любом случае я уже предоставил все разрешения двум файлам .ddl, которые включены в папку lib tomcat (libtesseract302.dll и liblept168.dll )
Есть способ получить больше информации о том, какие ресурсы интересуют проблемой отказа в доступе?
Комментарии:
1. Существуют ли другие dll, от которых зависит libtesseract302.dll и liblept168.dll ? Им также потребуется настройка разрешения.
2. Может быть, да, но как я могу узнать, есть ли другие зависимые dll?
3. Я обычно использую depends .
Ответ №1:
Наконец, проблема была вызвана несоответствием 32-64 бит.
Как я уже сказал, Tomcat, JVM, Tesseract и OS были в их 64-битной версии. Но война была сгенерирована с 32-разрядной настройкой сборки. Воссоздание .война за 64-разрядную версию решает проблему для меня.
Ответ №2:
Из Javadoc:
Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
Это ошибка, связанная с JNI. LoadLibrary пытается загрузить собственную библиотеку, и она не найдена по пути, определяемому java.library.path . Этот путь должен быть определен как системное свойство при запуске JVM. например
-Djava.library.path=<your native library>
Комментарии:
1. Установка пути не должна иметь значения, библиотека найдена, и ошибка была выдана во время вызова
open
.
Ответ №3:
Запустите его от имени системного администратора, и он точно будет работать.