X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fjava%2Fjava%2Fcom%2Fceph%2Ffs%2FCephNativeLoader.java;fp=src%2Fceph%2Fsrc%2Fjava%2Fjava%2Fcom%2Fceph%2Ffs%2FCephNativeLoader.java;h=358ca243e5c66fbf2a1d1ea10c20452b823ee213;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/java/java/com/ceph/fs/CephNativeLoader.java b/src/ceph/src/java/java/com/ceph/fs/CephNativeLoader.java new file mode 100644 index 0000000..358ca24 --- /dev/null +++ b/src/ceph/src/java/java/com/ceph/fs/CephNativeLoader.java @@ -0,0 +1,93 @@ +/* + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +package com.ceph.fs; + +class CephNativeLoader { + private static final CephNativeLoader instance = new CephNativeLoader(); + private static boolean initialized = false; + + private static final String JNI_PATH_ENV_VAR = "CEPH_JNI_PATH"; + private static final String LIBRARY_NAME = "cephfs_jni"; + private static final String LIBRARY_FILE = "libcephfs_jni.so"; + + private CephNativeLoader() {} + + public static CephNativeLoader getInstance() { + return instance; + } + + public synchronized void loadLibrary() { + if (initialized) + return; + + boolean success = false; + + /* + * Allow a Ceph specific environment variable to force + * the loading path. + */ + String path = System.getenv(JNI_PATH_ENV_VAR); + try { + if (path != null) { + System.out.println("Loading libcephfs-jni: " + path); + System.load(path); + success = true; + } else { + try { + /* + * Try default Java loading path(s) + */ + System.out.println("Loading libcephfs-jni from default path: " + + System.getProperty("java.library.path")); + System.loadLibrary(LIBRARY_NAME); + success = true; + } catch (final UnsatisfiedLinkError ule1) { + try { + /* + * Try RHEL/CentOS default path + */ + path = "/usr/lib64/" + LIBRARY_FILE; + System.out.println("Loading libcephfs-jni: " + path); + System.load(path); + success = true; + } catch (final UnsatisfiedLinkError ule2) { + /* + * Try Ubuntu default path + */ + path = "/usr/lib/jni/" + LIBRARY_FILE; + System.out.println("Loading libcephfs-jni: " + path); + System.load(path); + success = true; + } + } + } + } finally { + System.out.println("Loading libcephfs-jni: " + + (success ? "Success!" : "Failure!")); + } + + /* + * Finish initialization + */ + CephMount.native_initialize(); + initialized = true; + } + +}