Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add java surf plugin
[simgrid.git] / src / bindings / java / org / simgrid / msg / Msg.java
index 108c7b5..ec212a7 100644 (file)
@@ -7,6 +7,7 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 package org.simgrid.msg;
+import org.simgrid.NativeLib;
 
 import java.io.FileOutputStream;
 import java.io.InputStream;
@@ -17,98 +18,19 @@ import java.io.File;
 public final class Msg {
        /* Statically load the library which contains all native functions used in here */
        static private boolean isNativeInited = false;
-       public static void nativeInit() {
-               if (isNativeInited)
-                       return;
-               try {
-                       /* prefer the version on disk, if existing */
-                       System.loadLibrary("simgrid-java");
-               } catch (UnsatisfiedLinkError e) {
-                       /* If not found, unpack the one bundled into the jar file and use it */
-                       loadLib("simgrid");
-                       loadLib("simgrid-java");
-               }
+        public static void nativeInit() {
+                if (isNativeInited)
+                      return;
+                NativeLib.nativeInit("simgrid");
+                NativeLib.nativeInit("simgrid-java");      
                isNativeInited = true;
+
        }
+
        static {
-               nativeInit();
+                nativeInit();
        }
-       private static void loadLib (String name) {
-               String Path = NativeLib.getPath();
-
-               String filename=name;
-               InputStream in = Msg.class.getClassLoader().getResourceAsStream(Path+filename);
-               
-               if (in == null) {
-                       filename = "lib"+name+".so";
-                       in = Msg.class.getClassLoader().getResourceAsStream(Path+filename);
-               } 
-               if (in == null) {
-                       filename = name+".dll";
-                       in = Msg.class.getClassLoader().getResourceAsStream(Path+filename);
-               }  
-               if (in == null) {
-                       filename = "lib"+name+".dll";
-                       in = Msg.class.getClassLoader().getResourceAsStream(Path+filename);
-               }  
-               if (in == null) {
-                       filename = "lib"+name+".dylib";
-                       in = Msg.class.getClassLoader().getResourceAsStream(Path+filename);
-               }  
-               if (in == null) {
-                       throw new RuntimeException("Cannot find library "+name+" in path "+Path+". Sorry, but this jar does not seem to be usable on your machine.");
-               }
-// Caching the file on disk: desactivated because it could fool the users              
-//             if (new File(filename).isFile()) {
-//                     // file was already unpacked -- use it directly
-//                     System.load(new File(".").getAbsolutePath()+File.separator+filename);
-//                     return;
-//             }
-               try {
-                       // We must write the lib onto the disk before loading it -- stupid operating systems
-                       File fileOut = new File(filename);
-//                     if (!new File(".").canWrite()) {
-//                             System.out.println("Cannot write in ."+File.separator+filename+"; unpacking the library into a temporary file instead");
-                               fileOut = File.createTempFile("simgrid-", ".tmp");
-                               // don't leak the file on disk, but remove it on JVM shutdown
-                               Runtime.getRuntime().addShutdownHook(new Thread(new FileCleaner(fileOut.getAbsolutePath())));
-//                     }
-//                     System.out.println("Unpacking SimGrid native library to " + fileOut.getAbsolutePath());
-                       OutputStream out = new FileOutputStream(fileOut);
-                       
-                       /* copy the library in position */  
-                       byte[] buffer = new byte[4096]; 
-                       int bytes_read; 
-                       while ((bytes_read = in.read(buffer)) != -1)     // Read until EOF
-                               out.write(buffer, 0, bytes_read); 
-                     
-                       /* close all file descriptors, and load that shit */
-                       in.close();
-                       out.close();
-                       System.load(fileOut.getAbsolutePath());
-               } catch (Exception e) {
-                       System.err.println("Cannot load the bindings to the simgrid library: ");
-                       e.printStackTrace();
-                       System.err.println("This jar file does not seem to fit your system, sorry");
-                       System.exit(1);
-               }
-       }               
-       /* A hackish mechanism used to remove the file containing our library when the JVM shuts down */
-       private static class FileCleaner implements Runnable {
-               private String target;
-               public FileCleaner(String name) {
-                       target = name;
-               }
-        public void run() {
-            try {
-                new File(target).delete();
-            } catch(Exception e) {
-                System.out.println("Unable to clean temporary file "+target+" during shutdown.");
-                e.printStackTrace();
-            }
-        }    
-       }
-
+        
     /** Retrieve the simulation time
      * @return The simulation time.
      */