前些天在配置通過OCI的方式連接Oracle中曾進碰到一個關于“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”這么一個問題,這個問題糾結了許久才解決,解決方式參考前面的文章。
趁雙休日好好的理解一下產生這個問題的來龍去脈。
先看一段話先:
PATH is the environment variable.
java.library.path is the system properties.
When the java application started, JVM will set java.library.path’s value using PATH’s value.
In java program, it’s very difficult to get the value of environment variables, but it’s very easy to get/set system properties. Use
PATH is the environment variable.
java.library.path is the system properties.
When the java application started, JVM will set java.library.path’s value using PATH’s value.
In java program, it’s very difficult to get the value of environment variables, but it’s very easy to get/set system properties. Use
System.getProperty(”project_root”, “..”);
System.setProperty(”project_root”, “..”);
System.setProperty(”project_root”, “..”);
java.libaray.path 是system properties,在windows系統通常是使用PATH的值,而在Linux上是用LD_LIBRARY_PATH的值。 隨便也說一下java.class.path,他是對應于CLASSPATH中的值。
那LD_LIBRARY_PATH的值主要是干什么呢?他是來處理非標準路徑下的”共享庫“的,可以理解成windows 的dll,但在linux下是*.so的文件。
那LD_LIBRARY_PATH的值主要是干什么呢?他是來處理非標準路徑下的”共享庫“的,可以理解成windows 的dll,但在linux下是*.so的文件。
說完了基本的概念,再來看看OCI是怎么連接Oracle的,其實OCI是通過JNI(java native interface)的方式來訪問Oracle的,請看下圖
1)我們知道Oracle的驅動是classes12.jar(ojdbc14.jar),這里應該對應著java-class;
2)同樣我們在JBOSS啟動腳本中設置? JBOSS_NATIVE_DIR=”/opt/instantclient_10_2″,其實就是將LD_LIBRARY_PATH=”/opt /instantclient_10_2″,而在這個目錄下有大量的*.so文件,這些應該對應native;
3)至于jni-stub是一些存根文件,可以參考一下JNI相關的說明,這里就暫不描述了(有時間可以再深入學習)。
1)我們知道Oracle的驅動是classes12.jar(ojdbc14.jar),這里應該對應著java-class;
2)同樣我們在JBOSS啟動腳本中設置? JBOSS_NATIVE_DIR=”/opt/instantclient_10_2″,其實就是將LD_LIBRARY_PATH=”/opt /instantclient_10_2″,而在這個目錄下有大量的*.so文件,這些應該對應native;
3)至于jni-stub是一些存根文件,可以參考一下JNI相關的說明,這里就暫不描述了(有時間可以再深入學習)。
本文轉自 神相 51CTO博客,原文鏈接:http://blog.51cto.com/shenxiang/269201,如需轉載請自行聯系原作者