Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Further cleanups of the Java bindings:
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 19 Nov 2007 20:01:59 +0000 (20:01 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 19 Nov 2007 20:01:59 +0000 (20:01 +0000)
* Properly document the java bindings (mainly, add them to the Doxygen)

* No need for a ParallelTask class: they are handled exactly the same
   way than regular task, except at creation time.
  Thus giving Task a new constructor to build parallel tasks, and
   removing every other bit related to ParallelTask.java

* The Channel object was wrong: in MSG, channels are just like ports
   on each host. In jMSG, they were global tags containing all hosts.
  I just killed them.
  Task receiving methods are static Task methods.
  Task sending methods are attached to the host to which you want to
   send.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5059 48e7efb5-ca39-0410-a469-dd3cf9ba447f

35 files changed:
doc/Doxyfile.in
doc/module-msg.doc
doc/modules.doc
examples/java/basic/BasicTest.java
examples/java/basic/Forwarder.java
examples/java/basic/Master.java
examples/java/basic/Slave.java
examples/java/comm_time/CommTimeTask.java
examples/java/comm_time/CommTimeTest.java
examples/java/comm_time/FinalizeTask.java
examples/java/comm_time/Master.java
examples/java/comm_time/Slave.java
examples/java/comm_time/comm_time_deployment.xml
examples/java/ping_pong/PingPongTest.java
examples/java/ping_pong/Receiver.java
examples/java/ping_pong/Sender.java
examples/java/suspend/SuspendTest.java
src/java/jmsg.c
src/java/jmsg.h
src/java/jmsg_parallel_task.c [deleted file]
src/java/jmsg_parallel_task.h [deleted file]
src/java/simgrid/msg/ApplicationHandler.java
src/java/simgrid/msg/Channel.java [deleted file]
src/java/simgrid/msg/Host.java
src/java/simgrid/msg/HostNotFoundException.java
src/java/simgrid/msg/JniException.java
src/java/simgrid/msg/Msg.java
src/java/simgrid/msg/MsgException.java
src/java/simgrid/msg/MsgNative.java [new file with mode: 0644]
src/java/simgrid/msg/NativeException.java
src/java/simgrid/msg/ParallelTask.java [deleted file]
src/java/simgrid/msg/Process.java
src/java/simgrid/msg/ProcessNotFoundException.java
src/java/simgrid/msg/Sem.java
src/java/simgrid/msg/Task.java

index 927f8aa..5ebca8d 100644 (file)
@@ -523,7 +523,8 @@ INPUT                  = @srcdir@/index.doc \
                          @top_srcdir@/src/amok \
                          @top_srcdir@/src/amok/Bandwidth \
                          @top_srcdir@/src/amok/PeerManagement \
-                         @top_srcdir@/src/simdag
+                         @top_srcdir@/src/simdag \
+                         @top_srcdir@/src/java/simgrid/msg
 
 # This tag can be used to specify the character encoding of the source files that 
 # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
index 5ae5f6d..2a35441 100644 (file)
@@ -1,4 +1,48 @@
-/** @addtogroup MSG_API 
+/** \defgroup MSG_JAVA      jMSG
+    \ingroup MSG_API
+    \brief Java bindings to MSG (\ref MSG_API)
+
+    \htmlonly <!-- 
+      DOXYGEN_NAVBAR_LABEL="JAVA bindings" 
+      DOXYGEN_NAVBAR_CHILD "Simulation functions"=classsimgrid_1_1msg_1_1Msg.html
+      DOXYGEN_NAVBAR_CHILD "Host"=classsimgrid_1_1msg_1_1Host.html
+      DOXYGEN_NAVBAR_CHILD "Process"=classsimgrid_1_1msg_1_1Process.html
+      DOXYGEN_NAVBAR_CHILD "Task"=classsimgrid_1_1msg_1_1Task.html      
+      DOXYGEN_NAVBAR_CHILD "MsgException"=classsimgrid_1_1msg_1_1MsgException.html
+    --> \endhtmlonly 
+         
+      MSG was the first distributed programming environment provided within
+      SimGrid. While almost realistic, it remains quite simple (simplistic?).
+      This describes the Java bindings to this interface.
+
+      \section jMSG_who Who should use this (and who shouldn't)
+      
+      You should use MSG if you want to study some heuristics for a
+      given problem you don't really want to implement. If you want to
+      use the Java programming language, your are in the right
+      section. To use the C interface, please refer to \ref MSG_C.
+*/
+
+/** \defgroup MSG_C      MSG native
+    \ingroup MSG_API
+    \brief Native interface to MSG (\ref MSG_API)
+
+    \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Native interface" --> \endhtmlonly 
+         
+      MSG was the first distributed programming environment provided within
+      SimGrid. While almost realistic, it remains quite simple (simplistic?).
+      This describes the native to MSG.
+
+      \section jMSG_who Who should use this (and who shouldn't)
+      
+      You should use MSG if you want to study some heuristics for a
+      given problem you don't really want to implement. If you want to
+      use the C programming language, your are in the right
+      section. To use the Java programming interface, please refer to
+      \ref MSG_JAVA.
+*/
+
+/** @addtogroup MSG_C
 
   \section MSG_funct Offered functionnalities
    - \ref m_process_management
 */
 
 /** @defgroup m_datatypes_management MSG Data Types 
-    @ingroup MSG_API
+    @ingroup MSG_C
     @brief This section describes the different datatypes provided by MSG.
     
     \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Data types" --> \endhtmlonly
 */
 /**     \addtogroup m_process_management
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 /**     \addtogroup m_host_management
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 /**     \addtogroup m_task_management
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 /**     \addtogroup msg_gos_functions
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 /**     \addtogroup m_channel_management
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 /**     \addtogroup msg_easier_life
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 /**     \addtogroup msg_simulation
-        \ingroup MSG_API  */
+        \ingroup MSG_C  */
 
 /** \page MSG_ex_master_slave Master/slave application
-
-    <center>[\ref MSG_API]</center>
     
     Simulation of a master-slave application using a realistic platform and
     an external description of the deployment. 
index 7794d32..f8c8ebf 100644 (file)
@@ -47,6 +47,7 @@
       before). 
 */
 
+
 /** \defgroup GRAS_API      GRAS
     \ingroup SimGrid_API
     \brief Realistic programming environment (Grid Reality And Simulation)
index 6cea858..8f51245 100644 (file)
@@ -19,8 +19,8 @@ public class BasicTest {
    
     public static void main(String[] args) throws JniException, NativeException {
        
-       /* initialize the MSG simulation. Must be done before anything else (even logging). */
-       Msg.init(args);
+       /* initialize the MSG simulation. Must be done before anything else (even logging). */
+       Msg.init(args);
 
        if(args.length < 2) {
                
@@ -29,8 +29,6 @@ public class BasicTest {
          System.exit(1);
        }
                
-       /* specify the number of channel for the process of the simulation. */
-       Channel.setNumber(1);
         /* specify a paje output file. */
         Msg.pajeOutput("basic.trace");
                
index 3d94f7d..4e856bc 100644 (file)
@@ -28,17 +28,15 @@ public class Forwarder extends simgrid.msg.Process {
         }
       }
       
-      Channel channel = new Channel(0);
-               
       int taskCount = 0;
       while(true) {
-        Task t = channel.get();        
+        Task t = Task.get(0);  
         
         if (t instanceof FinalizeTask) {
            Msg.info("All tasks have been dispatched. Let's tell everybody the computation is over.");
            
            for (int cpt = 0; cpt<slavesCount; cpt++) {
-              channel.put(new FinalizeTask(),slaves[cpt]);
+              slaves[cpt].put(0,new FinalizeTask());
            }
            break;
         }
@@ -47,7 +45,7 @@ public class Forwarder extends simgrid.msg.Process {
         Msg.info("Received \"" + task.getName() + "\" ");
                    
         Msg.info("Sending \"" + task.getName() + "\" to \"" + slaves[taskCount % slavesCount].getName() + "\"");
-        channel.put(task, slaves[taskCount % slavesCount]);
+        slaves[taskCount % slavesCount].put(0, task);
            
         taskCount++;
       }
index e25fb35..e854106 100644 (file)
@@ -12,6 +12,7 @@ import simgrid.msg.*;
 
 public class Master extends simgrid.msg.Process {
    public void main(String[] args) throws JniException, NativeException {
+      int channel = 0;
       Msg.info("hello!");
         
       int slaveCount = 0;
@@ -56,15 +57,13 @@ public class Master extends simgrid.msg.Process {
       
       Msg.info("Got "+ numberOfTasks + " task to process.");
       
-      Channel channel = new Channel(0);
-      
       for (int i = 0; i < numberOfTasks; i++) {
         Msg.info("Sending \"" + todo[i].getName()+ "\" to \"" + slaves[i % slaveCount].getName() + "\"");
         
         if((Host.currentHost()).equals(slaves[i % slaveCount])) 
           Msg.info("Hey ! It's me ! ");
         
-        channel.put(todo[i], slaves[i % slaveCount]);
+        slaves[i % slaveCount].put(channel, todo[i]);
       }
       
       Msg.info("Send completed");
@@ -72,7 +71,7 @@ public class Master extends simgrid.msg.Process {
       Msg.info("All tasks have been dispatched. Let's tell everybody the computation is over.");
       
       for (int i = 0; i < slaveCount; i++) {
-        channel.put(new FinalizeTask(),slaves[i]);
+        slaves[i].put(channel, new FinalizeTask());
       }
       
       Msg.info("Goodbye now!");
index 5019044..33eea2d 100644 (file)
@@ -14,10 +14,8 @@ public class Slave extends simgrid.msg.Process {
    public void main(String[] args) throws JniException, NativeException {
       Msg.info("Hello !");
       
-      Channel channel = new Channel(0);
-
       while(true) { 
-        Task t = channel.get();        
+        Task t = Task.get(0);  
         
         if (t instanceof FinalizeTask) {
            break;
index 0672146..1890530 100644 (file)
@@ -13,10 +13,9 @@ import simgrid.msg.*;
 public class CommTimeTask extends Task {
        
    private double timeVal;
-   private int data;
        
    public CommTimeTask(String name, double computeDuration, double messageSize) throws JniException, NativeException{
-      create(name,computeDuration,messageSize);
+      super(name,computeDuration,messageSize);
    }
        
    public void setTime(double timeVal){
@@ -26,13 +25,5 @@ public class CommTimeTask extends Task {
    public double getTime() {
       return this.timeVal;
    }
-       
-   public void setData(int data) {
-      this.data = data;
-   }
-   
-   public int getData() {
-      return this.data;
-   }
 }
     
\ No newline at end of file
index 28980af..326985d 100644 (file)
@@ -30,8 +30,6 @@ public class CommTimeTest {
          System.exit(1);
        }
        
-       /* specify the number of channel for the process of the simulation. */
-       Channel.setNumber(1);
         /* specify a paje output file. */
         Msg.pajeOutput("comm_time.trace");
                
index 6fd6623..c3a10b3 100644 (file)
@@ -13,7 +13,7 @@ import simgrid.msg.*;
 public class FinalizeTask extends Task {
        
    public FinalizeTask() throws JniException, NativeException{
-      create("",0,0);
+      super("",0,0);
    }
 }
     
\ No newline at end of file
index 5567e91..488dc3d 100644 (file)
@@ -39,12 +39,10 @@ public class Master extends simgrid.msg.Process {
       
       Msg.info("Got "+numberoftasks+" task(s) to process.");
       
-      Channel channel = new Channel(0);
-               
       for (int i = 0; i < numberoftasks; i++) {                        
         CommTimeTask task = new CommTimeTask("Task_" + i ,taskComputeSize,taskCommunicateSize);
         task.setTime(Msg.getClock());
-        channel.put(task,slaves[i % slavecount]);
+        slaves[i % slavecount].put(0,task);
         
 //      Msg.info("Send completed for the task " + task.getName() + " on the host " + slaves[i % slavecount].getName() +  " [" + (i % slavecount) + "]");
       }
@@ -54,7 +52,7 @@ public class Master extends simgrid.msg.Process {
       for (int i = 0; i < slavecount; i++) { 
                        
         Msg.info("Finalize host " + slaves[i].getName() +  " [" + i + "]");
-        channel.put(new FinalizeTask(),slaves[i]);
+        slaves[i].put(0, new FinalizeTask());
       }
       
       Msg.info("All finalize messages have been dispatched. Goodbye now!");
index 78cde4f..cb7878b 100644 (file)
@@ -16,11 +16,9 @@ public class Slave extends simgrid.msg.Process {
       
       Msg.info("Hello i'm a slave");
       
-      Channel channel = new Channel(0);
-               
       while(true) {
         double time1 = Msg.getClock();       
-        Task t = channel.get();        
+        Task t = Task.get(0);  
         double time2 = Msg.getClock();
  
         if (t instanceof FinalizeTask) {
index 134c5f1..c239ec0 100644 (file)
@@ -2,7 +2,7 @@
 <!DOCTYPE platform SYSTEM "surfxml.dtd">
 <platform version="2">
   <process host="Jacquelin" function="Master">
-     <argument value="10000"/>
+     <argument value="50000"/>
      <argument value="50000"/>
      <argument value="10"/>
      <argument value="iRMX"/>
index 5f583de..f5c3d58 100644 (file)
@@ -28,8 +28,6 @@ public class PingPongTest  {
                System.exit(1);
        }
        
-       /* specify the number of channel for the process of the simulation. */
-       Channel.setNumber(1);
         /* specify a paje output file. */
         Msg.pajeOutput("ping_pong.trace");
                
index cb5c808..a35426d 100644 (file)
@@ -21,11 +21,10 @@ public class Receiver extends simgrid.msg.Process {
       double communicationTime=0;
 
       double time = Msg.getClock();
-      Channel channel = new Channel(0);
     
       Msg.info("try to get a task");
         
-      PingPongTask task = (PingPongTask)channel.get();
+      PingPongTask task = (PingPongTask)Task.get(0);
       double timeGot = Msg.getClock();
       double timeSent = task.getTime();
             
index 332329b..fd44bb2 100644 (file)
@@ -36,8 +36,6 @@ public class Sender extends simgrid.msg.Process {
          }
         }
         
-        Channel channel = new Channel(0);
-        
         for (int pos = 0; pos < hostCount; pos++) { 
           time = Msg.getClock(); 
             
@@ -46,7 +44,7 @@ public class Sender extends simgrid.msg.Process {
           task = new PingPongTask("no name",computeDuration,commSizeLat);
           task.setTime(time);
             
-          channel.put(task, hostTable[pos]); 
+          hostTable[pos].put(0,task);
         } 
         
         Msg.info("goodbye!");
index 8f18fa9..9868e56 100644 (file)
@@ -25,8 +25,6 @@ public class SuspendTest {
                System.exit(1);
        }
        
-       /* specify the number of channel for the process of the simulation. */
-       Channel.setNumber(1);
         /* specify a paje output file. */
         Msg.pajeOutput("suspend.trace");
                
index 9d7c85a..5239f29 100644 (file)
@@ -18,7 +18,6 @@
 #include "jmsg_process.h"
 #include "jmsg_host.h"
 #include "jmsg_task.h"
-#include "jmsg_parallel_task.h"
 #include "jmsg_channel.h"
 #include "jxbt_utilities.h"
 
@@ -57,14 +56,14 @@ native_to_java_process(m_process_t process)
  */
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processCreate(JNIEnv* env, jclass cls, jobject jprocess_arg, jobject jhost) {
+Java_simgrid_msg_MsgNative_processCreate(JNIEnv* env, jclass cls, jobject jprocess_arg, jobject jhost) {
   jobject jprocess;            /* the global reference to the java process instance    */
   jstring jname;               /* the name of the java process instance                */
   const char* name;            /* the C name of the process                            */
   m_process_t process;         /* the native process to create                         */
 
 
-  DEBUG4("Java_simgrid_msg_Msg_processCreate(env=%p,cls=%p,jproc=%p,jhost=%p)",
+  DEBUG4("Java_simgrid_msg_MsgNative_processCreate(env=%p,cls=%p,jproc=%p,jhost=%p)",
         env,cls,jprocess_arg,jhost);
   /* get the name of the java process */
   jname = jprocess_get_name(jprocess_arg,env);
@@ -137,7 +136,7 @@ Java_simgrid_msg_Msg_processCreate(JNIEnv* env, jclass cls, jobject jprocess_arg
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processSuspend(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processSuspend(JNIEnv* env, jclass cls, jobject jprocess) {
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
   if(!process) { 
@@ -151,7 +150,7 @@ Java_simgrid_msg_Msg_processSuspend(JNIEnv* env, jclass cls, jobject jprocess) {
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processResume(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processResume(JNIEnv* env, jclass cls, jobject jprocess) {
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
   if(!process) { 
@@ -165,7 +164,7 @@ Java_simgrid_msg_Msg_processResume(JNIEnv* env, jclass cls, jobject jprocess) {
 }
 
 JNIEXPORT jboolean JNICALL 
-Java_simgrid_msg_Msg_processIsSuspended(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processIsSuspended(JNIEnv* env, jclass cls, jobject jprocess) {
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
   if(!process) { 
@@ -178,7 +177,7 @@ Java_simgrid_msg_Msg_processIsSuspended(JNIEnv* env, jclass cls, jobject jproces
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processKill(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processKill(JNIEnv* env, jclass cls, jobject jprocess) {
   /* get the native instances from the java ones */
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
@@ -197,7 +196,7 @@ Java_simgrid_msg_Msg_processKill(JNIEnv* env, jclass cls, jobject jprocess) {
 }
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_processGetHost(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processGetHost(JNIEnv* env, jclass cls, jobject jprocess) {
   /* get the native instances from the java ones */
   m_process_t process = jprocess_to_native_process(jprocess,env);
   m_host_t host;
@@ -220,11 +219,11 @@ Java_simgrid_msg_Msg_processGetHost(JNIEnv* env, jclass cls, jobject jprocess) {
 }
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_processFromPID(JNIEnv* env, jclass cls, jint PID) {
+Java_simgrid_msg_MsgNative_processFromPID(JNIEnv* env, jclass cls, jint PID) {
   m_process_t process = MSG_process_from_PID(PID);
 
   if(!process) {
-    jxbt_throw_native(env, bprintf("MSG_process_from_PID(%d) failed",PID));
+    jxbt_throw_process_not_found(env, bprintf("PID = %d",PID));
     return NULL;
   }
 
@@ -238,7 +237,7 @@ Java_simgrid_msg_Msg_processFromPID(JNIEnv* env, jclass cls, jint PID) {
 
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_processGetPID(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processGetPID(JNIEnv* env, jclass cls, jobject jprocess) {
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
   if(!process) { 
@@ -251,7 +250,7 @@ Java_simgrid_msg_Msg_processGetPID(JNIEnv* env, jclass cls, jobject jprocess) {
 
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_processGetPPID(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processGetPPID(JNIEnv* env, jclass cls, jobject jprocess) {
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
   if(!process) {
@@ -263,7 +262,7 @@ Java_simgrid_msg_Msg_processGetPPID(JNIEnv* env, jclass cls, jobject jprocess) {
 }
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_processSelf(JNIEnv* env, jclass cls) {
+Java_simgrid_msg_MsgNative_processSelf(JNIEnv* env, jclass cls) {
   m_process_t process = MSG_process_self();
   jobject jprocess;
 
@@ -282,18 +281,18 @@ Java_simgrid_msg_Msg_processSelf(JNIEnv* env, jclass cls) {
 
 
 JNIEXPORT jint JNICALL
-Java_simgrid_msg_Msg_processSelfPID(JNIEnv* env, jclass cls) {
+Java_simgrid_msg_MsgNative_processSelfPID(JNIEnv* env, jclass cls) {
   return (jint)MSG_process_self_PID();
 }
 
 
 JNIEXPORT jint JNICALL
-Java_simgrid_msg_Msg_processSelfPPID(JNIEnv* env, jclass cls) {
+Java_simgrid_msg_MsgNative_processSelfPPID(JNIEnv* env, jclass cls) {
   return (jint)MSG_process_self_PPID();
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processChangeHost(JNIEnv* env, jclass cls, jobject jprocess, jobject jhost){
+Java_simgrid_msg_MsgNative_processChangeHost(JNIEnv* env, jclass cls, jobject jprocess, jobject jhost){
   m_host_t host = jhost_get_native(env,jhost);
   m_process_t process = jprocess_to_native_process(jprocess,env);
        
@@ -313,7 +312,7 @@ Java_simgrid_msg_Msg_processChangeHost(JNIEnv* env, jclass cls, jobject jprocess
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processWaitFor(JNIEnv* env, jclass cls,jdouble seconds) {
+Java_simgrid_msg_MsgNative_processWaitFor(JNIEnv* env, jclass cls,jdouble seconds) {
   if(MSG_OK != MSG_process_sleep((double)seconds))
     jxbt_throw_native(env, 
                       bprintf("MSG_process_change_host(%f) failed", (double)seconds));
@@ -325,7 +324,7 @@ Java_simgrid_msg_Msg_processWaitFor(JNIEnv* env, jclass cls,jdouble seconds) {
  ***************************************************************************************/
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_hostGetByName(JNIEnv* env, jclass cls, jstring jname) {
+Java_simgrid_msg_MsgNative_hostGetByName(JNIEnv* env, jclass cls, jstring jname) {
   m_host_t host;               /* native host                                          */
   jobject jhost;               /* global reference to the java host instance returned  */
        
@@ -375,7 +374,7 @@ Java_simgrid_msg_Msg_hostGetByName(JNIEnv* env, jclass cls, jstring jname) {
 }
 
 JNIEXPORT jstring JNICALL 
-Java_simgrid_msg_Msg_hostGetName(JNIEnv* env, jclass cls, jobject jhost) {
+Java_simgrid_msg_MsgNative_hostGetName(JNIEnv* env, jclass cls, jobject jhost) {
   m_host_t host = jhost_get_native(env,jhost);
 
   if(!host) {
@@ -387,12 +386,12 @@ Java_simgrid_msg_Msg_hostGetName(JNIEnv* env, jclass cls, jobject jhost) {
 }
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_hostGetNumber(JNIEnv* env, jclass cls) {
+Java_simgrid_msg_MsgNative_hostGetNumber(JNIEnv* env, jclass cls) {
   return (jint)MSG_get_host_number();
 }
 
 JNIEXPORT jobject JNICALL
-Java_simgrid_msg_Msg_hostSelf(JNIEnv* env, jclass cls) {
+Java_simgrid_msg_MsgNative_hostSelf(JNIEnv* env, jclass cls) {
   jobject jhost;
        
   m_host_t host = MSG_host_self();
@@ -427,7 +426,7 @@ Java_simgrid_msg_Msg_hostSelf(JNIEnv* env, jclass cls) {
 }
 
 JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_hostGetSpeed(JNIEnv* env, jclass cls, jobject jhost) {
+Java_simgrid_msg_MsgNative_hostGetSpeed(JNIEnv* env, jclass cls, jobject jhost) {
   m_host_t host = jhost_get_native(env,jhost);
 
   if(!host) {
@@ -439,7 +438,7 @@ Java_simgrid_msg_Msg_hostGetSpeed(JNIEnv* env, jclass cls, jobject jhost) {
 }
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_hostGetLoad(JNIEnv* env, jclass cls, jobject jhost) {
+Java_simgrid_msg_MsgNative_hostGetLoad(JNIEnv* env, jclass cls, jobject jhost) {
   m_host_t host = jhost_get_native(env,jhost);
 
   if(!host) {
@@ -452,7 +451,7 @@ Java_simgrid_msg_Msg_hostGetLoad(JNIEnv* env, jclass cls, jobject jhost) {
 
 
 JNIEXPORT jboolean JNICALL 
-Java_simgrid_msg_Msg_hostIsAvail(JNIEnv* env, jclass cls, jobject jhost) {
+Java_simgrid_msg_MsgNative_hostIsAvail(JNIEnv* env, jclass cls, jobject jhost) {
   m_host_t host = jhost_get_native(env,jhost);
   
   if(!host) {
@@ -469,7 +468,7 @@ Java_simgrid_msg_Msg_hostIsAvail(JNIEnv* env, jclass cls, jobject jhost) {
  ***************************************************************************************/
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_taskCreate(JNIEnv* env, jclass cls, jobject jtask, jstring jname, 
+Java_simgrid_msg_MsgNative_taskCreate(JNIEnv* env, jclass cls, jobject jtask, jstring jname, 
                                jdouble jcomputeDuration, jdouble jmessageSize) {
   m_task_t task;       /* the native task to create                            */
   const char* name;    /* the name of the task                                 */
@@ -511,12 +510,11 @@ Java_simgrid_msg_Msg_taskCreate(JNIEnv* env, jclass cls, jobject jtask, jstring
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallel_taskCreate(JNIEnv* env, jclass cls, jobject jtask_arg, jstring jname, 
+Java_simgrid_msg_MsgNative_parallel_taskCreate(JNIEnv* env, jclass cls, jobject jtask, jstring jname, 
                                         jobjectArray jhosts,jdoubleArray jcomputeDurations_arg, jdoubleArray jmessageSizes_arg) {
 
   m_task_t task;       /* the native parallel task to create           */
   const char* name;    /* the name of the task                         */
-  jobject jtask;       /* the global reference to the java parallel task instance      */
   int host_count;
   m_host_t* hosts;
   double* computeDurations;
@@ -546,9 +544,9 @@ Java_simgrid_msg_Msg_parallel_taskCreate(JNIEnv* env, jclass cls, jobject jtask_
   host_count = (int)(*env)->GetArrayLength(env,jhosts);
        
 
-  hosts = (m_host_t*)calloc(host_count,sizeof(m_host_t));
-  computeDurations = (double*)calloc(host_count,sizeof(double));
-  messageSizes = (double*)calloc(host_count,sizeof(double));
+  hosts = xbt_new0(m_host_t,host_count);
+  computeDurations = xbt_new0(double,host_count);
+  messageSizes = xbt_new0(double,host_count*host_count);
 
   jcomputeDurations = (*env)->GetDoubleArrayElements(env,jcomputeDurations_arg, 0);
   jmessageSizes = (*env)->GetDoubleArrayElements(env,jmessageSizes_arg, 0);
@@ -557,9 +555,11 @@ Java_simgrid_msg_Msg_parallel_taskCreate(JNIEnv* env, jclass cls, jobject jtask_
     jhost = (*env)->GetObjectArrayElement(env,jhosts,index);
     hosts[index] = jhost_get_native(env,jhost);
     computeDurations[index] = jcomputeDurations[index];
-    messageSizes[index] = jmessageSizes[index];
   }
-
+  for(index = 0; index < host_count*host_count; index++) {
+    messageSizes[index] = jmessageSizes[index];
+  }   
+   
   (*env)->ReleaseDoubleArrayElements(env,jcomputeDurations_arg,jcomputeDurations,0);
   (*env)->ReleaseDoubleArrayElements(env,jmessageSizes_arg,jmessageSizes,0);
 
@@ -571,20 +571,17 @@ Java_simgrid_msg_Msg_parallel_taskCreate(JNIEnv* env, jclass cls, jobject jtask_
 
   (*env)->ReleaseStringUTFChars(env, jname, name); 
        
-  /* allocate a new global reference to the java task instance */
-  jtask = jparallel_task_ref(env,jtask_arg);
-       
   /* associate the java task object and the native task */
-  jparallel_task_bind(jtask,task,env);
+  jtask_bind(jtask,task,env);
 
   task->data = (void*)jtask;
 
-  if(!(task->data))
+  if (! task->data )
     jxbt_throw_jni(env,"global ref allocation failed");
 }
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_taskGetSender(JNIEnv* env , jclass cls , jobject jtask) {
+Java_simgrid_msg_MsgNative_taskGetSender(JNIEnv* env , jclass cls , jobject jtask) {
   m_process_t process;
        
   m_task_t task = jtask_to_native_task(jtask,env);
@@ -599,24 +596,7 @@ Java_simgrid_msg_Msg_taskGetSender(JNIEnv* env , jclass cls , jobject jtask) {
 }
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetSender(JNIEnv* env , jclass cls , jobject jtask) {
-  m_task_t task;
-  m_process_t process;
-       
-  task = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!task) {
-    jxbt_throw_notbound(env,"task",jtask);
-    return NULL;
-  }
-       
-  process = MSG_task_get_sender(task);
-       
-  return (jobject)native_to_java_process(process);
-}
-
-JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_taskGetSource(JNIEnv* env , jclass cls, jobject jtask) {
+Java_simgrid_msg_MsgNative_taskGetSource(JNIEnv* env , jclass cls, jobject jtask) {
   m_host_t host;
   m_task_t task = jtask_to_native_task(jtask,env);
 
@@ -635,29 +615,9 @@ Java_simgrid_msg_Msg_taskGetSource(JNIEnv* env , jclass cls, jobject jtask) {
   return (jobject)host->data;  
 }
 
-JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetSource(JNIEnv* env , jclass cls, jobject jtask) {
-  m_task_t task = jparallel_task_to_native_parallel_task(jtask,env);
-  m_host_t host;
-
-  if(!task){
-    jxbt_throw_notbound(env,"task",jtask);
-    return NULL;
-  }
-       
-  host = MSG_task_get_source(task);
-  
-  if(! host->data ) {
-    jxbt_throw_native(env, xbt_strdup("MSG_task_get_source() failed"));
-    return NULL;
-  }
-       
-  return (jobject)host->data;  
-}
-
 
 JNIEXPORT jstring JNICALL 
-Java_simgrid_msg_Msg_taskGetName(JNIEnv* env, jclass cls, jobject jtask) {
+Java_simgrid_msg_MsgNative_taskGetName(JNIEnv* env, jclass cls, jobject jtask) {
   m_task_t task = jtask_to_native_task(jtask,env);
 
   if(!task){
@@ -668,20 +628,8 @@ Java_simgrid_msg_Msg_taskGetName(JNIEnv* env, jclass cls, jobject jtask) {
   return (*env)->NewStringUTF(env,task->name);         
 }
 
-JNIEXPORT jstring JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetName(JNIEnv* env, jclass cls, jobject jtask) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return NULL;
-  }
-       
-  return (*env)->NewStringUTF(env,ptask->name);
-}
-
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_taskCancel(JNIEnv* env, jclass cls, jobject jtask) {
+Java_simgrid_msg_MsgNative_taskCancel(JNIEnv* env, jclass cls, jobject jtask) {
   m_task_t ptask = jtask_to_native_task(jtask,env);
  
   if(!ptask){
@@ -693,22 +641,8 @@ Java_simgrid_msg_Msg_taskCancel(JNIEnv* env, jclass cls, jobject jtask) {
     jxbt_throw_native(env, xbt_strdup("MSG_task_cancel() failed"));
 }
 
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskCancel(JNIEnv* env, jclass cls, jobject jtask) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return;
-  }
-       
-  if(MSG_OK != MSG_task_cancel(ptask))
-    jxbt_throw_native(env, xbt_strdup("MSG_task_cancel() failed"));
-}
-
-
 JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_taskGetComputeDuration(JNIEnv* env, jclass cls, jobject jtask) {
+Java_simgrid_msg_MsgNative_taskGetComputeDuration(JNIEnv* env, jclass cls, jobject jtask) {
   m_task_t ptask = jtask_to_native_task(jtask,env);
 
   if(!ptask){
@@ -719,18 +653,7 @@ Java_simgrid_msg_Msg_taskGetComputeDuration(JNIEnv* env, jclass cls, jobject jta
 }
 
 JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetComputeDuration(JNIEnv* env, jclass cls, jobject jtask) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return -1;
-  }
-  return (jdouble)MSG_task_get_compute_duration(ptask);
-}
-
-JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_taskGetRemainingDuration(JNIEnv* env, jclass cls, jobject jtask) {
+Java_simgrid_msg_MsgNative_taskGetRemainingDuration(JNIEnv* env, jclass cls, jobject jtask) {
   m_task_t ptask = jtask_to_native_task(jtask,env);
 
   if(!ptask){
@@ -740,19 +663,8 @@ Java_simgrid_msg_Msg_taskGetRemainingDuration(JNIEnv* env, jclass cls, jobject j
   return (jdouble)MSG_task_get_remaining_computation(ptask);
 }
 
-JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_paralleTaskGetRemainingDuration(JNIEnv* env, jclass cls, jobject jtask) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return -1;
-  }
-  return (jdouble)MSG_task_get_remaining_computation(ptask);
-}
-
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_taskSetPriority(JNIEnv* env, jclass cls, jobject jtask, jdouble priority) {
+Java_simgrid_msg_MsgNative_taskSetPriority(JNIEnv* env, jclass cls, jobject jtask, jdouble priority) {
   m_task_t task = jtask_to_native_task(jtask,env);
 
   if(!task){
@@ -763,20 +675,7 @@ Java_simgrid_msg_Msg_taskSetPriority(JNIEnv* env, jclass cls, jobject jtask, jdo
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskSetPriority(JNIEnv* env, jclass cls, 
-                                            jobject jtask, jdouble priority) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return;
-  }
-  MSG_task_set_priority(ptask,(double)priority);
-}
-
-
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_taskDestroy(JNIEnv* env, jclass cls, jobject jtask_arg) {
+Java_simgrid_msg_MsgNative_taskDestroy(JNIEnv* env, jclass cls, jobject jtask_arg) {
 
   /* get the native task */
   m_task_t task = jtask_to_native_task(jtask_arg,env);
@@ -796,33 +695,7 @@ Java_simgrid_msg_Msg_taskDestroy(JNIEnv* env, jclass cls, jobject jtask_arg) {
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskDestroy(JNIEnv* env, jclass cls, jobject jtask) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return;
-  }
-       
-  /* unbind jobj & native one */
-  jparallel_task_bind(jtask,0,env);
-
-  /* delete the global reference to the java parallel task object */
-  jparallel_task_unref(env,jtask);
-
-  /* free allocated memory */
-  if(ptask->simdata->comm_amount)
-    free(ptask->simdata->comm_amount);
-
-  if(ptask->simdata->host_list)
-    free(ptask->simdata->host_list);
-
-  if(MSG_OK != MSG_task_destroy(ptask))
-    jxbt_throw_native(env, xbt_strdup("MSG_task_destroy() failed"));
-}
-
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_taskExecute(JNIEnv* env, jclass cls, jobject jtask) {
+Java_simgrid_msg_MsgNative_taskExecute(JNIEnv* env, jclass cls, jobject jtask) {
   m_task_t task = jtask_to_native_task(jtask,env);
 
   if(!task){
@@ -834,90 +707,49 @@ Java_simgrid_msg_Msg_taskExecute(JNIEnv* env, jclass cls, jobject jtask) {
     jxbt_throw_native(env, xbt_strdup("MSG_task_execute() failed"));
 }
 
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskExecute(JNIEnv* env, jclass cls, jobject jtask) {
-  m_task_t ptask = jparallel_task_to_native_parallel_task(jtask,env);
-
-  if(!ptask){
-    jxbt_throw_notbound(env,"task",jtask);
-    return;
-  }
-       
-  if(MSG_OK != MSG_parallel_task_execute(ptask))
-    jxbt_throw_native(env, xbt_strdup("MSG_parallel_task_execute() failed"));
-}
-
 /***************************************************************************************
- * The MSG channel connected functions implementation.                                 *
+ * The Task reception functions                                                        *
  ***************************************************************************************/
 
 JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_channelGet(JNIEnv* env, jclass cls, jobject jchannel) {
-  m_task_t task = NULL;
-       
-  if(MSG_OK != MSG_task_get(&task,(int)jchannel_get_id(jchannel,env))) {
-    jxbt_throw_native(env, xbt_strdup("MSG_task_get() failed"));
-    return NULL;
-  }
-       
-  return (jobject)task->data;
-}
-
-JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_channelGetWithTimeout(JNIEnv* env, jclass cls, 
-                                          jobject jchannel, jdouble jtimeout) {
+Java_simgrid_msg_MsgNative_taskGet(JNIEnv* env, jclass cls, 
+                            jint chan_id, jdouble jtimeout, jobject jhost) {
   m_task_t task = NULL;
-  int id = (int)jchannel_get_id(jchannel,env);
+  m_host_t host = NULL;
        
-  if(MSG_OK != MSG_task_get_with_time_out(&task,id,(double)jtimeout)) {
-    jxbt_throw_native(env, xbt_strdup("MSG_task_get_with_time_out() failed"));
+  if (jhost) {
+     host = jhost_get_native(env,jhost);
+     if(!host){
+       jxbt_throw_notbound(env,"host",jhost);
+       return NULL;
+     }  
+  }   
+   
+  if (MSG_OK != MSG_task_get_ext(&task,(int)chan_id,(double)jtimeout,host)) {
+    jxbt_throw_native(env, xbt_strdup("MSG_task_get_ext() failed"));
     return NULL;
   }
        
   return (jobject)task->data;
 }
 
-JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_channelGetFromHost(JNIEnv* env, jclass cls, 
-                                       jobject jchannel, jobject jhost) {
-  m_host_t host = jhost_get_native(env,jhost);
-  m_task_t task = NULL;        
-  int id = (int)jchannel_get_id(jchannel,env);
-
-  if(!host){
-    jxbt_throw_notbound(env,"host",jhost);
-    return NULL;
-  }  
-  if(MSG_OK != MSG_task_get_from_host(&task,id,host)){
-    jxbt_throw_native(env, xbt_strdup("MSG_task_get_from_host() failed"));
-    return NULL;
-  }
-  if(!(task->data)){
-    jxbt_throw_notbound(env,"task",task);
-    return NULL;
-  }
-
-  return (jobject)task->data;
-}
-
 JNIEXPORT jboolean JNICALL 
-Java_simgrid_msg_Msg_channelHasPendingCommunication(JNIEnv* env, jclass cls, jobject jchannel) {
-  int id = (int)jchannel_get_id(jchannel,env);
-       
-  return (jboolean)MSG_task_Iprobe(id);
+Java_simgrid_msg_MsgNative_taskProbe(JNIEnv* env, jclass cls, jint chan_id) {
+  return (jboolean)MSG_task_Iprobe(chan_id);
 }
 
-JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_channelGetCommunicatingProcess(JNIEnv* env, jclass cls, jobject jchannel) {
-  int id =jchannel_get_id(jchannel,env);
-       
-  return (jint)MSG_task_probe_from(id);
+JNIEXPORT jobject JNICALL 
+Java_simgrid_msg_MsgNative_taskGetCommunicatingProcess(JNIEnv* env, jclass cls, jint chan_id) {
+  int pid = MSG_task_probe_from(chan_id);
+  if (pid>=0) 
+     return Java_simgrid_msg_MsgNative_processFromPID(env,cls,(jint)pid);
+  
+  return NULL;
 }
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_channelGetHostWaitingTasks(JNIEnv* env, jclass cls, 
-                                               jobject jchannel, jobject jhost) {
-  int id = (int)jchannel_get_id(jchannel,env);
+Java_simgrid_msg_MsgNative_taskProbeHost(JNIEnv* env, jclass cls, 
+                                  jobject jhost, jint chan_id) {
   m_host_t host = jhost_get_native(env,jhost);
 
   if(!host){
@@ -925,25 +757,20 @@ Java_simgrid_msg_Msg_channelGetHostWaitingTasks(JNIEnv* env, jclass cls,
     return -1;
   }
 
-  return (jint)MSG_task_probe_from_host(id,host);
+  return (jint)MSG_task_probe_from_host(chan_id,host);
 }
 
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_channelPut(JNIEnv* env, jclass cls, 
-                               jobject jchannel, jobject jtask, jobject jhost) {
-       
-  if(MSG_OK != MSG_task_put(jtask_to_native_task(jtask,env),
-                           jhost_get_native(env,jhost),
-                           (int)jchannel_get_id(jchannel,env)))
-    jxbt_throw_native(env, xbt_strdup("MSG_task_put() failed"));
-}
+
+/***************************************************************************************
+ * The Task reception functions                                                        *
+ ***************************************************************************************/
+
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_channelPutWithTimeout(JNIEnv* env, jclass cls, 
-                                          jobject jchannel, jobject jtask, jobject jhost,
-                                          jdouble jtimeout) {
+Java_simgrid_msg_MsgNative_hostPut(JNIEnv* env, jclass cls, 
+                            jobject jhost, jint chan_id, jobject jtask, 
+                            jdouble jtimeout) {
   m_task_t task = jtask_to_native_task(jtask,env);
-  int id = (int)jchannel_get_id(jchannel,env);
   m_host_t host = jhost_get_native(env,jhost);
 
   if(!host){
@@ -955,16 +782,15 @@ Java_simgrid_msg_Msg_channelPutWithTimeout(JNIEnv* env, jclass cls,
     return;
   }
    
-  if(MSG_OK != MSG_task_put_with_timeout(task,host,id,(double)jtimeout))
+  if(MSG_OK != MSG_task_put_with_timeout(task,host,(int)chan_id,(double)jtimeout))
     jxbt_throw_native(env, xbt_strdup("MSG_task_put_with_timeout() failed"));
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_channelPutBounded(JNIEnv* env, jclass cls, 
-                                      jobject jchannel, jobject jtask, jobject jhost
-                                      jdouble jmaxRate) {
+Java_simgrid_msg_MsgNative_hostPutBounded(JNIEnv* env, jclass cls, 
+                                   jobject jhost, jint chan_id, jobject jtask
+                                   jdouble jmaxRate) {
   m_task_t task = jtask_to_native_task(jtask,env);
-  int id = (int)jchannel_get_id(jchannel,env);
   m_host_t host = jhost_get_native(env,jhost);
 
   if(!host){
@@ -976,33 +802,10 @@ Java_simgrid_msg_Msg_channelPutBounded(JNIEnv* env, jclass cls,
     return;
   }
         
-  if(MSG_OK != MSG_task_put_bounded(task,host,id,(double)jmaxRate))
+  if(MSG_OK != MSG_task_put_bounded(task,host,(int)chan_id,(double)jmaxRate))
     jxbt_throw_native(env, xbt_strdup("MSG_task_put_bounded() failed"));
 }
 
-JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_channelWait(JNIEnv* env, jclass cls, jobject jchannel, jdouble timeout) {
-  int PID;
-  int id = (int)jchannel_get_id(jchannel,env);
-       
-  if(MSG_OK != MSG_channel_select_from(id,(double)timeout,&PID)) {
-    jxbt_throw_native(env, xbt_strdup("MSG_channel_select_from() failed"));
-    return 0;
-  }
-       
-  return (jint)PID;
-}
-
-JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_channelGetNumber(JNIEnv* env, jclass cls) {
-  return (jint)MSG_get_channel_number();
-}
-
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_channelSetNumber(JNIEnv* env , jclass cls,jint channelNumber) {
-  MSG_set_channel_number((int)channelNumber);
-}
-
 JNIEXPORT jint JNICALL 
 Java_simgrid_msg_Msg_getErrCode(JNIEnv* env, jclass cls) {
   return (jint)MSG_get_errno();
@@ -1043,6 +846,7 @@ Java_simgrid_msg_Msg_init(JNIEnv* env, jclass cls, jobjectArray jargs) {
   }
        
   MSG_global_init(&argc,argv);
+  MSG_set_channel_number(10); /* FIXME: this should not be fixed statically */
 
   for(index = 0; index < argc; index++)
     free(argv[index]);
@@ -1082,7 +886,7 @@ JNICALL Java_simgrid_msg_Msg_run(JNIEnv* env, jclass cls) {
 }
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_processKillAll(JNIEnv* env, jclass cls, jint jresetPID) {
+Java_simgrid_msg_MsgNative_processKillAll(JNIEnv* env, jclass cls, jint jresetPID) {
   return (jint)MSG_process_killall((int)jresetPID);
 }
 
@@ -1097,12 +901,7 @@ Java_simgrid_msg_Msg_createEnvironment(JNIEnv* env, jclass cls,jstring jplatform
 }
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_waitSignal(JNIEnv* env, jclass cls, jobject jprocess) {
-
-}
-
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processExit(JNIEnv* env, jclass cls, jobject jprocess) {
+Java_simgrid_msg_MsgNative_processExit(JNIEnv* env, jclass cls, jobject jprocess) {
 
   m_process_t process = jprocess_to_native_process(jprocess,env);
 
@@ -1132,7 +931,7 @@ Java_simgrid_msg_Msg_info(JNIEnv * env, jclass cls, jstring js) {
 }
 
 JNIEXPORT jobjectArray JNICALL
-Java_simgrid_msg_Msg_allHosts(JNIEnv * env, jclass cls_arg) {
+Java_simgrid_msg_MsgNative_allHosts(JNIEnv * env, jclass cls_arg) {
   int index;
   jobjectArray jtable;
   jobject jhost;
@@ -1162,7 +961,7 @@ Java_simgrid_msg_Msg_allHosts(JNIEnv * env, jclass cls_arg) {
     if(!jhost) {
       jname = (*env)->NewStringUTF(env,host->name);
       
-      jhost = Java_simgrid_msg_Msg_hostGetByName(env,cls_arg,jname);
+      jhost = Java_simgrid_msg_MsgNative_hostGetByName(env,cls_arg,jname);
       /* FIXME: leak of jname ? */
     }
     
@@ -1174,7 +973,7 @@ Java_simgrid_msg_Msg_allHosts(JNIEnv * env, jclass cls_arg) {
 
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_selectContextFactory(JNIEnv * env, jclass class,jstring jname)
+Java_simgrid_msg_MsgNative_selectContextFactory(JNIEnv * env, jclass class,jstring jname)
 {
        int rv;
        
index 2dbd5f2..0ee91bb 100644 (file)
@@ -27,7 +27,7 @@ get_current_thread_env(void);
  * Signature   (Lsimgrid/msg/Process;Lsimgrid/msg/Host;)V
  */
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processCreate(JNIEnv* env,jclass cls,jobject jprocess,jobject jhost);
+Java_simgrid_msg_MsgNative_processCreate(JNIEnv* env,jclass cls,jobject jprocess,jobject jhost);
 
 
 
@@ -37,14 +37,14 @@ Java_simgrid_msg_Msg_processCreate(JNIEnv* env,jclass cls,jobject jprocess,jobje
  * Signature   (Lsimgrid/msg/Process;)V
  */
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_processSuspend(JNIEnv* env, jclass cls, jobject jprocess);
+Java_simgrid_msg_MsgNative_processSuspend(JNIEnv* env, jclass cls, jobject jprocess);
 
 /*
  * Class               simgrid_msg_Msg
  * Method              processResume
  * Signature   (Lsimgrid/msg/Process;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processResume
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_processResume
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -52,7 +52,7 @@ JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processResume
  * Method              processIsSuspended
  * Signature   (Lsimgrid/msg/Process;)Z
  */
-JNIEXPORT jboolean JNICALL Java_simgrid_msg_Msg_processIsSuspended
+JNIEXPORT jboolean JNICALL Java_simgrid_msg_MsgNative_processIsSuspended
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -60,7 +60,7 @@ JNIEXPORT jboolean JNICALL Java_simgrid_msg_Msg_processIsSuspended
  * Method              processKill
  * Signature   (Lsimgrid/msg/Process;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processKill
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_processKill
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -68,7 +68,7 @@ JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processKill
  * Method              processGetHost
  * Signature   (Lsimgrid/msg/Process;)Lsimgrid/msg/Host;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_processGetHost
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_processGetHost
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -76,7 +76,7 @@ JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_processGetHost
  * Method              processFromPID
  * Signature   (I)Lsimgrid/msg/Process;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_processFromPID
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_processFromPID
   (JNIEnv *, jclass, jint);
 
 /*
@@ -84,7 +84,7 @@ JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_processFromPID
  * Method              processGetPID
  * Signature   (Lsimgrid/msg/Process;)I
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processGetPID
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_processGetPID
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -92,7 +92,7 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processGetPID
  * Method              processGetPPID
  * Signature   (Lsimgrid/msg/Process;)I
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processGetPPID
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_processGetPPID
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -100,7 +100,7 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processGetPPID
  * Method              processSelf
  * Signature   ()Lsimgrid/msg/Process;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_processSelf
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_processSelf
   (JNIEnv *, jclass);
 
 /*
@@ -108,7 +108,7 @@ JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_processSelf
  * Method              processSelfPID
  * Signature   ()I
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processSelfPID
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_processSelfPID
   (JNIEnv *, jclass);
 
 /*
@@ -116,7 +116,7 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processSelfPID
  * Method              processSelfPPID
  * Signature   ()I
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processSelfPPID
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_processSelfPPID
   (JNIEnv *, jclass);
 
 /*
@@ -124,7 +124,7 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processSelfPPID
  * Method              processChangeHost
  * Signature   (Lsimgrid/msg/Process;Lsimgrid/msg/Host;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processChangeHost
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_processChangeHost
   (JNIEnv *, jclass, jobject, jobject);
 
 /*
@@ -132,7 +132,7 @@ JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processChangeHost
  * Method              processWaitFor
  * Signature   (D)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processWaitFor
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_processWaitFor
   (JNIEnv *, jclass, jdouble);
 
 /*
@@ -140,7 +140,7 @@ JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processWaitFor
  * Method              hostGetByName
  * Signature   (Ljava/lang/String;)Lsimgrid/msg/Host;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_hostGetByName
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_hostGetByName
   (JNIEnv *, jclass, jstring);
 
 /*
@@ -148,7 +148,7 @@ JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_hostGetByName
  * Method              hostGetName
  * Signature   (Lsimgrid/msg/Host;)Ljava/lang/String;
  */
-JNIEXPORT jstring JNICALL Java_simgrid_msg_Msg_hostGetName
+JNIEXPORT jstring JNICALL Java_simgrid_msg_MsgNative_hostGetName
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -156,7 +156,7 @@ JNIEXPORT jstring JNICALL Java_simgrid_msg_Msg_hostGetName
  * Method              hostGetNumber
  * Signature   ()I
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_hostGetNumber
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_hostGetNumber
   (JNIEnv *, jclass);
 
 /*
@@ -164,7 +164,7 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_hostGetNumber
  * Method              hostSelf
  * Signature   ()Lsimgrid/msg/Host;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_hostSelf
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_hostSelf
   (JNIEnv *, jclass);
 
 /*
@@ -172,18 +172,18 @@ JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_hostSelf
  * Method              hostGetSpeed
  * Signature   (Lsimgrid/msg/Host;)D
  */
-JNIEXPORT jdouble JNICALL Java_simgrid_msg_Msg_hostGetSpeed
+JNIEXPORT jdouble JNICALL Java_simgrid_msg_MsgNative_hostGetSpeed
   (JNIEnv *, jclass, jobject);
 
 JNIEXPORT jint JNICALL 
-Java_simgrid_msg_Msg_hostGetLoad(JNIEnv* env, jclass cls, jobject jhost);
+Java_simgrid_msg_MsgNative_hostGetLoad(JNIEnv* env, jclass cls, jobject jhost);
 
 /*
  * Class               simgrid_msg_Msg
  * Method              hostIsAvail
  * Signature   (Lsimgrid/msg/Host;)Z
  */
-JNIEXPORT jboolean JNICALL Java_simgrid_msg_Msg_hostIsAvail
+JNIEXPORT jboolean JNICALL Java_simgrid_msg_MsgNative_hostIsAvail
   (JNIEnv *, jclass, jobject);
 
 /*
@@ -191,206 +191,131 @@ JNIEXPORT jboolean JNICALL Java_simgrid_msg_Msg_hostIsAvail
  * Method              taskCreate
  * Signature   (Lsimgrid/msg/Task;Ljava/lang/String;DD)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_taskCreate
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_taskCreate
   (JNIEnv *, jclass, jobject, jstring, jdouble, jdouble);
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallel_taskCreate(JNIEnv*, jclass, jobject, jstring, jobjectArray,jdoubleArray, jdoubleArray);
+Java_simgrid_msg_MsgNative_parallel_taskCreate(JNIEnv*, jclass, jobject, jstring, jobjectArray,jdoubleArray, jdoubleArray);
 
 /*
  * Class               simgrid_msg_Msg
  * Method              taskGetSender
  * Signature   (Lsimgrid/msg/Task;)Lsimgrid/msg/Process;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_taskGetSender
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_taskGetSender
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetSender(JNIEnv* env , jclass cls , jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskGetSource
  * Signature   (Lsimgrid/msg/Task;)Lsimgrid/msg/Host;
  */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_taskGetSource
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_taskGetSource
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT jobject JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetSource(JNIEnv* env , jclass cls, jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskGetName
  * Signature   (Lsimgrid/msg/Task;)Ljava/lang/String;
  */
-JNIEXPORT jstring JNICALL Java_simgrid_msg_Msg_taskGetName
+JNIEXPORT jstring JNICALL Java_simgrid_msg_MsgNative_taskGetName
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT jstring JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetName(JNIEnv* env, jclass cls, jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskCancel
  * Signature   (Lsimgrid/msg/Task;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_taskCancel
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_taskCancel
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskCancel(JNIEnv* env, jclass cls, jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskGetComputeDuration
  * Signature   (Lsimgrid/msg/Task;)D
  */
-JNIEXPORT jdouble JNICALL Java_simgrid_msg_Msg_taskGetComputeDuration
+JNIEXPORT jdouble JNICALL Java_simgrid_msg_MsgNative_taskGetComputeDuration
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_parallelTaskGetComputeDuration(JNIEnv* env, jclass cls, jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskGetRemainingDuration
  * Signature   (Lsimgrid/msg/Task;)D
  */
-JNIEXPORT jdouble JNICALL Java_simgrid_msg_Msg_taskGetRemainingDuration
+JNIEXPORT jdouble JNICALL Java_simgrid_msg_MsgNative_taskGetRemainingDuration
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT jdouble JNICALL 
-Java_simgrid_msg_Msg_paralleTaskGetRemainingDuration(JNIEnv* env, jclass cls, jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskSetPriority
  * Signature   (Lsimgrid/msg/Task;D)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_taskSetPriority
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_taskSetPriority
   (JNIEnv *, jclass, jobject, jdouble);
 
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskSetPriority(JNIEnv* env, jclass cls, jobject jparallel_task, jdouble priority);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskDestroy
  * Signature   (Lsimgrid/msg/Task;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_taskDestroy
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_taskDestroy
   (JNIEnv *, jclass, jobject);
 
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskDestroy(JNIEnv* env, jclass cls, jobject jparallel_task);
-
 /*
  * Class               simgrid_msg_Msg
  * Method              taskExecute
  * Signature   (Lsimgrid/msg/Task;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_taskExecute
-  (JNIEnv *, jclass, jobject);
-
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_parallelTaskExecute(JNIEnv* env, jclass cls, jobject jparallel_task);
-
-/*
- * Class               simgrid_msg_Msg
- * Method              channelGet
- * Signature   (Lsimgrid/msg/Channel;)Lsimgrid/msg/Task;
- */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_channelGet
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_taskExecute
   (JNIEnv *, jclass, jobject);
 
 /*
  * Class               simgrid_msg_Msg
- * Method              channelGetWithTimeout
- * Signature   (Lsimgrid/msg/Channel;D)Lsimgrid/msg/Task;
- */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_channelGetWithTimeout
-  (JNIEnv *, jclass, jobject, jdouble);
-
-/*
- * Class               simgrid_msg_Msg
- * Method              channelGetFromHost
- * Signature   (Lsimgrid/msg/Channel;Lsimgrid/msg/Host;)Lsimgrid/msg/Task;
- */
-JNIEXPORT jobject JNICALL Java_simgrid_msg_Msg_channelGetFromHost
-  (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class               simgrid_msg_Msg
- * Method              channelHasPendingCommunication
- * Signature   (Lsimgrid/msg/Channel;)Z
+ * Method              taskGetWithTimeout
+ * Signature   (I;D;Lsimgrid/msg/Host;)Lsimgrid/msg/Task;
  */
-JNIEXPORT jboolean JNICALL Java_simgrid_msg_Msg_channelHasPendingCommunication
-  (JNIEnv *, jclass, jobject);
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_taskGet
+  (JNIEnv *, jclass, jint, jdouble, jobject);
 
 /*
  * Class               simgrid_msg_Msg
- * Method              channelGetCommunicatingProcess
- * Signature   (Lsimgrid/msg/Channel;)I
+ * Method              taskHasPendingCommunication
+ * Signature   (I)Z
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_channelGetCommunicatingProcess
-  (JNIEnv *, jclass, jobject);
-
-/*
- * Class               simgrid_msg_Msg
- * Method              channelGetHostWaitingTasks
- * Signature   (Lsimgrid/msg/Channel;Lsimgrid/msg/Host;)I
- */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_channelGetHostWaitingTasks
-  (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class               simgrid_msg_Msg
- * Method              channelPut
- * Signature   (Lsimgrid/msg/Channel;Lsimgrid/msg/Task;Lsimgrid/msg/Host;)V
- */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_channelPut
-  (JNIEnv *, jclass, jobject, jobject, jobject);
+JNIEXPORT jboolean JNICALL Java_simgrid_msg_MsgNative_taskProbe
+  (JNIEnv *, jclass, jint);
 
 /*
  * Class               simgrid_msg_Msg
- * Method              channelPutWithTimeout
- * Signature   (Lsimgrid/msg/Channel;Lsimgrid/msg/Task;Lsimgrid/msg/Host;D)V
+ * Method              taskGetCommunicatingProcess
+ * Signature   (I)Lsimgrid/msg/Process;
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_channelPutWithTimeout
-  (JNIEnv *, jclass, jobject, jobject, jobject, jdouble);
+JNIEXPORT jobject JNICALL Java_simgrid_msg_MsgNative_taskGetCommunicatingProcess
+  (JNIEnv *, jclass, jint);
 
 /*
  * Class               simgrid_msg_Msg
- * Method              channelPutBounded
- * Signature   (Lsimgrid/msg/Channel;Lsimgrid/msg/Task;Lsimgrid/msg/Host;D)V
+ * Method              taskGetHostWaitingTasks
+ * Signature   (Lsimgrid/msg/Host;I)I
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_channelPutBounded
-  (JNIEnv *, jclass, jobject, jobject, jobject, jdouble);
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_taskProbeHost
+  (JNIEnv *, jclass, jobject, jint);
 
 /*
  * Class               simgrid_msg_Msg
- * Method              channelWait
- * Signature   (Lsimgrid/msg/Channel;D)I
+ * Method              hostPutWith
+ * Signature   (Lsimgrid/msg/Host;I;Lsimgrid/msg/Task;D)V
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_channelWait
-  (JNIEnv *, jclass, jobject, jdouble);
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_hostPut
+  (JNIEnv *, jclass, jobject, jint, jobject, jdouble);
 
 /*
  * Class               simgrid_msg_Msg
- * Method              channelSetNumber
- * Signature   (I)V
+ * Method              hostPutBounded
+ * Signature   (Lsimgrid/msg/Host;I;Lsimgrid/msg/Task;D)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_channelSetNumber
-  (JNIEnv *, jclass, jint);
-
-/*
- * Class               simgrid_msg_Msg
- * Method              channelGetNumber
- * Signature   ()I
- */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_channelGetNumber
-  (JNIEnv *, jclass);
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_hostPutBounded
+  (JNIEnv *, jclass, jobject, jint, jobject, jdouble);
 
 /*
  * Class               simgrid_msg_Msg
@@ -408,11 +333,6 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_getErrCode
 JNIEXPORT jdouble JNICALL Java_simgrid_msg_Msg_getClock
   (JNIEnv *, jclass);
 
-
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_init
-  (JNIEnv *, jclass, jobjectArray);
-
-
 JNIEXPORT void JNICALL
 JNICALL Java_simgrid_msg_Msg_run(JNIEnv* env, jclass cls);
 
@@ -424,7 +344,7 @@ Java_simgrid_msg_Msg_init(JNIEnv* env, jclass cls, jobjectArray jargs);
  * Method              processKillAll
  * Signature   (I)I
  */
-JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processKillAll
+JNIEXPORT jint JNICALL Java_simgrid_msg_MsgNative_processKillAll
   (JNIEnv *, jclass, jint);
 
 /*
@@ -432,35 +352,22 @@ JNIEXPORT jint JNICALL Java_simgrid_msg_Msg_processKillAll
  * Method              processExit
  * Signature   (Lsimgrid/msg/Process;)V
  */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_processExit
+JNIEXPORT void JNICALL Java_simgrid_msg_MsgNative_processExit
   (JNIEnv *, jclass, jobject);
 
-
 JNIEXPORT void JNICALL 
 Java_simgrid_msg_Msg_pajeOutput(JNIEnv* env, jclass cls, jstring jpajeFile);
 
-/*
- * Class               simgrid_msg_Msg
- * Method              waitSignal
- * Signature   (Lsimgrid/msg/Process;)V
- */
-JNIEXPORT void JNICALL Java_simgrid_msg_Msg_waitSignal
-  (JNIEnv *, jclass, jobject);
-
 JNIEXPORT void JNICALL 
 Java_simgrid_msg_Msg_info(JNIEnv * , jclass , jstring );
 
 JNIEXPORT jobjectArray JNICALL
-Java_simgrid_msg_Msg_allHosts(JNIEnv * , jclass );
+Java_simgrid_msg_MsgNative_allHosts(JNIEnv * , jclass );
 
 JNIEXPORT void JNICALL 
 Java_simgrid_msg_Msg_createEnvironment(JNIEnv* env, jclass cls,jstring jplatformFile);
 
 JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_platformLoad(JNIEnv* env, jclass cls, jobject jplatform);
-
-
-JNIEXPORT void JNICALL 
-Java_simgrid_msg_Msg_selectContextFactory(JNIEnv *, jclass, jstring);
+Java_simgrid_msg_MsgNative_selectContextFactory(JNIEnv *, jclass, jstring);
 
 #endif /* !MSG4JAVA_H */ 
diff --git a/src/java/jmsg_parallel_task.c b/src/java/jmsg_parallel_task.c
deleted file mode 100644 (file)
index 1af0f30..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved. 
- *
- * This program is free software; you can redistribute it and/or modify it 
- * under the terms of the license (GNU LGPL) which comes with this package.
- *
- * This contains the implementation of the functions in relation with the java
- * process instance. 
- */
-
-#include "xbt/log.h" 
-#include "jmsg.h"
-#include "jmsg_parallel_task.h"
-#include "jxbt_utilities.h"
-
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
-
-jobject
-jparallel_task_ref(JNIEnv* env, jobject jparallel_task) {
-  jobject newref = (*env)->NewGlobalRef(env,jparallel_task); 
-
-  DEBUG1("jparallel_task_ref(%ld)",(long)newref);
-
-  return newref;
-}
-
-void
-jparallel_task_unref(JNIEnv* env, jobject jparallel_task) {
-  DEBUG1("jparallel_task_unref(%ld)",(long)jparallel_task);
-  (*env)->DeleteGlobalRef(env,jparallel_task);
-}
-
-void
-jparallel_task_bind(jobject jparallel_task,m_task_t task,JNIEnv* env) {
-  jfieldID id  = jxbt_get_sfield(env,"simgrid/msg/ParallelTask","bind", "J");
-       
-  if(!id)
-    return;
-       
-  (*env)->SetLongField(env,jparallel_task,id,(jlong)(long)(task));
-        
-}
-
-m_task_t
-jparallel_task_to_native_parallel_task(jobject jparallel_task,JNIEnv* env) {
-  jfieldID id  = jxbt_get_sfield(env,"simgrid/msg/ParallelTask","bind", "J");
-       
-  if(!id)
-    return NULL;
-    
-  return (m_task_t)(long)(*env)->GetLongField(env,jparallel_task,id);
-}
-
-jboolean
-jparallel_task_is_valid(jobject jparallel_task,JNIEnv* env) {
-  jfieldID id  = jxbt_get_sfield(env,"simgrid/msg/ParallelTask","bind", "J");
-       
-  if(!id)
-    return JNI_FALSE;
-
-  return (*env)->GetLongField(env,jparallel_task,id) ? JNI_TRUE : JNI_FALSE;
-}
diff --git a/src/java/jmsg_parallel_task.h b/src/java/jmsg_parallel_task.h
deleted file mode 100644 (file)
index cf916e3..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved. 
- *
- * This program is free software; you can redistribute it and/or modify it 
- * under the terms of the license (GNU LGPL) which comes with this package.
- *
- * This contains the declarations of the functions in relation with the java
- * parallel task instance.
- */
-
-#ifndef MSG_JPARALLEL_TASK_H
-#define MSG_JPARALLEL_TASK_H
-
-#include <jni.h>
-#include "msg/msg.h"
-
-
-/**
- * This function returns a global reference to the java paralllel task instance 
- * specified by the parameter jparallel_task.
- *
- * @param jparallel_task       The original java parallel task instance.
- * @param env                          The environment of the current thread.
- *
- * @return                                     The global reference to the original java parallel task 
- *                                                     instance.
- */                    
-jobject
-jparallel_task_ref(JNIEnv* env, jobject jparallel_task);
-
-/**
- * This function delete a global reference to a java parallel task instance.
- *
- * @param jparallel_task       The global refernce to delete.
- * @param env                          The environment of the current thread.
- */
-void
-jparallel_task_unref(JNIEnv* env,jobject jparallel_task);
-
-/**
- * This function associated a native task to a java parallel task instance.
- *
- * @param jparallel_task       The java parallel task instance.
- * @param jparallel_task       The native parallel task to bind.
- * @param env                          The environment of the current thread.
- *
- * @exception                          If the class ParallelTask is not found the function throws 
- *                                                     the ClassNotFoundException. If the field bind of 
- *                                                     this class is not found the function throws the exception 
- *                                                     NotSuchFieldException.  
- */            
-void
-jparallel_task_bind(jobject jparallel_task,m_task_t task,JNIEnv* env);
-
-/**
- * This function returns a native task from a java task instance.
- *
- * @param jparallel_task       The java parallel task object from which get the native parallel task.
- * @param env                          The environment of the current thread.
- *
- * @return                                     The function returns the native parallel task associated to the
- *                                                     java parallel task object.
- *
- * @exception                          If the class ParallelTask is not found the function throws 
- *                                                     the ClassNotFoundException. If the field bind of 
- *                                                     this class is not found the function throws the exception 
- *                                                     NotSuchFieldException.  
- */
-m_task_t
-jparallel_task_to_native_parallel_task(jobject jparallel_task,JNIEnv* env);
-
-/**
- * This function tests if a java task instance is valid.
- * A java task object is valid if it is bind to a native 
- * task.
- *
- * @param jparallel_task       The java parallel task to test the validity.
- * @param env                          The environment of the current thread.
- *
- * @return                                     If the java parallel task is valid the function returns true.
- *                                                     Otherwise the function returns false.
- */
-jboolean
-jparallel_task_is_valid(jobject jparallel_task,JNIEnv* env);
-
-
-#endif /* !MSG_JPARALLEL_TASK_H */
index ff5dc8f..14d5e57 100644 (file)
@@ -96,7 +96,7 @@ public final class ApplicationHandler extends DefaultHandler {
         process.id = simgrid.msg.Process.nextProcessId++;
         Host host = Host.getByName(this.hostName);
 
-        Msg.processCreate(process, host);
+        MsgNative.processCreate(process, host);
         Vector args = processFactory.args;
         int size = args.size();
 
diff --git a/src/java/simgrid/msg/Channel.java b/src/java/simgrid/msg/Channel.java
deleted file mode 100644 (file)
index a2762a8..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2006,2007 Martin Quinson, Malek Cherier           
- * All right reserved. 
- *
- * This program is free software; you can redistribute 
- * it and/or modify it under the terms of the license 
- *(GNU LGPL) which comes with this package. 
- */
-
-package simgrid.msg;
-
-/**
- * For convenience, the simulator provides the notion of
- * channel that is close to the tag notion in MPI. A channel
- * is not a socket. It doesn't need to be opened neither closed.
- * It rather corresponds to the ports opened on the different
- * machines.
- * 
- * @author  Abdelmalek Cherier
- * @author  Martin Quinson
- * @version $Id$
- * @see Task
- * @since SimGrid 3.3
- * @since JDK1.5011
- */
-public final class Channel {
-        /**
-        * The channel identifier (as a port number in the TCP protocol.
-        */
-  private int id;
-
-  private Channel() {
-  }                             /* disable the default constructor */
-        /**
-        * Construct the channel with the specified identifier.
-        *
-        * @param id                    The channel identifier.
-        */ public Channel(int id) {
-    this.id = id;
-  }
-
-        /**
-        * This static method sets the number of channels for all the hosts
-        * of the simulation.
-        *
-        * param channelNumber  The channel number to set.
-        */
-  public static void setNumber(int channelNumber) {
-    Msg.channelSetNumber(channelNumber);
-  }
-
-        /**
-        * This static method gets the number of channel of the simulation.
-        *
-        * @return                              The channel numbers used in the simulation.
-        */
-  public static int getNumber() {
-    return Msg.channelGetNumber();
-  }
-
-        /** Returns the identifier of the channel */
-  public int getId() {
-    return this.id;
-  }
-
-        /**
-        * Listen on the channel and wait for receiving a task.
-        *
-        * @return                              The task readed from the channel.
-        *
-        */
-  public Task get() throws JniException, NativeException {
-    return Msg.channelGet(this);
-  }
-        /**
-        * Listen on the channel and wait for receiving a task with a timeout.
-        *
-        * @param timeout               The timeout of the listening.
-        *
-        * @return                              The task readed from the channel.
-        *
-        * @exception                   NativeException if the listening operation failed.
-        */
-    public Task getWithTimeout(double timeout) throws JniException,
-    NativeException {
-    return Msg.channelGetWithTimeout(this, timeout);
-  }
-        /**
-        * Listen on the channel and wait for receiving a task from a host.
-        *
-        * @param host                  The host.
-        *
-        * @return                              The task readed from the channel.
-        *
-        * @exception                   InvalidHostException if the specified host is not valid.
-        *                                              MsgException if the listening operation failed.
-        *
-        * @see                                 Host
-        */
-    public Task getFromHost(Host host) throws NativeException, JniException {
-    return Msg.channelGetFromHost(this, host);
-  }
-        /**
-        * This method tests whether there is a pending communication on the channel.
-        *
-        * @return                              This method returns true if there is a pending communication
-        *                                              on the channel. Otherwise the method returns false.
-        */
-    public boolean hasPendingCommunication() throws NativeException,
-    JniException {
-    return Msg.channelHasPendingCommunication(this);
-  }
-        /**
-        * This method tests whether there is a pending communication on a 
-        * channel, and who sent it.
-        *
-        * @return                              The method returns -1 if there is no pending 
-        *                                              communication and the PID of the process who sent it otherwise
-        */ public int getCommunicatingProcess() throws JniException {
-    return Msg.channelGetCommunicatingProcess(this);
-  }
-        /**
-        * Wait for at most timeout seconds for a task reception
-        * on channel. The PID is updated with the PID of the first process.
-        *
-        * @param timeout               The maximum time to wait for a task before
-        *                                              giving up. 
-        * @return                              The PID of the first process to send a task.
-        *
-        * @exception                   MsgException if the reception failed.
-        */
-    public int wait(double timeout) throws NativeException, JniException {
-    return Msg.channelWait(this, timeout);
-  }
-        /**
-        * This method returns the number of tasks waiting to be received on a
-        * channel and sent by a host.
-        *
-        * @param host                  The host that is to be watched.
-        *
-        * @return                              The number of tasks waiting to be received on a channel
-        *                                              and sent by a host.
-        *
-        * @exception                   InvalidHostException if the specified host is not valid.
-        */ public int getHostWaitingTasks(Host host) throws JniException {
-    return Msg.channelGetHostWaitingTasks(this, host);
-  }
-        /**
-        * This method puts a task on a channel of an host and waits for the end of the 
-        * transmission.
-        *
-        * @param task                  The task to put.
-        * @param host                  The destinated host.
-        *
-        * @exception                   InvalidTaskException if the task is not valid.
-        *                                              InvalidHostException if the host is not valid.
-        *                                              MsgException if the operation failed.
-        */
-    public void put(Task task, Host host) throws NativeException,
-    JniException {
-    Msg.channelPut(this, task, host);
-  }
-        /**
-        * This method puts a task on a channel of an  host (with a timeout on the waiting 
-        * of the destination host) and waits for the end of the transmission.
-        *
-        * @param task                  The task to put.
-        * @param host                  The destination where to put the task.
-        * @param timeout               The timeout of the transmission.
-        *
-        * @exception                   InvalidTaskException if the task is not valid.
-        *                                              InvalidHostException if the host is not valid.
-        *                                              MsgException if the operation failed.
-        */
-    public void putWithTimeout(Task task, Host host,
-                                 double timeout) throws
-    NativeException, JniException {
-    Msg.channelPutWithTimeout(this, task, host, timeout);
-  }
-        /**
-        * This method does exactly the same as put() but with a bounded transmition
-        * rate.
-        *
-        * @param task                  The task to put.
-        * @param host                  The destination where to put the task.
-        * @param maxRate               The bounded transmition rate.
-        *
-        * @exception                   InvalidTaskException if the task is not valid.
-        *                                              InvalidHostException if the host is not valid.
-        *                                              MsgException if the operation failed.
-        */
-    public void putBounded(Task task, Host host,
-                             double maxRate) throws NativeException,
-    JniException {
-    Msg.channelPutBounded(this, task, host, maxRate);
-}}
index db9ffcd..67274c1 100644 (file)
@@ -8,9 +8,8 @@
  * it and/or modify it under the terms of the license 
  *(GNU LGPL) which comes with this package. 
  *
- */
-package simgrid.msg;
-
+ */  
+  package simgrid.msg;
 import java.lang.String;
 
 /**
@@ -29,6 +28,7 @@ import java.lang.String;
  * For example to get the instance of the host. If your platform
  * file description contains an host named "Jacquelin" :
  *
+ * \verbatim
  *     Host jacquelin;
  *
  *     try { 
@@ -37,17 +37,14 @@ import java.lang.String;
  *             System.err.println(e.toString());
  *     }
  *     ...
+ * \endverbatim
  *
  * @author  Abdelmalek Cherier
  * @author  Martin Quinson
- * @version 1.00, 07/05/01
- * @see Grid
- * @see Simulation
- * @see Process
  * @since SimGrid 3.3
- * @since JDK1.5011
- */
-public class Host {
+ *
+  public class Host {
+  
         /**
         * This attribute represents a bind between a java host object and
         * a native host. Even if this attribute is public you must never
@@ -55,19 +52,19 @@ public class Host {
         * static method Host.getByName().
         *
         * @see                         Host.getByName().
-        */
+        */ 
   public long bind;
 
+  
         /**
         * User data.
-        */
-  private Object data;
-
+        */ 
+    private Object data;
   protected Host() {
     this.bind = 0;
     this.data = null;
   };
-
+  
         /**
         * This static method gets an host instance associated with a native
         * host of your platform. This is the best way to get a java host object.
@@ -76,68 +73,76 @@ public class Host {
         *
         * @exception           HostNotFoundException if the name of the host is not valid.
         *                                      MsgException if the native version of this method failed.
-        */
-  public static Host getByName(String name)
-  throws HostNotFoundException, NativeException, JniException {
-
-    return Msg.hostGetByName(name);
+        */ 
+  public static Host getByName(String name) 
+    throws HostNotFoundException, NativeException, JniException {
+    return MsgNative.hostGetByName(name);
   }
+  
         /**
         * This static method returns the number of the installed hosts.
         *
         * @return                      The number of the installed hosts.
         *
-        */ public static int getNumber() throws NativeException, JniException {
-    return Msg.hostGetNumber();
+        */ 
+  public static int getNumber() throws NativeException, JniException {
+    return MsgNative.hostGetNumber();
   }
+  
         /**
         * This static method return an instance to the host of the current process.
         *
         * @return                      The host on which the current process is executed.
         *
         * @exception           MsgException if the native version of this method failed.
-        */ public static Host currentHost() throws JniException {
-    return Msg.hostSelf();
+        */ 
+    public static Host currentHost() throws JniException {
+    return MsgNative.hostSelf();
   }
+  
         /**
         * This static method returns all of the hosts of the installed platform.
         *
         * @return                      An array containing all the hosts installed.
         *
         * @exception           MsgException if the native version of this method failed.
-        */ public static Host[] all() throws JniException, NativeException {
-    return Msg.allHosts();
+        */ 
+    public static Host[] all() throws JniException, NativeException {
+    return MsgNative.allHosts();
   }
+  
         /**
         * This method returns the name of a host.
         *
         * @return                      The name of the host.
         *
         * @exception           InvalidHostException if the host is not valid.
-        */ public String getName() throws NativeException, JniException {
-    return Msg.hostGetName(this);
+        */ 
+    public String getName() throws NativeException, JniException {
+    return MsgNative.hostGetName(this);
   }
+  
         /**
         * This method sets the data of the host.
         *
-        */ public void setData(Object data) {
+        */ 
+    public void setData(Object data) {
     this.data = data;
-  }
-
+  } 
         /**
         * This method gets the data of the host.
-        */
-  public Object getData() {
+        */ 
+    public Object getData() {
     return this.data;
   }
-
+  
         /**
         * This function tests if a host has data.
-        */
-  public boolean hasData() {
+        */ 
+    public boolean hasData() {
     return null != this.data;
   }
-
+  
         /**
         * This method returns the number of tasks currently running on a host.
         * The external load is not taken in account.
@@ -146,10 +151,11 @@ public class Host {
         *
         * @exception           InvalidHostException if the host is invalid.
         *
-        */
+        */ 
   public int getLoad() throws JniException {
-    return Msg.hostGetLoad(this);
+    return MsgNative.hostGetLoad(this);
   }
+  
         /**
         * This method returns the speed of the processor of a host,
         * regardless of the current load of the machine.
@@ -158,18 +164,36 @@ public class Host {
         *
         * @exception           InvalidHostException if the host is not valid.
         *
-        */ public double getSpeed() throws JniException {
-    return Msg.hostGetSpeed(this);
+        */ 
+   public double getSpeed() throws JniException {
+    return MsgNative.hostGetSpeed(this);
   }
+  
         /**
         * This method tests if a host is avail.
         * 
-        * @return                      If the host is avail the method returns true.
-        *                                      Otherwise the method returns false.
-        *
         * @exception           JniException if the host is not valid.
-        *
-        *
-        */ public boolean isAvail() throws JniException {
-    return Msg.hostIsAvail(this);
-}}
+        */ 
+    public boolean isAvail() throws JniException {
+    return MsgNative.hostIsAvail(this);
+  }
+  
+   /** Send the given task to the given channel of the host */ 
+   
+    public void put(int channel, Task task) throws JniException,
+    NativeException {
+    MsgNative.hostPut(this, channel, task, -1);
+  } 
+   /** Send the given task to the given channel of the host (waiting at most #timeout seconds) */ 
+   
+    public void put(int channel, Task task,
+                    double timeout) throws JniException, NativeException {
+    MsgNative.hostPut(this, channel, task, timeout);
+  } 
+   /** Send the given task to the given channel of the host (capping the emision rate to #maxrate) */ 
+   
+    public void putBounded(int channel, Task task,
+                           double maxrate) throws JniException,
+    NativeException {
+    MsgNative.hostPutBounded(this, channel, task, maxrate);
+} } 
index 0a78238..e39018f 100644 (file)
 
 package simgrid.msg;
 
+/**
+ * This exception is raised when looking for a non-existing host.
+ */
 public class HostNotFoundException extends MsgException {
-
   private static final long serialVersionUID = 1L;
 
-   /**
-    * Constructs an <code>HostNotFoundException</code> without a 
-    * detail message. 
-    */
+
+  /*
+   * Constructs an <code>HostNotFoundException</code> without a 
+   * detail message. 
+   */
   public HostNotFoundException() {
     super();
   }
-   /**
-    * Constructs an <code>HostNotFoundException</code> with a detail message. 
-    *
-    * @param   s   the detail message.
-    */ public HostNotFoundException(String s) {
+  /*
+   * Constructs an <code>HostNotFoundException</code> with a detail message. 
+   *
+   * @param   s   the detail message.
+   */
+  public HostNotFoundException(String s) {
     super(s);
   }
 }
index ae2a2df..13479b8 100644 (file)
@@ -8,25 +8,26 @@
  * it and/or modify it under the terms of the license 
  * (GNU LGPL) which comes with this package.
  */
-
 package simgrid.msg;
 
+/**
+ * This exception is raised when there is a problem within the bindings (in JNI). 
+ */
 public class JniException extends MsgException {
-
   private static final long serialVersionUID = 1L;
 
-   /**
-    * Constructs an <code>JniException</code> without a 
-    * detail message. 
-    */
+
+  /*
+   * Constructs an <code>JniException</code> without a 
+   * detail message. 
+   */
   public JniException() {
     super();
   }
-   /**
-    * Constructs an <code>JniException</code> with a detail message. 
-    *
-    * @param   s   the detail message.
-    */ public JniException(String s) {
+  /*
+   * Constructs an <code>JniException</code> with a detail message. 
+   *
+   * @param   s   the detail message.
+   */ public JniException(String s) {
     super(s);
-  }
-}
+}}
index bb48601..00b1939 100644 (file)
@@ -19,72 +19,21 @@ import org.xml.sax.*;
  * This class contains all the declaration of the natives methods
  * of the MSG API.
  * All of these methods are statics. You can't directly use these methods
- * but it is recommanded to use the classes Process, Host, Task and ParallelTask
+ * but it is recommanded to use the classes Process, Host and Task
  * of the package to build your application.
  *
  * @author  Abdelmalek Cherier
  * @author  Martin Quinson
- * @version 1.00, 07/05/01
- * @see Host
- * @see Process
- * @see Task
- * @see ParallelTask
  * @since SimGrid 3.3
- * @since JDK1.5011 
  */
 public final class Msg {
-    /**
-     * The natively implemented method to get the last error code of the simulation.
-     *
-     * @return     The last error code of the simulation.
-     */
-  final static native int getErrCode();
-
-    /**
-     * Errors returned by the method Msg.getErrCode().
-     */
-
-  /* Everything is right. Keep on goin the way !                                
-   *
-   */
-  public static final int SUCCESS = 0;
-
-  /* Something must be not perfectly clean. But I 
-   * may be paranoid freak... !    
-   */
-  public static final int WARNING = 1;
-
-  /* There has been a problem during you task treansfer.
-   * Either the network is  down or the remote host has 
-   * been shutdown.
+  /*
+   * Statically load the library which contains all native functions used in here
    */
-  public static final int TRANSFERT_FAILURE = 2;
-
-    /**
-     * System shutdown. The host on which you are running
-     * has just been rebooted. Free your datastructures and
-     * return now !
-     */
-  public static final int HOST_FAILURE = 3;
-
-    /**
-     * Cancelled task. This task has been cancelled by somebody !
-     */
-  public static final int TASK_CANCELLLED = 4;
-
-    /**
-     * You've done something wrong. You'd better look at it...
-     */
-  public static final int FATAL_ERROR = 5;
-
-    /**
-     * Staticaly load the SIMGRID4JAVA library
-     *  which contains all native functions used in here
-     */
   static {
     try {
       System.loadLibrary("simgrid");
-      Msg.selectContextFactory("jcontext_factory");
+      MsgNative.selectContextFactory("jcontext_factory");
     } catch(NativeException e) {
       System.err.println(e.toString());
       e.printStackTrace();
@@ -98,822 +47,44 @@ public final class Msg {
     }
   }
 
-  final static native
-    void selectContextFactory(String name) throws NativeException;
-
-    /******************************************************************
-     * The natively implemented methods connected to the MSG Process  *
-     ******************************************************************/
-
-    /**
-     * The natively implemented method to create an MSG process.
-     *
-     * @param process The java process object to bind with the MSG native process.
-     * @param host    A valid (binded) host where create the process.
-     *
-     * @exception  simgrid.msg.JniException if JNI stuff goes wrong.
-     *
-     * @see  Process constructors.
-     */
-  final static native
-    void processCreate(Process process, Host host) throws JniException;
-
-    /**
-     * The natively implemented method to kill all the process of the simulation.
-     *
-     * @param resetPID        Should we reset the PID numbers. A negative number means no reset
-     *                        and a positive number will be used to set the PID of the next newly
-     *                        created process.
-     *
-     * @return                The function returns the PID of the next created process.
-     */
-  final static native int processKillAll(int resetPID);
-
-    /**
-     * The natively implemented method to suspend an MSG process.
-     *
-     * @param process        The valid (binded with a native process) java process to suspend.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *                       NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.pause()
-     */
-  final static native void processSuspend(Process process)
-  throws JniException, NativeException;
-
-    /**
-     * The natively implemented method to kill a MSG process.
-     *
-     * @param process        The valid (binded with a native process) java process to kill.
-     *
-     * @see                 Process.kill()
-     */
-  final static native void processKill(Process process)
-  throws JniException;
-
-    /**
-     * The natively implemented method to resume a suspended MSG process.
-     *
-     * @param process        The valid (binded with a native process) java process to resume.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *                       NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.restart()
-     */
-  final static native void processResume(Process process)
-  throws JniException, NativeException;
-
-    /**
-     * The natively implemented method to test if MSG process is suspended.
-     *
-     * @param process        The valid (binded with a native process) java process to test.
-     *
-     * @return                If the process is suspended the method retuns true. Otherwise the
-     *                        method returns false.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @see                 Process.isSuspended()
-     */
-  final static native boolean processIsSuspended(Process process) throws
-    JniException;
-
-    /**
-     * The natively implemented method to get the host of a MSG process.
-     *
-     * @param process        The valid (binded with a native process) java process to get the host.
-     *
-     * @return                The method returns the host where the process is running.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *                       NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.getHost()
-     */
-  final static native Host processGetHost(Process process)
-  throws JniException, NativeException;
-
-    /**
-     * The natively implemented method to get a MSG process from his PID.
-     *
-     * @param PID            The PID of the process to get.
-     *
-     * @return                The process with the specified PID.
-     *
-     * @exception            NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.getFromPID()
-     */
-  final static native Process processFromPID(int PID) throws NativeException;
-
-    /**
-     * The natively implemented method to get the PID of a MSG process.
-     *
-     * @param process        The valid (binded with a native process) java process to get the PID.
-     *
-     * @return                The PID of the specified process.
-     *
-     * @exception            NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.getPID()
-     */
-  final static native int processGetPID(Process process) throws
-    NativeException;
-
-    /**
-     * The natively implemented method to get the PPID of a MSG process.
-     *
-     * @param process        The valid (binded with a native process) java process to get the PID.
-     *
-     * @return                The PPID of the specified process.
-     *
-     * @exception            NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.getPPID()
-     */
-  final static native int processGetPPID(Process process) throws
-    NativeException;
-
-    /**
-     * The natively implemented method to get the current running process.
-     *
-     * @return             The current process.
-     *
-     * @exception            NativeException if the SimGrid native code failed.
-
-     * @see                Process.currentProcess()
-     */
-  final static native Process processSelf() throws NativeException;
+    /** Returns the last error code of the simulation */
+  public final static native int getErrCode();
 
-    /**
-     * The natively implemented method to get the current running process PID.
-     *
-     * @return                The PID of the current process.
-     *
-     * @see                Process.currentProcessPID()
-     */
-  final static native int processSelfPID();
-
-    /**
-     * The natively implemented method to get the current running process PPID.
-     *
-     * @return                The PPID of the current process.
-     *
-     * @see                Process.currentProcessPPID()
-     */
-  final static native int processSelfPPID();
-
-    /**
-     * The natively implemented method to migrate a process from his currnet host to a new host.
-     *
-     * @param process        The (valid) process to migrate.
-     * @param host            A (valid) host where move the process.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *                       NativeException if the SimGrid native code failed.
-     *
-     * @see                Process.migrate()
-     * @see                Host.getByName()
-     */
-  final static native void processChangeHost(Process process, Host host)
-  throws JniException, NativeException;
-
-    /**
-     * Process synchronization. The process wait the signal of the simulator to start.
-     * 
-     * @exception            JniException if something goes wrong with JNI
-     */
-  final static native void waitSignal(Process process) throws JniException;
-
-    /**
-     * The natively implemented native to request the current process to sleep 
-     * until time seconds have elapsed.
-     *
-     * @param seconds        The time the current process must sleep.
-     *
-     * @exception            NativeException if the SimGrid native code failed.
-     *
-     * @see                 Process.waitFor()
-     */
-  final static native void processWaitFor(double seconds) throws
-    NativeException;
-
-    /**
-     * The natively implemented native method to exit a process.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @see                Process.exit()
-     */
-  final static native void processExit(Process process) throws JniException;
-
-
-    /******************************************************************
-     * The natively implemented methods connected to the MSG host     *
-     ******************************************************************/
-
-    /**
-     * The natively implemented method to get an host from his name.
-     *
-     * @param name            The name of the host to get.
-     *
-     * @return                The host having the specified name.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *                       HostNotFoundException if there is no such host
-     *                       NativeException if the SimGrid native code failed.
-     *
-     * @see                Host.getByName()
-     */
-  final static native Host hostGetByName(String name)
-  throws JniException, HostNotFoundException, NativeException;
-
-    /**
-     * The natively implemented method to get the name of an MSG host.
-     *
-     * @param host            The host (valid) to get the name.
-     *
-     * @return                The name of the specified host.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @see                Host.getName()
-     */
-  final static native String hostGetName(Host host) throws JniException;
-
-    /**
-     * The natively implemented method to get the number of hosts of the simulation.
-     *
-     * @return                The number of hosts of the simulation.
-     *
-     * @see                Host.getNumber()
-     */
-  final static native int hostGetNumber();
-
-    /**
-     * The natively implemented method to get the host of the current runing process.
-     *
-     * @return                The host of the current running process.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @see                Host.currentHost()
-     */
-  final static native Host hostSelf() throws JniException;
-
-    /**
-     * The natively implemented method to get the speed of a MSG host.
-     *
-     * @param host            The host to get the host.
-     *
-     * @return                The speed of the specified host.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @see                Host.getSpeed()
-     */
-
-  final static native double hostGetSpeed(Host host) throws JniException;
-
-    /**
-     * The natively implemented native method to test if an host is avail.
-     *
-     * @param host            The host to test.
-     *
-     * @return                If the host is avail the method returns true. 
-     *                        Otherwise the method returns false.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @see                Host.isAvail()
-     */
-  final static native boolean hostIsAvail(Host host) throws JniException;
-
-    /**
-     * The natively implemented native method to get all the hosts of the simulation.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     * @return                A array which contains all the hosts of simulation.
-     */
-
-  final static native Host[] allHosts() throws JniException;
-
-    /**
-     * The natively implemented native method to get the number of running tasks on a host.
-     *
-     * @param                The host concerned by the operation.
-     *
-     * @return                The number of running tasks.
-     *
-     * @exception            JniException if something goes wrong with JNI
-     *
-     */
-  final static native int hostGetLoad(Host host) throws JniException;
-
-    /******************************************************************
-     * The natively implemented methods connected to the MSG task     *
-     ******************************************************************/
-
-    /**
-     * The natively implemented method to create a MSG task.
-     *
-     * @param name            The name of th task.
-     * @param computeDuration    A value of the processing amount (in flop) needed 
-     *                        to process the task. If 0, then it cannot be executed
-     *                        with the execute() method. This value has to be >= 0.
-     * @param messageSize        A value of amount of data (in bytes) needed to transfert 
-     *                        this task. If 0, then it cannot be transfered this task. 
-     *                        If 0, then it cannot be transfered with the get() and put() 
-     *                        methods. This value has to be >= 0.
-     * @param task            The java task object to bind with the native task to create.
-     *
-     * @exception             JniException if something goes wrong with JNI
-     *                        NullPointerException if the specified name is null.
-     *                        IllegalArgumentException if compute duration <0 or message size <0
-     *
-     * @see                    Task.create()
-     */
-  final static native void taskCreate(Task task, String name,
-                                      double computeDuration,
-                                      double messageSize)
-  throws JniException, NullPointerException, IllegalArgumentException;
-
-    /**
-     * The natively implemented method to get the sender of a task.
-     *
-     * @param    task            The task (valid) to get the sender.
-     *
-     * @return                The sender of the task.
-     *
-     * @exception                InvalidTaskException is the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *
-     * @see                    Task.getSender()
-     */
-  final static native Process taskGetSender(Task task) throws JniException;
-
-    /**
-     * The natively implementd method to get the source of a task.
-     *
-     * @param task            The task to get the source.
-     *
-     * @return                The source of the task.
-     *
-     * @exception                InvalidTaskException is the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *
-     * @see                    Task.getSource()
-     */
-  final static native Host taskGetSource(Task task) throws JniException,
-    NativeException;
-
-    /**
-     * The natively implemented method to get the name of the task.
-     *
-     * @param task            The task to get the name.
-     *
-     * @return                 The name of the specified task.
-     *
-     * @exception                InvalidTaskException is the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *
-     * @see                    Task.getName()
-     */
-  final static native String taskGetName(Task task) throws JniException;
-
-    /**
-     * The natively implemented method to cancel a task.
-     *
-     * @param task            The task to cancel.
-     *
-     * @exception                InvalidTaskException if the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *                        MsgException if the cancelation failed.
-     *
-     * @see                    Task.cancel().
-     */
-  final static native void taskCancel(Task task) throws JniException,
-    NativeException;
-
-    /**
-     * The natively implemented method to get the computing amount of the task.
-     *
-     * @param task            The task to get the computing amount.
-     *
-     * @return                The computing amount of the specified task.
-     *
-     * @exception                InvalidTaskException if the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *                        MsgException if the cancelation failed.
-     *
-     * @see                    Task.getComputeDuration()
-     */
-  final static native double taskGetComputeDuration(Task task) throws
-    JniException;
-
-    /**
-     * The natively implemented method to get the remaining computation
-     *
-     * @param task            The task to get the remaining computation.
-     *
-     * @return                The remaining computation of the specified task.
-     *
-     * @exception                InvalidTaskException if the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *                        MsgException if the cancelation failed.
-     *
-     * @see                    Task.getRemainingDuration()
-     */
-  final static native double taskGetRemainingDuration(Task task) throws
-    JniException;
-
-    /**
-     * The natively implemented method to set the priority of a task.
-     *
-     * @param task            The task to set the prirotity
-     *
-     * @param priority        The new priority of the specified task.
-     *
-     * @exception                InvalidTaskException if the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *                        MsgException if the cancelation failed.
-     *
-     * @see                    Task.setPriority()
-     */
-  final static native void taskSetPriority(Task task,
-                                           double priority) throws
-    JniException;
-
-    /**
-     * The natively implemented method to destroy a MSG task.
-     *
-     * @param                    The task to destroy.
-     *
-     * @exception                InvalidTaskException is the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *                        MsgException if the destruction failed.
-     *
-     * @see                    Task.destroy()
-     */
-  final static native void taskDestroy(Task task) throws JniException,
-    NativeException;
-
-    /**
-     * The natively implemented method to execute a MSG task.
-     *
-     * @param task            The task to execute.
-     *
-     * @exception                InvalidTaskException is the specified task is not valid. A task
-     *                        is invalid if it is not binded with a native task.
-     *                        MsgException if the destruction failed.
-     *
-     * @see                    Task.execute()
-     */
-  final static native void taskExecute(Task task) throws JniException,
-    NativeException;
-
-
-
-    /**************************************************************************
-     * The natively implemented methods connected to the MSG parallel task     *
-     ***************************************************************************/
-
-    /**
-     * The natively implemented method to create a MSG parallel task.
-     *
-     * @param name                The name of the parallel task.
-     * @param hosts                The list of hosts implied by the parallel task.
-     * @param computeDurations    The total number of operations that have to be performed
-     *                            on the hosts.
-     * @param messageSizes        An array of doubles
-     *
-     * @see                        ParallelTask.create()
-     */
-  final static native void parallelTaskCreate(ParallelTask parallelTask,
-                                              String name, Host[]hosts,
-                                              double[]computeDurations,
-                                              double[]messageSizes)
-  throws JniException, NullPointerException, IllegalArgumentException;
-
-    /**
-     * The natively implemented method to get the sender of a parallel task.
-     *
-     * @param    parallelTask    The parallel task (valid) to get the sender.
-     *
-     * @return                The sender of the parallel task.
-     *
-     * @see                    ParallelTask.getSender()
-     */
-  final static native Process parallelTaskGetSender(ParallelTask parallelTask)
-    throws JniException;
-
-    /**
-     * The natively implementd method to get the source of a parallel task.
-     *
-     * @param parallelTask    The parallel task to get the source.
-     *
-     * @return                The source of the parallel task.
-     *
-     * @see                    ParallelTask.getSource()
-     */
-  final static native Host parallelTaskGetSource(ParallelTask parallelTask)
-    throws JniException;
-
-    /**
-     * The natively implemented method to get the name of the parallel task.
-     *
-     * @param parallelTask    The parallel task to get the name.
-     *
-     * @return                 The name of the specified parallel task.
-     *
-     * @see                    ParallelTask.getName()
-     */
-  final static native String parallelTaskGetName(ParallelTask parallelTask)
-    throws JniException;
-
-    /**
-     * The natively implemented method to cancel a parallel task.
-     *
-     * @param parallelTask    The parallel task to cancel.
-     *
-     * @see                    ParallelTask.cancel().
-     */
-  final static native void parallelTaskCancel(ParallelTask parallelTask)
-    throws JniException, NativeException;
-
-    /**
-     * The natively implemented method to get the computing amount of the task.
-     *
-     * @param parallelTask    The parallel task to get the computing amount.
-     *
-     * @return                The computing amount of the specified parallel task.
-     *
-     * @see                    ParallelTask.getComputeDuration()
-     */
-  final static native double parallelTaskGetComputeDuration(ParallelTask
-                                                            parallelTask)
-    throws JniException;
-
-    /**
-     * The natively implemented method to get the remaining computation
-     *
-     * @param parallelTask    The parallel task to get the remaining computation.
-     *
-     * @return                The remaining computation of the specified parallel task.
-     *
-     * @see                    ParallelTask.getRemainingDuration()
-     */
-  final static native double parallelTaskGetRemainingDuration(ParallelTask
-                                                              parallelTask)
-    throws JniException;
-
-    /**
-     * The natively implemented method to set the priority of a parallel task.
-     *
-     * @param parallelTask    The parallel task to set the prirotity
-     *
-     * @param priority        The new priority of the specified parallel task.
-     *
-     * @see                    ParallelTask.setPriority()
-     */
-  final static native void parallelTaskSetPriority(ParallelTask parallelTask,
-                                                   double priority) throws
-    JniException;
-
-    /**
-     * The natively implemented method to destroy a MSG parallel task.
-     *
-     * @param parallelTask    The parallel task to destroy.
-     *
-     * @see                    ParallelTask.destroy()
-     */
-  final static native void parallelTaskDestroy(ParallelTask parallelTask)
-    throws JniException, NativeException;
-
-    /**
-     * The natively implemented method to execute a MSG parallel task.
-     *
-     * @param parallelTask    The parallel task to execute.
-     *
-     * @see                    ParallelTask.execute()
-     */
-  final static native void parallelTaskExecute(ParallelTask parallelTask)
-    throws JniException, NativeException;
-
-    /******************************************************************
-     * The natively implemented methods connected to the MSG channel  *
-     ******************************************************************/
-
-    /**
-     * The natively implemented method to listen on the channel and wait for receiving a task.
-     *
-     * @param channel            The channel to listen            
-     *
-     * @return                The task readed from the channel.
-     *
-     * @exception                MsgException if the listening operation failed.
-     *
-     * @see                    Channel.get()
-     */
-  final static native Task channelGet(Channel channel) throws JniException,
-    NativeException;
-
-    /**
-     * The natively implemented method to listen on the channel and wait for receiving a task with a timeout.
-     *
-     * @param channel            The channel to listen.
-     * @param timeout            The timeout of the listening.
-     *
-     * @return                The task readed from the channel.
-     *
-     * @exception                MsgException if the listening operation failed.
-     *
-     * @see                    Channel.getWithTimeout()
-     *
-     */
-  final static native Task channelGetWithTimeout(Channel channel,
-                                                 double timeout) throws
-    JniException, NativeException;
-
-
-    /**
-     * The natively implemented method to listen on the channel of a specific host.
-     *
-     * @param    channel            The channel to listen.
-     *
-     * @param host            The specific host.
-     *
-     * @return                The task readed from the channel of the specific host.
-     *
-     * @exception                InvalidHostException if the specified host is not valid.
-     *                        MsgException if the listening operation failed.
-     *
-     * @see                    Channel.getFromHost()
-     */
-  final static native Task channelGetFromHost(Channel channel,
-                                              Host host) throws JniException,
-    NativeException;
-
-    /**
-     * The natively implemented method to test whether there is a pending communication on the channel.
-     *
-     * @param channel            The channel concerned by the operation.
-     *
-     * @return                The method returns true if there is a pending communication on the specified
-     *                        channel. Otherwise the method returns false.
-     *
-     * @see                    Channel.hasPendingCommunication()
-     */
-  final static native boolean channelHasPendingCommunication(Channel channel)
-    throws JniException;
-
-    /**
-     * The natively implemented method to test whether there is a pending communication on a 
-     * channel, and who sent it.
-     *
-     * @param                    The channel concerned by the operation.
-     *
-     * @return                The method returns -1 if there is no pending communication and 
-     *                        the PID of the process who sent it otherwise.
-     *
-     * @see                    Channel.getCummunicatingProcess()
-     */
-  final static native int channelGetCommunicatingProcess(Channel channel)
-    throws JniException;
-
-    /**
-     * The natively implemented method to get the number of tasks waiting to be received on a
-     * channel and sent by a host.
-     *
-     * @param channel            The channel concerned by the operation.
-     *
-     * @param host            The sender of the tasks.
-     *
-     * @return                The number of tasks waiting to be received on a channel
-     *                         and sent by the specified host.
-     *
-     * @exception                InvalidHostException if the specified host is not valid.
-     *
-     * @see                    Channel.getHostWaiting()
-     */
-  final static native int channelGetHostWaitingTasks(Channel channel,
-                                                     Host host) throws
-    JniException;
+    /** Everything is right. Keep on goin the way ! */
+  public static final int SUCCESS = 0;
 
-    /**
-     * The natively implemented method to put a task on the channel of an host.
-     *
-     * @param channel            The channel where to put the task.
-     * @param task            The task to put.
-     * @param host            The host of the specified channel.
-     *
-     * @exception                InvalidTaskException if the task is not valid.
-     *                        InvalidHostException if the host is not valid.
-     *                        MsgException if the operation failed.
-     *
-     * @see                    Channel.put()
-     */
-  final static native void channelPut(Channel channel, Task task,
-                                      Host host) throws JniException,
-    NativeException;
+    /** Something must be not perfectly clean (but I may be paranoid freak...) */
+  public static final int WARNING = 1;
 
-    /**
-     * The natively implemented method to put a task on a channel of an  host (with a timeout 
-     * on the waiting of the destination host) and waits for the end of the transmission.
-     *
-     * @param channel            The channel where to put the task.
-     * @param task            The task to put.
-     * @param host            The host containing the channel.
-     * @param timeout            The timeout of the transmission.
-     *
-     * @exception                InvalidTaskException if the task is not valid.
-     *                        InvalidHostException if the host is not valid.
-     *                        MsgException if the operation failed.
-     *
-     * @see                    Channel.putWithTimeout()
-     */
-  final static native void channelPutWithTimeout(Channel channel, Task task,
-                                                 Host host,
-                                                 double timeout) throws
-    JniException, NativeException;
+    /** There has been a problem during you task treansfer.
+     *  Either the network is  down or the remote host has been shutdown */
+  public static final int TRANSFERT_FAILURE = 2;
 
-    /**
-     * The natively implemented method to put a task on channel with a bounded transmition
-     * rate.
-     * 
-     * @param channel            The channel where to put the task.
-     * @param task            The task to put.
-     * @param host            The host containing the channel.
-     * @param max_rate        The bounded transmition rate.
-     *
-     * @exception                InvalidTaskException if the task is not valid.
-     *                        InvalidHostException if the host is not valid.
-     *                        MsgException if the operation failed.
-     *
-     * @see                    Channel.putBounded()
-     */
-  final static native void channelPutBounded(Channel channel, Task task,
-                                             Host host,
-                                             double max_rate) throws
-    JniException, NativeException;
+    /** System shutdown. 
+     *  The host on which you are running has just been rebooted.
+     *  Free your datastructures and return now ! */
+  public static final int HOST_FAILURE = 3;
 
-    /**
-     * The natively implemented method to wait for at most timeout seconds for a task reception
-     * on channel. The PID is updated with the PID of the first process.
-     *
-     * @param channel            The channel concerned by the operation.
-     * @param timeout            The maximum time to wait for a task before
-     *                         giving up.
-     *
-     * @exception                MsgException if the reception operation failed.
-     *
-     * @see                    Channel.wait()
-     */
-  final static native int channelWait(Channel channel,
-                                      double timeout) throws JniException,
-    NativeException;
+    /** Cancelled task. This task has been cancelled by somebody ! */
+  public static final int TASK_CANCELLLED = 4;
 
-    /**
-     * The natively implemented method to set the number of channel used by all the process
-     * of the simulation.
-     *
-     * @param channelNumber    The channel number of the process.
-     *
-     * @see                    Channel.setNumber()
-     */
-  final static native void channelSetNumber(int channelNumber);
+    /** You've done something wrong. You'd better look at it... */
+  public static final int FATAL_ERROR = 5;
 
-    /**
-     * The natively implemented method to get the number of channel of the process of the simulation.
-     *
-     * @return                The number of channel per process.
-     *
-     * @see                    Channel.getNumber()
-     */
-  final static native int channelGetNumber();
 
-    /*********************************************************************************
-     * Additional native methods                                                      *
-     **********************************************************************************/
 
-    /**
-     * The natively implemented method to get the simulation time.
-     *
-     * @param                    The simulation time.
-     */
+   /** Retrieve the simulation time */
   public final static native double getClock();
 
   public final static native void pajeOutput(String pajeFile);
 
 
+   /** Issue an information logging message */
   public final static native void info(String s);
 
-    /*********************************************************************
-     * The natively implemented methods connected to the MSG simulation  *
-     *********************************************************************/
+    /*********************************************************************************
+     * Deployment and initialization related functions                               *
+     *********************************************************************************/
 
     /**
      * The natively implemented method to initialize a MSG simulation.
@@ -941,7 +112,7 @@ public final class Msg {
      *
      */
   public final static native void createEnvironment(String platformFile)
-    throws NativeException;
+  throws NativeException;
 
 
     /**
@@ -983,11 +154,8 @@ public final class Msg {
       System.exit(1);
     }
 
-    /* specify the number of channel for the process of the simulation. */
-      Channel.setNumber(1);
-
     /* Load the platform and deploy the application */
-    Msg.createEnvironment(args[0]);
+      Msg.createEnvironment(args[0]);
     Msg.deployApplication(args[1]);
 
     /* Execute the simulation */
index 5549481..ad45da0 100644 (file)
@@ -8,27 +8,35 @@
  * it and/or modify it under the terms of the license 
  *(GNU LGPL) which comes with this package. 
  */
-
 package simgrid.msg;
-
 import java.lang.Exception;
 
-public class MsgException extends Exception {
-
+/**
+ * This exception is an abstract class grouping all MSG-related exceptions
+  
+    \htmlonly <!-- 
+      DOXYGEN_NAVBAR_CHILD "HostNotFoundException"=classsimgrid_1_1msg_1_1HostNotFoundException.html
+      DOXYGEN_NAVBAR_CHILD "JniException"=classsimgrid_1_1msg_1_1JniException.html
+      DOXYGEN_NAVBAR_CHILD "NativeException"=classsimgrid_1_1msg_1_1NativeException.html
+      DOXYGEN_NAVBAR_CHILD "ProcessNotFoundException"=classsimgrid_1_1msg_1_1ProcessNotFoundException.html
+    --> \endhtmlonly 
+  
+ */
+public abstract class MsgException extends Exception {
   private static final long serialVersionUID = 1L;
 
-    /**
-     * Constructs an <code>MsgException</code> without a 
-     * detail message. 
-     */
+  /*
+   * Constructs an <code>MsgException</code> without a 
+   * detail message. 
+   */
   public MsgException() {
     super();
   }
-    /**
-     * Constructs an <code>MsgException</code> with a detail message. 
-     *
-     * @param   s   the detail message.
-     */ public MsgException(String s) {
+  /*
+   * Constructs an <code>MsgException</code> with a detail message. 
+   *
+   * @param   s   the detail message.
+   */ public MsgException(String s) {
     super(s);
   }
 }
diff --git a/src/java/simgrid/msg/MsgNative.java b/src/java/simgrid/msg/MsgNative.java
new file mode 100644 (file)
index 0000000..26d2a97
--- /dev/null
@@ -0,0 +1,618 @@
+/*
+ * simgrid.msg.Msg.java    1.00 07/05/01
+ *
+ * Copyright 2006,2007 Martin Quinson, Malek Cherier           
+ * All right reserved. 
+ *
+ * This program is free software; you can redistribute 
+ * it and/or modify it under the terms of the license 
+ *(GNU LGPL) which comes with this package. 
+ */
+
+package simgrid.msg;
+
+/* Contains all the native methods reloaded by Process, Host and Task.
+ *
+ * @author  Abdelmalek Cherier
+ * @author  Martin Quinson
+ * @since SimGrid 3.3
+ */
+final class MsgNative {
+
+
+  final static native
+    void selectContextFactory(String name) throws NativeException;
+
+    /******************************************************************
+     * The natively implemented methods connected to the MSG Process  *
+     ******************************************************************/
+
+    /**
+     * The natively implemented method to create an MSG process.
+     *
+     * @param process The java process object to bind with the MSG native process.
+     * @param host    A valid (binded) host where create the process.
+     *
+     * @exception  simgrid.msg.JniException if JNI stuff goes wrong.
+     *
+     * @see  Process constructors.
+     */
+  final static native
+    void processCreate(Process process, Host host) throws JniException;
+
+    /**
+     * The natively implemented method to kill all the process of the simulation.
+     *
+     * @param resetPID        Should we reset the PID numbers. A negative number means no reset
+     *                        and a positive number will be used to set the PID of the next newly
+     *                        created process.
+     *
+     * @return                The function returns the PID of the next created process.
+     */
+  final static native int processKillAll(int resetPID);
+
+    /**
+     * The natively implemented method to suspend an MSG process.
+     *
+     * @param process        The valid (binded with a native process) java process to suspend.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *                       NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.pause()
+     */
+  final static native void processSuspend(Process process)
+  throws JniException, NativeException;
+
+    /**
+     * The natively implemented method to kill a MSG process.
+     *
+     * @param process        The valid (binded with a native process) java process to kill.
+     *
+     * @see                 Process.kill()
+     */
+  final static native void processKill(Process process)
+  throws JniException;
+
+    /**
+     * The natively implemented method to resume a suspended MSG process.
+     *
+     * @param process        The valid (binded with a native process) java process to resume.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *                       NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.restart()
+     */
+  final static native void processResume(Process process)
+  throws JniException, NativeException;
+
+    /**
+     * The natively implemented method to test if MSG process is suspended.
+     *
+     * @param process        The valid (binded with a native process) java process to test.
+     *
+     * @return                If the process is suspended the method retuns true. Otherwise the
+     *                        method returns false.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @see                 Process.isSuspended()
+     */
+  final static native boolean processIsSuspended(Process process) throws
+    JniException;
+
+    /**
+     * The natively implemented method to get the host of a MSG process.
+     *
+     * @param process        The valid (binded with a native process) java process to get the host.
+     *
+     * @return                The method returns the host where the process is running.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *                       NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.getHost()
+     */
+  final static native Host processGetHost(Process process)
+  throws JniException, NativeException;
+
+    /**
+     * The natively implemented method to get a MSG process from his PID.
+     *
+     * @param PID            The PID of the process to get.
+     *
+     * @return                The process with the specified PID.
+     *
+     * @exception            NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.getFromPID()
+     */
+  final static native Process processFromPID(int PID) throws NativeException;
+
+    /**
+     * The natively implemented method to get the PID of a MSG process.
+     *
+     * @param process        The valid (binded with a native process) java process to get the PID.
+     *
+     * @return                The PID of the specified process.
+     *
+     * @exception            NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.getPID()
+     */
+  final static native int processGetPID(Process process) throws
+    NativeException;
+
+    /**
+     * The natively implemented method to get the PPID of a MSG process.
+     *
+     * @param process        The valid (binded with a native process) java process to get the PID.
+     *
+     * @return                The PPID of the specified process.
+     *
+     * @exception            NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.getPPID()
+     */
+  final static native int processGetPPID(Process process) throws
+    NativeException;
+
+    /**
+     * The natively implemented method to get the current running process.
+     *
+     * @return             The current process.
+     *
+     * @exception            NativeException if the SimGrid native code failed.
+
+     * @see                Process.currentProcess()
+     */
+  final static native Process processSelf() throws NativeException;
+
+    /**
+     * The natively implemented method to get the current running process PID.
+     *
+     * @return                The PID of the current process.
+     *
+     * @see                Process.currentProcessPID()
+     */
+  final static native int processSelfPID();
+
+    /**
+     * The natively implemented method to get the current running process PPID.
+     *
+     * @return                The PPID of the current process.
+     *
+     * @see                Process.currentProcessPPID()
+     */
+  final static native int processSelfPPID();
+
+    /**
+     * The natively implemented method to migrate a process from his currnet host to a new host.
+     *
+     * @param process        The (valid) process to migrate.
+     * @param host            A (valid) host where move the process.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *                       NativeException if the SimGrid native code failed.
+     *
+     * @see                Process.migrate()
+     * @see                Host.getByName()
+     */
+  final static native void processChangeHost(Process process, Host host)
+  throws JniException, NativeException;
+
+    /**
+     * The natively implemented native to request the current process to sleep 
+     * until time seconds have elapsed.
+     *
+     * @param seconds        The time the current process must sleep.
+     *
+     * @exception            NativeException if the SimGrid native code failed.
+     *
+     * @see                 Process.waitFor()
+     */
+  final static native void processWaitFor(double seconds) throws
+    NativeException;
+
+    /**
+     * The natively implemented native method to exit a process.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @see                Process.exit()
+     */
+  final static native void processExit(Process process) throws JniException;
+
+
+    /******************************************************************
+     * The natively implemented methods connected to the MSG host     *
+     ******************************************************************/
+
+    /**
+     * The natively implemented method to get an host from his name.
+     *
+     * @param name            The name of the host to get.
+     *
+     * @return                The host having the specified name.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *                       HostNotFoundException if there is no such host
+     *                       NativeException if the SimGrid native code failed.
+     *
+     * @see                Host.getByName()
+     */
+  final static native Host hostGetByName(String name)
+  throws JniException, HostNotFoundException, NativeException;
+
+    /**
+     * The natively implemented method to get the name of an MSG host.
+     *
+     * @param host            The host (valid) to get the name.
+     *
+     * @return                The name of the specified host.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @see                Host.getName()
+     */
+  final static native String hostGetName(Host host) throws JniException;
+
+    /**
+     * The natively implemented method to get the number of hosts of the simulation.
+     *
+     * @return                The number of hosts of the simulation.
+     *
+     * @see                Host.getNumber()
+     */
+  final static native int hostGetNumber();
+
+    /**
+     * The natively implemented method to get the host of the current runing process.
+     *
+     * @return                The host of the current running process.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @see                Host.currentHost()
+     */
+  final static native Host hostSelf() throws JniException;
+
+    /**
+     * The natively implemented method to get the speed of a MSG host.
+     *
+     * @param host            The host to get the host.
+     *
+     * @return                The speed of the specified host.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @see                Host.getSpeed()
+     */
+
+  final static native double hostGetSpeed(Host host) throws JniException;
+
+    /**
+     * The natively implemented native method to test if an host is avail.
+     *
+     * @param host            The host to test.
+     *
+     * @return                If the host is avail the method returns true. 
+     *                        Otherwise the method returns false.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @see                Host.isAvail()
+     */
+  final static native boolean hostIsAvail(Host host) throws JniException;
+
+    /**
+     * The natively implemented native method to get all the hosts of the simulation.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     * @return                A array which contains all the hosts of simulation.
+     */
+
+  final static native Host[] allHosts() throws JniException;
+
+    /**
+     * The natively implemented native method to get the number of running tasks on a host.
+     *
+     * @param                The host concerned by the operation.
+     *
+     * @return                The number of running tasks.
+     *
+     * @exception            JniException if something goes wrong with JNI
+     *
+     */
+  final static native int hostGetLoad(Host host) throws JniException;
+
+    /******************************************************************
+     * The natively implemented methods connected to the MSG task     *
+     ******************************************************************/
+
+    /**
+     * The natively implemented method to create a MSG task.
+     *
+     * @param name            The name of th task.
+     * @param computeDuration    A value of the processing amount (in flop) needed 
+     *                        to process the task. If 0, then it cannot be executed
+     *                        with the execute() method. This value has to be >= 0.
+     * @param messageSize        A value of amount of data (in bytes) needed to transfert 
+     *                        this task. If 0, then it cannot be transfered this task. 
+     *                        If 0, then it cannot be transfered with the get() and put() 
+     *                        methods. This value has to be >= 0.
+     * @param task            The java task object to bind with the native task to create.
+     *
+     * @exception             JniException if something goes wrong with JNI
+     *                        NullPointerException if the specified name is null.
+     *                        IllegalArgumentException if compute duration <0 or message size <0
+     *
+     * @see                    Task.create()
+     */
+  final static native void taskCreate(Task task, String name,
+                                      double computeDuration,
+                                      double messageSize)
+  throws JniException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * The natively implemented method to get the sender of a task.
+     *
+     * @param    task            The task (valid) to get the sender.
+     *
+     * @return                The sender of the task.
+     *
+     * @exception                InvalidTaskException is the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *
+     * @see                    Task.getSender()
+     */
+  final static native Process taskGetSender(Task task) throws JniException;
+
+    /**
+     * The natively implementd method to get the source of a task.
+     *
+     * @param task            The task to get the source.
+     *
+     * @return                The source of the task.
+     *
+     * @exception                InvalidTaskException is the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *
+     * @see                    Task.getSource()
+     */
+  final static native Host taskGetSource(Task task) throws JniException,
+    NativeException;
+
+    /**
+     * The natively implemented method to get the name of the task.
+     *
+     * @param task            The task to get the name.
+     *
+     * @return                 The name of the specified task.
+     *
+     * @exception                InvalidTaskException is the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *
+     * @see                    Task.getName()
+     */
+  final static native String taskGetName(Task task) throws JniException;
+
+    /**
+     * The natively implemented method to cancel a task.
+     *
+     * @param task            The task to cancel.
+     *
+     * @exception                InvalidTaskException if the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *                        MsgException if the cancelation failed.
+     *
+     * @see                    Task.cancel().
+     */
+  final static native void taskCancel(Task task) throws JniException,
+    NativeException;
+
+    /**
+     * The natively implemented method to create a MSG parallel task.
+     *
+     * @param name                The name of the parallel task.
+     * @param hosts                The list of hosts implied by the parallel task.
+     * @param computeDurations    The total number of operations that have to be performed
+     *                            on the hosts.
+     * @param messageSizes        An array of doubles
+     *
+     * @see                        ParallelTask.create()
+     */
+  final static native void parallelTaskCreate(Task pTask, String name,
+                                              Host[]hosts,
+                                              double[]computeDurations,
+                                              double[]messageSizes)
+  throws JniException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * The natively implemented method to get the computing amount of the task.
+     *
+     * @param task            The task to get the computing amount.
+     *
+     * @return                The computing amount of the specified task.
+     *
+     * @exception                InvalidTaskException if the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *                        MsgException if the cancelation failed.
+     *
+     * @see                    Task.getComputeDuration()
+     */
+  final static native double taskGetComputeDuration(Task task) throws
+    JniException;
+
+    /**
+     * The natively implemented method to get the remaining computation
+     *
+     * @param task            The task to get the remaining computation.
+     *
+     * @return                The remaining computation of the specified task.
+     *
+     * @exception                InvalidTaskException if the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *                        MsgException if the cancelation failed.
+     *
+     * @see                    Task.getRemainingDuration()
+     */
+  final static native double taskGetRemainingDuration(Task task) throws
+    JniException;
+
+    /**
+     * The natively implemented method to set the priority of a task.
+     *
+     * @param task            The task to set the priority
+     *
+     * @param priority        The new priority of the specified task.
+     *
+     * @exception                InvalidTaskException if the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *                        MsgException if the cancelation failed.
+     *
+     * @see                    Task.setPriority()
+     */
+  final static native void taskSetPriority(Task task,
+                                           double priority) throws
+    JniException;
+
+    /**
+     * The natively implemented method to destroy a MSG task.
+     *
+     * @param                    The task to destroy.
+     *
+     * @exception                InvalidTaskException is the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *                        MsgException if the destruction failed.
+     *
+     * @see                    Task.destroy()
+     */
+  final static native void taskDestroy(Task task) throws JniException,
+    NativeException;
+
+    /**
+     * The natively implemented method to execute a MSG task.
+     *
+     * @param task            The task to execute.
+     *
+     * @exception                InvalidTaskException is the specified task is not valid. A task
+     *                        is invalid if it is not binded with a native task.
+     *                        MsgException if the destruction failed.
+     *
+     * @see                    Task.execute()
+     */
+  final static native void taskExecute(Task task) throws JniException,
+    NativeException;
+
+
+    /******************************************************************
+     * Task reception methods                                         *
+     ******************************************************************/
+
+    /**
+     * The natively implemented method to listen on the channel and wait for receiving a task with a timeout.
+     *
+     * @param channel  The channel to listen.
+     * @param timeout  The timeout of the listening. 
+     * @param host     The specific host from which we accept messages (or NULL for any).
+     *
+     * @return         The task read from the channel.
+     *
+     * @exception                MsgException if the listening operation failed.
+     *
+     * @see                    Channel.getWithTimeout()
+     *
+     */
+  final static native Task taskGet(int channel, double timeout,
+                                   Host host) throws JniException,
+    NativeException;
+
+
+    /**
+     * The natively implemented method to test whether there is a pending communication on the channel.
+     *
+     * @param channel            The channel concerned by the operation.
+     *
+     * @return                The method returns true if there is a pending communication on the specified
+     *                        channel. Otherwise the method returns false.
+     *
+     * @see                    Channel.hasPendingCommunication()
+     */
+  final static native boolean taskProbe(int channel) throws JniException;
+
+    /**
+     * The natively implemented method to test whether there is a pending communication on a 
+     * channel, and who sent it.
+     *
+     * @param                    The channel concerned by the operation.
+     *
+     * @return                The method returns -1 if there is no pending communication and 
+     *                        the PID of the process who sent it otherwise.
+     *
+     * @see                    Channel.getCummunicatingProcess()
+     */
+  final static native int taskGetCommunicatingProcess(int channel) throws
+    JniException;
+
+    /**
+     * The natively implemented method to get the number of tasks waiting to be received on a
+     * channel and sent by a host.
+     *
+     * @param channel            The channel concerned by the operation.
+     *
+     * @param host            The sender of the tasks.
+     *
+     * @return                The number of tasks waiting to be received on a channel
+     *                         and sent by the specified host.
+     *
+     * @exception                InvalidHostException if the specified host is not valid.
+     *
+     * @see                    Channel.getHostWaiting()
+     */
+  final static native int taskProbeHost(int channel,
+                                        Host host) throws JniException;
+
+    /******************************************************************
+     * Task emission methods                                          *
+     ******************************************************************/
+    /**
+     * The natively implemented method to put a task on the channel of an host.
+     *
+     * @param host            The host on which to send the data
+     * @param channel         The channel where to put the task.
+     * @param task            The task to put.
+     * @param task            Timeout (or <0 if none)
+     *
+     * @exception                InvalidTaskException if the task is not valid.
+     *                        InvalidHostException if the host is not valid.
+     *                        MsgException if the operation failed.
+     *
+     */
+  final static native void hostPut(Host host, int channel, Task task,
+                                   double timeout) throws JniException,
+    NativeException;
+
+
+    /**
+     * The natively implemented method to put a task on channel with a bounded transmition
+     * rate.
+     * 
+     * @param channel            The channel where to put the task.
+     * @param task            The task to put.
+     * @param host            The host containing the channel.
+     * @param max_rate        The bounded transmition rate.
+     *
+     * @exception                InvalidTaskException if the task is not valid.
+     *                        InvalidHostException if the host is not valid.
+     *                        MsgException if the operation failed.
+     *
+     * @see                    Channel.putBounded()
+     */
+  final static native void hostPutBounded(Host host, int channel, Task task,
+                                          double max_rate) throws
+    JniException, NativeException;
+
+}
index 1841a02..96053b6 100644 (file)
@@ -8,25 +8,26 @@
  * it and/or modify it under the terms of the license 
  * (GNU LGPL) which comes with this package.
  */
-
 package simgrid.msg;
 
+/**
+ * This exception is raised when there is an error within the SimGrid message. Refer to the string message for more info on what went wrong.
+ */
 public class NativeException extends MsgException {
-
   private static final long serialVersionUID = 1L;
 
-   /**
-    * Constructs an <code>NativeException</code> without a 
-    * detail message. 
-    */
+  /*
+   * Constructs an <code>NativeException</code> without a 
+   * detail message. 
+   */
   public NativeException() {
     super();
   }
-   /**
-    * Constructs an <code>NativeException</code> with a detail message. 
-    *
-    * @param   s   the detail message.
-    */ public NativeException(String s) {
+  /*
+   * Constructs an <code>NativeException</code> with a detail message. 
+   *
+   * @param   s   the detail message.
+   */ public NativeException(String s) {
     super(s);
   }
 }
diff --git a/src/java/simgrid/msg/ParallelTask.java b/src/java/simgrid/msg/ParallelTask.java
deleted file mode 100644 (file)
index 666bbc9..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * simgrid.msg.Task.java       1.00 07/05/01
- *
- * Copyright 2006,2007 Martin Quinson, Malek Cherier           
- * All right reserved. 
- *
- * This program is free software; you can redistribute 
- * it and/or modify it under the terms of the license 
- *(GNU LGPL) which comes with this package. 
- */
-
-package simgrid.msg;
-
-class ParallelTask {
-
-    /**
-     * This attribute represents a bind between a java task object and
-     * a native task. Even if this attribute is public you must never
-     * access to it. It is set automaticatly during the build of the object.
-     */
-  public long bind = 0;
-
-
-  /* Default constructor (disabled) */
-  protected ParallelTask() {
-  };
-
-    /**
-     * Construct an new parallel task with the specified processing amount and amount for each host
-     * implied.
-     *
-     * @param name                             The name of the parallel task.
-     * @param hosts                            The list of hosts implied by the parallel task.
-     * @param computeDurations The total number of operations that have to be performed
-     *                                                 on the hosts.
-     * @param messageSizes             An array of doubles
-     * @exception                              InvalidTaskNameException if the specified name is null.
-     *                                                 InvalidComputeDuration if the parameter computeDurations is null.
-     *                                                 InvalidMessageSize if the parameter messageSizes is null.
-     */
-  public ParallelTask(String name, Host[]hosts, double[]computeDurations,
-                      double[]messageSizes)
-  throws JniException {
-    create(name, hosts, computeDurations, messageSizes);
-  }
-    /**
-     * This method creates a parallel task (if not already created).
-     *
-     * @param name                             The name of the parallel task.
-     * @param hosts                            The list of hosts implied by the parallel task.
-     * @param computeDurations The total number of operations that have to be performed
-     *                                                 on the hosts.
-     * @param messageSizes             An array of doubles
-     * @exception                              InvalidTaskNameException if the specified name is null.
-     *                                                 InvalidComputeDuration if the parameter computeDurations is null.
-     *                                                 InvalidMessageSize if the parameter messageSizes is null.
-     */
-    public void create(String name, Host[]hosts, double[]computeDurations,
-                         double[]messageSizes)
-  throws JniException {
-
-    if (bind != 0)
-      Msg.parallelTaskCreate(this, name, hosts, computeDurations,
-                             messageSizes);
-  }
-    /**
-     * This method gets the sender of the parallel task.
-     *
-     * @return                         The sender of the parallel task.
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native parallel task.
-     *
-     */ Process getSender() throws JniException {
-    return Msg.parallelTaskGetSender(this);
-  }
-    /**
-     * This method gets the source of the parallel task.
-     *
-     * @return                         The source of the task. 
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A task
-     *                                         is invalid if it is not binded with a native parallel task.
-     */ public Host getSource() throws JniException {
-    return Msg.parallelTaskGetSource(this);
-  }
-    /**
-     * This method gets the name of a parallel task.
-     *
-     * @return                         The name of the parallel task.
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native parallel task.
-     */ public String getName() throws JniException {
-    return Msg.parallelTaskGetName(this);
-  }
-    /**
-     * This method cancels a task.
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native parallel task.
-     *                                         MsgException if the cancelation failed.
-     */ public void cancel() throws JniException, NativeException {
-    Msg.parallelTaskCancel(this);
-  }
-    /**
-     * This method gets the computing amount of the parallel task.
-     *
-     * @return                         The computing amount of the parallel task.
-     *
-     * @exception                      InvalidTaskException is the specified task is not valid. A task
-     *                                         is invalid if it is not binded with a native task.
-     */ public double getComputeDuration() throws JniException {
-    return Msg.parallelTaskGetComputeDuration(this);
-  }
-    /**
-     * This method gets the remaining computation.
-     *
-     * @return                         The remaining duration. 
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native parallel task.
-     */ public double getRemainingDuration() throws JniException {
-    return Msg.parallelTaskGetRemainingDuration(this);
-  }
-    /**
-     * This method sets the priority of the computation of the parallel task.
-     * The priority doesn't affect the transfert rate. For example a
-     * priority of 2 will make the task receive two times more cpu than
-     * the other ones.
-     *
-     * @param                          The new priority of the parallel task.
-     *
-     * @exception                      InvalidTaskException is the specified task is not valid. A task
-     *                                         is invalid if it is not binded with a native task.
-     */ public void setPrirority(double priority) throws JniException {
-    Msg.parallelTaskSetPriority(this, priority);
-  }
-    /**
-     * This method destroies a parallel task.
-     *
-     * @exception                      InvalidTaskException is the specified task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native task.
-     *                                         MsgException if the destruction failed.
-     */ public void destroy() throws JniException, NativeException {
-    Msg.parallelTaskDestroy(this);
-  }
-    /**
-     * This method deletes a parallel task.
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native parallel task.
-     *                                         MsgException if the destruction failed.
-     */ protected void finalize() throws JniException, NativeException {
-    if (this.bind != 0)
-      Msg.parallelTaskDestroy(this);
-  }
-    /**
-     * This method execute a task on the location on which the
-     * process is running.
-     *
-     * @exception                      InvalidTaskException is the specified parallel task is not valid. A parallel task
-     *                                         is invalid if it is not binded with a native parallel task.
-     *                                         MsgException if the destruction failed.
-     */ public void execute() throws JniException, NativeException {
-    Msg.parallelTaskExecute(this);
-}}
index c2861ee..c678e65 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * simgrid.msg.Host.java       1.00 07/05/01
+ * $Id$
  *
  * Copyright 2006,2007 Martin Quinson, Malek Cherier           
  * All right reserved. 
@@ -14,7 +14,7 @@ package simgrid.msg;
 import java.lang.Thread;
 import java.util.*;
 
-/*
+/**
  * A process may be defined as a code, with some private data, executing 
  * in a location (host). All the process used by your simulation must be
  * declared in the deployment file (XML format).
@@ -27,34 +27,25 @@ import java.util.*;
  * 
  * public class Slave extends simgrid.msg.Process {
  *
- *     (2) Write a default constructor and 
- *     call the default constructor of the base class.
- *     
- *     public Slave() {
- *             super();
- *  }
- *
- *  (3) Override the method function 
+ *  (2) Override the method function
+ * 
+ *  \verbatim
  *     public void main(String[] args) {
  *             System.out.println("Hello MSG");
  *     }
+ *  \endverbatim
  * }
  * The name of your process must be declared in the deployment file of your simulation.
  * For the exemple, for the previouse process Slave this file must contains a line :
  * <process host="Maxims" function="Slave"/>, where Maxims is the host of the process
  * Slave. All the process of your simulation are automaticaly launched and managed by Msg.
  * A process use tasks to simulate communications or computations with another process. 
- * For more information see Task and ParallelTask. For more information on host concept 
+ * For more information see Task. For more information on host concept 
  * see Host.
  * 
  * @author  Abdelmalek Cherier
  * @author  Martin Quinson
- * @version 1.00, 07/05/01
- * @see Host
- * @see Task
- * @see ParallelTask
  * @since SimGrid 3.3
- * @since JDK1.5011
  */
 
 public abstract class Process extends Thread {
@@ -186,7 +177,7 @@ public abstract class Process extends Thread {
       schedBegin = new Sem(0);
       schedEnd = new Sem(0);
 
-      Msg.processCreate(this, host);
+      MsgNative.processCreate(this, host);
   }
     /**
      * This method kills all running process of the simulation.
@@ -198,7 +189,7 @@ public abstract class Process extends Thread {
      * @return                         The function returns the PID of the next created process.
      *                 
      */ public static int killAll(int resetPID) {
-    return Msg.processKillAll(resetPID);
+    return MsgNative.processKillAll(resetPID);
   }
 
     /**
@@ -219,7 +210,7 @@ public abstract class Process extends Thread {
      *                              NativeException on error in the native SimGrid code
      */
   public void pause() throws JniException, NativeException {
-    Msg.processSuspend(this);
+    MsgNative.processSuspend(this);
   }
     /**
      * This method resumes a suspended process by resuming the task on which it was
@@ -229,7 +220,7 @@ public abstract class Process extends Thread {
      *                              NativeException on error in the native SimGrid code
      *
      */ public void restart() throws JniException, NativeException {
-    Msg.processResume(this);
+    MsgNative.processResume(this);
   }
     /**
      * This method tests if a process is suspended.
@@ -239,7 +230,7 @@ public abstract class Process extends Thread {
      *
      * @exception                      JniException on JNI madness
      */ public boolean isSuspended() throws JniException {
-    return Msg.processIsSuspended(this);
+    return MsgNative.processIsSuspended(this);
   }
     /**
      * This method returns the host of a process.
@@ -250,7 +241,7 @@ public abstract class Process extends Thread {
      *                              NativeException on error in the native SimGrid code
      *
      */ public Host getHost() throws JniException, NativeException {
-    return Msg.processGetHost(this);
+    return MsgNative.processGetHost(this);
   }
     /**
      * This static method get a process from a PID.
@@ -261,7 +252,7 @@ public abstract class Process extends Thread {
      *
      * @exception                      NativeException on error in the native SimGrid code
      */ public static Process fromPID(int PID) throws NativeException {
-    return Msg.processFromPID(PID);
+    return MsgNative.processFromPID(PID);
   }
     /**
      * This method returns the PID of the process.
@@ -271,7 +262,7 @@ public abstract class Process extends Thread {
      * @exception                      JniException on JNI madness
      *                              NativeException on error in the native SimGrid code
      */ public int getPID() throws JniException, NativeException {
-    return Msg.processGetPID(this);
+    return MsgNative.processGetPID(this);
   }
     /**
      * This method returns the PID of the parent of a process.
@@ -280,7 +271,7 @@ public abstract class Process extends Thread {
      *
      * @exception                      NativeException on error in the native SimGrid code
      */ public int getPPID() throws NativeException {
-    return Msg.processGetPPID(this);
+    return MsgNative.processGetPPID(this);
   }
     /**
      * This static method returns the currently running process.
@@ -291,14 +282,14 @@ public abstract class Process extends Thread {
      *
      *
      */ public static Process currentProcess() throws NativeException {
-    return Msg.processSelf();
+    return MsgNative.processSelf();
   }
     /**
      * This static method returns the PID of the currently running process.
      *
      * @return                         The PID of the current process.         
      */ public static int currentProcessPID() {
-    return Msg.processSelfPID();
+    return MsgNative.processSelfPID();
   }
 
     /**
@@ -307,7 +298,7 @@ public abstract class Process extends Thread {
      * @return                         The PID of the parent of current process.               
      */
   public static int currentProcessPPID() {
-    return Msg.processSelfPPID();
+    return MsgNative.processSelfPPID();
   }
 
     /**
@@ -319,7 +310,7 @@ public abstract class Process extends Thread {
      *                              NativeException on error in the native SimGrid code
      */
   public void migrate(Host host) throws JniException, NativeException {
-    Msg.processChangeHost(this, host);
+    MsgNative.processChangeHost(this, host);
   }
     /**
      * This method makes the current process sleep until time seconds have elapsed.
@@ -328,7 +319,7 @@ public abstract class Process extends Thread {
      *
      * @exception                      NativeException on error in the native SimGrid code
      */ public static void waitFor(double seconds) throws NativeException {
-    Msg.processWaitFor(seconds);
+    MsgNative.processWaitFor(seconds);
   } public void showArgs() {
     try {
       Msg.info("[" + this.name + "/" + this.getHost().getName() + "] argc=" +
@@ -367,7 +358,7 @@ public abstract class Process extends Thread {
       }
 
       this.main(args);
-      Msg.processExit(this);
+      MsgNative.processExit(this);
       schedEnd.release();
     }
     catch(MsgException e) {
@@ -378,44 +369,53 @@ public abstract class Process extends Thread {
   }
 
     /**
-     * Process synchronization. The process wait the signal of the simulator to start.
-     *
-     * @exception                      JniException on JNI madness
+     * The main function of the process (to implement).
      */
-  private void waitSignal() throws JniException {
-    Msg.waitSignal(this);
-    unschedule();
-  }
-    /**
-        * The main function of the process (to implement).
-        */ public abstract void main(String[]args)
+  public abstract void main(String[]args)
   throws JniException, NativeException;
 
 
   public void unschedule() {
-
     try {
       schedEnd.release();
       schedBegin.acquire();
     } catch(InterruptedException e) {
-
     }
   }
 
   public void schedule() {
-
     try {
       schedBegin.release();
       schedEnd.acquire();
     } catch(InterruptedException e) {
-
     }
   }
 
-  public void taskSend(Channel channel, Task task,
-                       Host host) throws NativeException, JniException {
-    Msg.channelPut(channel, task, host);
-  } public Task taskReceive(Channel channel) throws NativeException,
+
+   /** Send the given task to given host on given channel */
+  public void taskSend(Host host, int channel,
+                       Task task) throws NativeException, JniException {
+    MsgNative.hostPut(host, channel, task, -1);
+  }
+   /** Receive a task on given channel */
+    public Task taskReceive(int channel) throws NativeException,
+    JniException {
+    return MsgNative.taskGet(channel, -1, null);
+  }
+   /** Receive a task on given channel (waiting at most given time) */
+    public Task taskReceive(int channel,
+                            double timeout) throws NativeException,
     JniException {
-    return Msg.channelGet(channel);
-}}
+    return MsgNative.taskGet(channel, timeout, null);
+  }
+   /** Receive a task on given channel from given sender */
+    public Task taskReceive(int channel, Host host) throws NativeException,
+    JniException {
+    return MsgNative.taskGet(channel, -1, host);
+  }
+   /** Receive a task on given channel from given sender (waiting at most given time) */
+    public Task taskReceive(int channel, double timeout,
+                            Host host) throws NativeException, JniException {
+    return MsgNative.taskGet(channel, timeout, host);
+  }
+}
index 14d2149..081daed 100644 (file)
 
 package simgrid.msg;
 
+/**
+  * This exception is raised when looking for a non-existing process.
+  */
 public class ProcessNotFoundException extends MsgException {
-
   private static final long serialVersionUID = 1L;
 
-   /**
-    * Constructs an <code>ProcessNotFoundException</code> without a 
-    * detail message. 
-    */
+  /*
+   * Constructs an <code>ProcessNotFoundException</code> without a 
+   * detail message. 
+   */
   public ProcessNotFoundException() {
     super();
   }
-   /**
-    * Constructs an <code>ProcessNotFoundException</code> with a detail message. 
-    *
-    * @param   s   the detail message.
-    */ public ProcessNotFoundException(String s) {
+  /*
+   * Constructs an <code>ProcessNotFoundException</code> with a detail message. 
+   *
+   * @param   s   the detail message.
+   */ public ProcessNotFoundException(String s) {
     super(s);
   }
 }
index e71317f..6e44870 100644 (file)
@@ -18,7 +18,7 @@
   \r\rpublic Sem(int i) {
     \rpermits_ = i;
   \r\r\rpublic void acquire() throws InterruptedException {
-    \r \r if (Thread.interrupted())
+    \r\rif (Thread.interrupted())
       \rthrow new InterruptedException();
     \r\rsynchronized(this) {
       \r\rtry {
index 47c3fc2..129f5f3 100644 (file)
@@ -22,13 +22,10 @@ package simgrid.msg;
  *
  * @author  Abdelmalek Cherier
  * @author  Martin Quinson
- * @version 1.00, 07/05/01
- * @see Process
- * @see Channel
  * @since SimGrid 3.3
- * @since JDK1.5011 
  */
 public class Task {
+
         /**
         * This attribute represents a bind between a java task object and
         * a native task. Even if this attribute is public you must never
@@ -36,120 +33,95 @@ public class Task {
         */
   public long bind = 0;
 
-        /**
-        * Default constructor (disabled)
-        */
+
+  /* Default constructor (disabled) */
   protected Task() {
   }
-        /**
+  /* *              * *
+   * * Constructors * *
+         * *              * *//**
         * Construct an new task with the specified processing amount and amount
         * of data needed.
         *
-        * @param name                          The name of th task.
+        * @param name  Task's name
         *
-        * @param computeDuration       A value of the processing amount (in flop) needed 
-        *                                                      to process the task. If 0, then it cannot be executed
-        *                                                      with the execute() method. This value has to be >= 0.
+        * @param computeDuration       A value of the processing amount (in flop) needed to process the task. 
+        *                              If 0, then it cannot be executed with the execute() method.
+        *                              This value has to be >= 0.
         *
-        * @param messageSize           A value of amount of data (in bytes) needed to transfert 
-        *                                                      this task. If 0, then it cannot be transfered this task. 
-        *                                                      If 0, then it cannot be transfered with the get() and put() 
-        *                                                      methods. This value has to be >= 0.
+        * @param messageSize           A value of amount of data (in bytes) needed to transfert this task.
+        *                              If 0, then it cannot be transfered with the get() and put() methods.
+        *                              This value has to be >= 0.
         *
-        * @exception                           InvalidTaskNameException if the specified name is null.
-        *                                                      InvalidComputeDuration if the specified compute duration is less than 0.
-        *                                                      InvalidMessageSizeException if the specified message size is less than 0.
-        */
-    public Task(String name, double computeDuration,
-                  double messageSize) throws JniException {
-
-    create(name, computeDuration, messageSize);
+        * @exception                   JniException if the binding mecanism fails.
+        */ public Task(String name, double computeDuration,
+                 double messageSize) throws JniException {
+    MsgNative.taskCreate(this, name, computeDuration, messageSize);
   }
-        /**
-        * This method creates a new task with the specified features. The task
-        * creation means that the native task is created and binded with the
-        * java task instance. If the task is already created you must destroy it
-        * before to use this method, otherwise the method throws the exception
-        * TaskAlreadyCreatedException.
+    /**
+     * Construct an new parallel task with the specified processing amount and amount for each host
+     * implied.
+     *
+     * @param name             The name of the parallel task.
+     * @param hosts            The list of hosts implied by the parallel task.
+     * @param computeDurations The amount of operations to be performed by each host of @hosts.
+     * @param messageSizes     A matrix describing the amount of data to exchange between hosts.
+     * 
+     * @exception              JniException if the binding mecanism fails.
+     */ public Task(String name, Host[]hosts, double[]computeDurations,
+                    double[]messageSizes) throws JniException {
+    MsgNative.parallelTaskCreate(this, name, hosts, computeDurations,
+                                 messageSizes);
+  }
+  /* *                   * *
+   * * Getters / Setters * *
+         * *                   * *//**
+        * This method gets the name of a task.
         *
-        * @param name                          The name of the task.
-        * @param computeDuration       A value of the processing amount (in flop) needed 
-        *                                                      to process the task. If 0, then it cannot be executed
-        *                                                      with the execute() method. This value has to be >= 0.
-        * @param messageSize           A value of amount of data (in bytes) needed to transfert 
-        *                                                      this task. If 0, then it cannot be transfered this task. 
-        *                                                      If 0, then it cannot be transfered with the get() and put() 
-        *                                                      methods. This value has to be >= 0.
+        * @return                              The name of the task.
         *
-        * @exception                           InvalidTaskNameException if the specified name is null.
-        *                                                      InvalidComputeDuration if the specified compute duration is less than 0.
-        *                                                      InvalidMessageSizeException if the specified message size is less than 0.
-        */
-    public void create(String name, double computeDuration,
-                         double messageSize) throws JniException {
-
-    if (this.bind == 0)
-      Msg.taskCreate(this, name, computeDuration, messageSize);
+        * @exception                   JniException if the binding mecanism fails.
+        * @exception                   InvalidTaskException is the specified task is not valid. A task
+        *                                              is invalid if it is not binded with a native task.
+        */ public String getName() throws JniException {
+    return MsgNative.taskGetName(this);
   }
         /**
         * This method gets the sender of the task.
         *
         * @return                              The sender of the task.
         *
-        * @exception                   InvalidTaskException is the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
+        * @exception                   JniException if the binding mecanism fails.
         *
         */ Process getSender() throws JniException {
-    return Msg.taskGetSender(this);
+    return MsgNative.taskGetSender(this);
   }
          /**
          * This method gets the source of the task.
          *
          * @return                             The source of the task. 
          *
-         * @exception                  InvalidTaskException is the specified task is not valid. A task
-         *                                             is invalid if it is not binded with a native task.
+         * @exception                  JniException if the binding mecanism fails.
          */ public Host getSource() throws JniException, NativeException {
-    return Msg.taskGetSource(this);
-  }
-        /**
-        * This method gets the name of a task.
-        *
-        * @return                              The name of the task.
-        *
-        * @exception                   InvalidTaskException is the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
-        */ public String getName() throws JniException {
-    return Msg.taskGetName(this);
-  }
-        /**
-        * This method cancels a task.
-        *
-        * @exception                   InvalidTaskException if the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
-        *                                              MsgException if the cancelation failed.
-        */ public void cancel() throws JniException, NativeException {
-    Msg.taskCancel(this);
+    return MsgNative.taskGetSource(this);
   }
         /**
         * This method gets the computing amount of the task.
         *
         * @return                              The computing amount of the task.
         *
-        * @exception                   InvalidTaskException is the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
+        * @exception                   JniException if the binding mecanism fails.
         */ public double getComputeDuration() throws JniException {
-    return Msg.taskGetComputeDuration(this);
+    return MsgNative.taskGetComputeDuration(this);
   }
         /**
         * This method gets the remaining computation.
         *
         * @return                              The remaining duration. 
         *
-        * @exception                   InvalidTaskException is the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
+        * @exception                   JniException if the binding mecanism fails.
         */ public double getRemainingDuration() throws JniException {
-    return Msg.taskGetRemainingDuration(this);
+    return MsgNative.taskGetRemainingDuration(this);
   }
         /**
         * This method sets the priority of the computation of the task.
@@ -162,19 +134,81 @@ public class Task {
         * @exception                   InvalidTaskException is the specified task is not valid. A task
         *                                              is invalid if it is not binded with a native task.
         */ public void setPrirority(double priority) throws JniException {
-    Msg.taskSetPriority(this, priority);
+    MsgNative.taskSetPriority(this, priority);
+  }
+  /* *                       * *
+   * * Communication-related * *
+    * *                       * *//**
+    * Retrieves next task on given channel of local host
+    *
+    * @exception  JniException if the binding mecanism fails.
+    * @exception  NativeException if the retrival fails.
+    */
+    public static Task get(int channel) throws JniException, NativeException {
+    return MsgNative.taskGet(channel, -1.0, null);
+  }
+   /**
+    * Retrieves next task on given channel of local host (wait at most #timeout seconds)
+    *
+    * @exception  JniException if the binding mecanism fails.
+    * @exception  NativeException if the retrival fails.
+    */
+    public static Task get(int channel, double timeout) throws JniException,
+    NativeException {
+    return MsgNative.taskGet(channel, timeout, null);
+  }
+   /**
+    * Retrieves next task from given host on given channel of local host
+    *
+    * @exception  JniException if the binding mecanism fails.
+    * @exception  NativeException if the retrival fails.
+    */
+    public static Task get(int channel, Host host) throws JniException,
+    NativeException {
+    return MsgNative.taskGet(channel, -1, host);
+  }
+   /**
+    * Retrieves next task from given host on given channel of local host (wait at most #timeout seconds)
+    *
+    * @exception  JniException if the binding mecanism fails.
+    * @exception  NativeException if the retrival fails.
+    */ public static Task get(int channel, double timeout,
+                              Host host) throws JniException, NativeException {
+    return MsgNative.taskGet(channel, timeout, host);
+  }
+   /**
+    * Probes whether there is a waiting task on the given channel of local host
+    *
+    * @exception  JniException if the binding mecanism fails.
+    * @exception  NativeException if the retrival fails.
+    */ public static boolean probe(int channel) throws JniException {
+    return MsgNative.taskProbe(channel);
+  }
+   /**
+    * Counts tasks waiting on the given #channel of local host and sent by given #host
+    *
+    * @exception  JniException if the binding mecanism fails.
+    */ public static int probe(int channel, Host host) throws JniException {
+    return MsgNative.taskProbeHost(channel, host);
+  }
+  /* *                     * *
+   * * Computation-related * *
+         * *                     * *//**
+        * This method execute a task on the location on which the
+        * process is running.
+        *
+        * @exception JniException if the binding mecanism fails.
+        * @exception NativeException if the cancelation failed.
+        */ public void execute() throws JniException, NativeException {
+    MsgNative.taskExecute(this);
   }
         /**
-        * This method destroys a task.
+        * This method cancels a task.
         *
-        * @exception                   InvalidTaskException is the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
-        *                                              MsgException if the destruction failed.
-        */ public void destroy() throws JniException, NativeException {
-    if (this.bind != 0) {
-      Msg.taskDestroy(this);
-      this.bind = 0;
-    }
+        * @exception JniException if the binding mecanism fails.
+        * @exception NativeException if the cancelation failed.
+        */ public void cancel() throws JniException, NativeException {
+    MsgNative.taskCancel(this);
   }
         /**
         * This method deletes a task.
@@ -184,15 +218,5 @@ public class Task {
         *                                              MsgException if the destruction failed.
         */ protected void finalize() throws JniException, NativeException {
     if (this.bind != 0)
-      Msg.taskDestroy(this);
-  }
-        /**
-        * This method execute a task on the location on which the
-        * process is running.
-        *
-        * @exception                   InvalidTaskException is the specified task is not valid. A task
-        *                                              is invalid if it is not binded with a native task.
-        *                                              MsgException if the destruction failed.
-        */ public void execute() throws JniException, NativeException {
-    Msg.taskExecute(this);
+      MsgNative.taskDestroy(this);
 }}