問題提示
JBoss-as インスタンスのグローバル モジュールとして OpenCV をインストールしようとしています。バージョンは次のとおりです。
- JBoss-as: 7.1.1 最終版
- OpenCV: 2.4.5 (Java サポート付きでコンパイル)
JBoss-as と OpenCV のみがインストールされた Ubuntu Server 12.04 64 ビットの新規インストールから始めました。
前文
OpenCV Java ラッパーは JNI 呼び出しを使用します。したがって、次の 2 つのことが必要です。
- opencv-245.jar
- libopencv_java245.so
で利用可能/usr/share/OpenCV/java/
(インストールに関して)
また、いくつかの観察を指摘します。
- JBoss のインストールは正しい (アプリケーションはデプロイ可能で、機能している)
- Java をサポートする OpenCV のコンパイルとインストールが正しい (OpenCV を使用する Java クラスが動作している)
- OpenCV を使用し、Maven を使用して JBoss-as にデプロイされた基本的な Web アプリケーション ( は
opencv-245.jar
依存関係として にリストされているpom.xml
ため、 にパッケージ化されていますwar
)
問題の説明
OpenCV を JBoss グローバル モジュール ( <scope>provided</scope>
pom.xml で設定) として定義するとすぐに、この例外が発生します。
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat()J
org.opencv.core.Mat.n_Mat(Native Method)
org.opencv.core.Mat.<init>(Mat.java:441)
WS.printMessage(WS.java:15)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:155)
org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257)
org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222)
org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211)
org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525)
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502)
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119)
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
jar
OpenCVライブラリから例外が発生したため、OpenCVライブラリが見つかったようです。また、次のように見つからないライブラリについても文句を言いません(最後の最初のリンクから取得):
java.lang.UnsatisfiedLinkError: no xxxx in java.library.path
したがって、それは問題ではないと思いlibopencv_java245.so
ます。正確な構成については、以下で説明します。
構成
org.opencv
モジュールをmodules/org/opencv/main/module.xml
次のように定義しました。
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.opencv">
<resources>
<resource-root path="opencv-245.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
次に、同じフォルダーとサブフォルダーにも入れますopencv-245.jar
(Native Libraryで説明されているように)libopencv_java245.so
lib/linux-x86_64/
このモジュールをグローバルとして定義するには、 で変更しましたstandalone/configuration/standalone.xml
:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="org.opencv" slot="main"/>
</global-modules>
</subsystem>
最後に、設定したグローバル モジュールを使用するにはsrc/main/webapp/WEB-INF/jboss-deployment-structure.xml
:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.opencv" />
</dependencies>
</deployment>
</jboss-deployment-structure>
<scope>provided</scope>
また、 mavenを入れたことを思い出しpom.xml
ます。
また、置く:
System.loadLibrary("opencv_java245");
コードに含まれていなくても、何も変わりません。
余分な観察
また、 oneと oneear
で構成されるアプリケーションでは、「序文」のポイント 3 で説明されている手順でさえ機能せず、上記と同じ例外が発生することにも気付きました。たぶん、この情報が役立つかもしれません。war
jar
誰かがいくつかの指針や解決策を持っていますか?