天天看點

夢回程式設計- 由LD_LIBRARY_PATH引發JNI的了解

前些天在配置通過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

System.getProperty(”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的檔案。

說完了基本的概念,再來看看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相關的說明,這裡就暫不描述了(有時間可以再深入學習)。

本文轉自 神相 51CTO部落格,原文連結:http://blog.51cto.com/shenxiang/269201,如需轉載請自行聯系原作者