2017-04-07 10 views
1

私の問題です:私は自分のwebappとそのWEB-INF/libに依存する.jarを含むWARファイルを持っています。 Tomcatが動作しているホスト上に存在するファイル。 JNIラッパークラスが.jarからロードされたときに、アプリケーションマネージャを使用してWARファイルをデプロイすると、スタートアップログにUnsatisfiedLinkError: file not foundが表示されます。リンクされたライブラリが存在するディレクトリを見ると、それらは明らかに存在し、世界の読み取りと実行の権限を持ち、所有者をtomcatを実行する同じ実行ユーザーに変更しました。私は、コマンドラインでWARファイルを実行できるので、これはパーミッションの問題であると確信していますが、エラーは発生しません。誰かが私が見逃してしまったものを見つけることができることを願っています。あるいは誤って読んだTomcatのドキュメンテーションに私を導いてくれます。 Tomcatマネージャ経由で展開されたときにここでTomcat 7 + JNI:UnsatisfiedLinkError:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません

は、エラーの全文です:

07 Apr 2017 10:45:53,140 [ERROR] [... omitted irrelevant log output ...] java.lang.UnsatisfiedLinkError: /opt/omitted-sdk-name/linux_x86_64/bin/libjni_emdq.so: libemdq.so: cannot open shared object file: No such file or directory 

私はsystemctl stop tomcat経由でTomcatをシャットダウンして(rootで)このような私のwarファイルを実行すると、私はUnsatisfiedLinkErrorを得ることはありません。

java -Djava.library.path=/opt/omitted-sdk-name/linux_x86_64/bin -jar /path/to/my/app##0.1.war 

いくつかの他の便利な情報:

  • CentOSの7
  • yumによる新鮮なバニラインストール(マネージャ上の管理者を有効にし、デフォルトのjvmを切り替えることを除いて、デフォルト設定からの逸脱なし)。
  • /usr/sbin/tomcat versionショー:Tomcatがユーザーtomcat
  • として実行されている
 
Server version: Apache Tomcat/7.0.69 
Server built: Nov 6 2016 01:55:51 UTC 
Server number: 7.0.69.0 
OS Name:  Linux 
OS Version:  3.10.0-514.10.2.el7.x86_64 
Architecture: amd64 
JVM Version: 1.8.0_121-b13 
JVM Vendor:  Oracle Corporation 
  • 私は、このSDKのすべての.soファイルのtomcatrootから所有権を変更しようとしました。所有者を変更しても、実際の動作は変更されませんでした。
 
[[email protected] bin]# ls -la | grep emdq 
-rwxr-xr-x 1 tomcat tomcat 403153 Nov 10 03:10 libemdq.so 
-rwxr-xr-x 1 tomcat tomcat 76850 Nov 10 03:11 libjni_emdq.so 
  • EDIT:そこをTomcatが実行のように、ユーザと同じ所有者を、と私は予想完全な読み込み+実行可能権限は、物事を固定しているだろう - たとえば、この所有者/モードは、問題を生み出しますこのマシンではJavaの2つのバージョンと思われます。 rootのパス内の1つは、1.8.0_77とTomcatの構成された一つは1.8.0_121ある:.soの質問に2つにfile
 
[[email protected] tomcat]# java -version 
java version "1.8.0_77" 
Java(TM) SE Runtime Environment (build 1.8.0_77-b03) 
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) 
[[email protected] tomcat]# /etc/alternatives/jre_1.8.0_openjdk/bin/java -version 
openjdk version "1.8.0_121" 
OpenJDK Runtime Environment (build 1.8.0_121-b13) 
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) 
  • 出力を示し、それらは、64ビットのLIBSありますので、私は、64ビットJVMで実行しているとの問題があるとは思わない:
 
[[email protected] bin]# file libjni_emdq.so 
libjni_emdq.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 
[[email protected] bin]# file libemdq.so 
libemdq.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 
  • 私は$CATALINA_HOME/conf/conf.d/omittedname.confでファイルに次の行を持っています。過去のある時点で、私はtomcat.confに入れましたが、いずれの場所でも同じ結果が得られているようです。
 
MY_BIN="/opt/omitted-sdk-name/linux_x86_64/bin" 
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$MY_BIN" 
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$MY_BIN -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -XX:+UseConcMarkSweepGC" 
# needed to run the application 
JAVA_OPTS="$JAVA_OPTS -Dprofile=test" 
  • EDIT:これを掲示した後、私はrootはそのパスに別のJVMを持っていることに気づきました。上記のJavaバージョンも編集されました。
 
[[email protected] tomcat]# echo $PATH 
/java/jdk1.8.0_77/bin:/opt/omitted-sdk-name/linux_x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 

私が見て試すことができます何か他のものはありますか?おそらくadd a java.io.FilePermissions permissionする必要がありますか?

また、ルートとして物事を運営/所有することの意義を認識している謙虚な声明です。私の目標は、この開発サーバーを中断しないように、Tomcatマネージャの作業環境設定に戻ることです。

+0

* .soファイルはどこにありますか?それはあなたのパス環境変数にありますか?そうでなければ、-Djava.library.path = "directory \ containing \ your \ so \ file"をTomcatに指定することができます。 – yavuzkavus

+0

rootとしてログインすると、 '$ PATH'は.soファイルの場所を含みます。ユーザ 'tomcat'にはログインシェルが割り当てられていません('/sbin/nologin')。私は 'JAVA_OPTS'に' java.library.path'を持っています(下を見てください)。 jvm引数を別の場所に指定する必要がありますか? –

+0

しかし、このマシンにはいくつかのバージョンのJavaがあります。 Oracleのjdk-1.8.0_77はrootのパスにありますが、Tomcatは '/ etc/alternatives/jdk-1.8.0_121'のOpenJDKバージョンを使用するように設定されています。 –

答えて

0

この回答は満足できるものではありませんが、私の問題を解決する鍵でした。私は文LD_LIBRARY_PATH=/opt/omitted-sdk-name/linux_x86_64/bin$CATALINA_HOME/conf/conf.d/myapp.confから$CATALINA_HOME/conf/tomcat.confに移さなければなりませんでした。私がこれをした後、UnsatisfiedLinkErrorは姿を消した。

関連する問題

 関連する問題