From: Samuel Lepetit Date: Thu, 10 May 2012 10:00:29 +0000 (+0200) Subject: Change the way the objects are created in ApplicationHandler: they are X-Git-Tag: v3_9_90~569^2~19^2~90 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/a361c6f643b5c93bf65deaff643fb79144ef965d Change the way the objects are created in ApplicationHandler: they are now created the same way than when you create the object manually, using the (Host, String, String[]) constructor. It means that now your classes need to have a (Host, String, String[]) constructor calling the same constructor in Process. Update the examples to reflect the change. Update the changelog. --- diff --git a/ChangeLog b/ChangeLog index 414854bb08..2845ecd22d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,8 +5,10 @@ SimGrid-java (3.6.1) unstable; urgency=low as sufficiently prevalent for us to not dupplicate its features. * Make Process.kill(process) an instance method, not a static one * Fix a bug around Process.kill() - * Add dsend and simulatedSleep to the bindings. - + * Add the asynchronous API to the bindings. + * Add "sleep" in Process with Thread-like syntax/use. + * Change the way the Process are created in ApplicationHandler: a full +constructor is now needed for your child classes. -- $date Da SimGrid team SimGrid-java (3.6) unstable; urgency=low diff --git a/examples/async/Forwarder.java b/examples/async/Forwarder.java index 3ed84f3aff..2a0b4c6905 100644 --- a/examples/async/Forwarder.java +++ b/examples/async/Forwarder.java @@ -13,7 +13,9 @@ import org.simgrid.msg.Process; public class Forwarder extends Process { - + public Forwarder(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws MsgException { if (args.length < 3) { Msg.info("Forwarder needs 3 arguments (input mailbox, first output mailbox, last one)"); diff --git a/examples/async/Master.java b/examples/async/Master.java index 043f41c9d2..19e840cf49 100644 --- a/examples/async/Master.java +++ b/examples/async/Master.java @@ -11,6 +11,7 @@ package async; import java.util.ArrayList; import org.simgrid.msg.Comm; +import org.simgrid.msg.Host; import org.simgrid.msg.Process; import org.simgrid.msg.Msg; import org.simgrid.msg.MsgException; @@ -18,6 +19,9 @@ import org.simgrid.msg.Task; import org.simgrid.msg.Process;; public class Master extends Process { + public Master(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws MsgException { if (args.length < 4) { Msg.info("Master needs 4 arguments"); diff --git a/examples/async/Slave.java b/examples/async/Slave.java index e7e92d6c5a..922db49a45 100644 --- a/examples/async/Slave.java +++ b/examples/async/Slave.java @@ -15,6 +15,9 @@ import org.simgrid.msg.TransferFailureException; import org.simgrid.msg.Process; public class Slave extends Process { + public Slave(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws TransferFailureException, HostFailureException, TimeoutException { if (args.length < 1) { Msg.info("Slave needs 1 argument (its number)"); diff --git a/examples/basic/Forwarder.java b/examples/basic/Forwarder.java index 57250d0890..4a9b2b1e68 100644 --- a/examples/basic/Forwarder.java +++ b/examples/basic/Forwarder.java @@ -13,7 +13,9 @@ import org.simgrid.msg.Process; public class Forwarder extends Process { - + public Forwarder(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws MsgException { if (args.length < 3) { Msg.info("Forwarder needs 3 arguments (input mailbox, first output mailbox, last one)"); diff --git a/examples/basic/Master.java b/examples/basic/Master.java index 93e25349a1..54e0f5e5ac 100644 --- a/examples/basic/Master.java +++ b/examples/basic/Master.java @@ -14,6 +14,9 @@ import org.simgrid.msg.Task; import org.simgrid.msg.Process;; public class Master extends Process { + public Master(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws MsgException { if (args.length < 4) { Msg.info("Master needs 4 arguments"); diff --git a/examples/basic/Slave.java b/examples/basic/Slave.java index 8c138dd5d3..ccd2344c17 100644 --- a/examples/basic/Slave.java +++ b/examples/basic/Slave.java @@ -14,6 +14,9 @@ import org.simgrid.msg.TransferFailureException; import org.simgrid.msg.Process; public class Slave extends Process { + public Slave(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws TransferFailureException, HostFailureException, TimeoutException { if (args.length < 1) { Msg.info("Slave needs 1 argument (its number)"); diff --git a/examples/commTime/Master.java b/examples/commTime/Master.java index 750101671c..b53bc0f6f9 100644 --- a/examples/commTime/Master.java +++ b/examples/commTime/Master.java @@ -15,6 +15,9 @@ import org.simgrid.msg.Task; import org.simgrid.msg.Process; public class Master extends Process { + public Master(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws MsgException { if (args.length < 4) { Msg.info("Master needs 4 arguments"); diff --git a/examples/commTime/Slave.java b/examples/commTime/Slave.java index dc057a2d87..f68848ce5e 100644 --- a/examples/commTime/Slave.java +++ b/examples/commTime/Slave.java @@ -10,7 +10,10 @@ package commTime; import org.simgrid.msg.*; public class Slave extends org.simgrid.msg.Process { - public void main(String[] args) throws MsgException { + public Slave(Host host, String name, String[]args) { + super(host,name,args); + } + public void main(String[] args) throws MsgException { if (args.length < 1) { Msg.info("Slave needs 1 argument (its number)"); System.exit(1); diff --git a/examples/mutualExclusion/centralized/Coordinator.java b/examples/mutualExclusion/centralized/Coordinator.java index 74abea263b..eae6047745 100644 --- a/examples/mutualExclusion/centralized/Coordinator.java +++ b/examples/mutualExclusion/centralized/Coordinator.java @@ -17,7 +17,9 @@ import org.simgrid.msg.Process; public class Coordinator extends Process { - + public Coordinator(String hostname, String name) throws HostNotFoundException { + super(hostname, name); + } LinkedList waitingQueue=new LinkedList(); int CsToServe; diff --git a/examples/mutualExclusion/centralized/Node.java b/examples/mutualExclusion/centralized/Node.java index 75cc666206..8f79d8e82e 100644 --- a/examples/mutualExclusion/centralized/Node.java +++ b/examples/mutualExclusion/centralized/Node.java @@ -14,7 +14,9 @@ import org.simgrid.msg.Task; import org.simgrid.msg.Process; public class Node extends Process { - + public Node(String hostname, String name) throws HostNotFoundException { + super(hostname, name); + } public void request(double CStime) throws MsgException { RequestTask req = new RequestTask(this.name); Msg.info("Send a request to the coordinator"); diff --git a/examples/pingPong/Receiver.java b/examples/pingPong/Receiver.java index 8f8268e9f7..e4ad3abd49 100644 --- a/examples/pingPong/Receiver.java +++ b/examples/pingPong/Receiver.java @@ -14,7 +14,9 @@ import org.simgrid.msg.Task; import org.simgrid.msg.Process; public class Receiver extends Process { - + public Receiver(String hostname, String name) throws HostNotFoundException { + super(hostname, name); + } final double commSizeLat = 1; final double commSizeBw = 100000000; diff --git a/examples/pingPong/Sender.java b/examples/pingPong/Sender.java index 80a41026f9..454cbb4f84 100644 --- a/examples/pingPong/Sender.java +++ b/examples/pingPong/Sender.java @@ -14,7 +14,9 @@ import org.simgrid.msg.MsgException; import org.simgrid.msg.Process; public class Sender extends Process { - + public Sender(String hostname, String name) throws HostNotFoundException { + super(hostname, name); + } private final double commSizeLat = 1; final double commSizeBw = 100000000; diff --git a/org/simgrid/msg/ApplicationHandler.java b/org/simgrid/msg/ApplicationHandler.java index 3003ec33f4..9a5f58a768 100644 --- a/org/simgrid/msg/ApplicationHandler.java +++ b/org/simgrid/msg/ApplicationHandler.java @@ -10,9 +10,10 @@ */ package org.simgrid.msg; - import java.util.Hashtable; import java.util.Vector; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; public final class ApplicationHandler { @@ -92,28 +93,24 @@ public final class ApplicationHandler { } /** - * + * Method called to create the process */ @SuppressWarnings("unchecked") public static void createProcess() { try { Class cls = (Class) Class.forName(function); - - Process process = cls.newInstance(); - process.name = function; - process.id = org.simgrid.msg.Process.nextProcessId++; - - process.create(hostName); - Vector args_ = args; - int size = args_.size(); - - for (int index = 0; index < size; index++) - process.args.add(args_.get(index)); - - process.properties = properties; - properties = new Hashtable(); - - } catch(HostNotFoundException e) { + Constructor constructor = cls.getConstructor(new Class [] {Host.class, java.lang.String.class, java.lang.String[].class}); + String[] args_ = args.toArray(new String[args.size()]); + Process process = constructor.newInstance(Host.getByName(hostName), function, args_); + } + catch (NoSuchMethodException e) { + throw new RuntimeException("Can't find the correct constructor for the class " + function + ". \n" + + "Is there a constructor with the signature: \"Host host, String name, String[]args\" in the class ?"); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } + catch(HostNotFoundException e) { System.out.println(e.toString()); e.printStackTrace(); diff --git a/org/simgrid/msg/Process.java b/org/simgrid/msg/Process.java index d9cedd97aa..447966b111 100644 --- a/org/simgrid/msg/Process.java +++ b/org/simgrid/msg/Process.java @@ -179,6 +179,8 @@ public abstract class Process extends Thread { throw new RuntimeException("The impossible happened (yet again): the host that I have were not found",e); } + this.properties = new Hashtable(); + } /** * The natively implemented method to create an MSG process. @@ -315,7 +317,7 @@ public abstract class Process extends Thread { * FIXME: Not optimal, maybe we should have two native functions. * @param millis the length of time to sleep in milliseconds. */ - public static void sleep(long millis) { + public static void sleep(long millis) { sleep(millis,0); } /** diff --git a/src/jmsg_process.c b/src/jmsg_process.c index cba0649cf9..2e4c9d17be 100644 --- a/src/jmsg_process.c +++ b/src/jmsg_process.c @@ -430,10 +430,9 @@ Java_org_simgrid_msg_Process_waitFor(JNIEnv * env, jobject jprocess, return; } MSG_error_t rv = MSG_process_sleep((double)jseconds); - - jxbt_check_res("MSG_process_sleep()", rv, MSG_OK, - bprintf("unexpected error , please report this bug")); - + if (rv != MSG_OK) { +// smx_ctx_java_stop(smx_ctx_java_self()); + } } JNIEXPORT void JNICALL diff --git a/src/smx_context_java.c b/src/smx_context_java.c index 622e1030a1..b2abae8739 100644 --- a/src/smx_context_java.c +++ b/src/smx_context_java.c @@ -16,7 +16,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(jmsg, bindings, "MSG for Java(TM)"); static smx_context_t my_current_context = NULL; -static smx_context_t smx_ctx_java_self(void); static smx_context_t smx_ctx_java_factory_create_context(xbt_main_func_t code, int argc, char **argv, @@ -46,7 +45,7 @@ void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory) (*factory)->get_data = smx_ctx_base_get_data; } -static smx_context_t smx_ctx_java_self(void) +smx_context_t smx_ctx_java_self(void) { return my_current_context; } @@ -68,7 +67,8 @@ smx_ctx_java_factory_create_context(xbt_main_func_t code, int argc, context->jenv = get_current_thread_env(); jprocess_start(((smx_ctx_java_t) context)->jprocess, get_current_thread_env()); - }else{ + } + else { my_current_context = (smx_context_t)context; } context->super.data = data; diff --git a/src/smx_context_java.h b/src/smx_context_java.h index c95f15bd3b..851561434f 100644 --- a/src/smx_context_java.h +++ b/src/smx_context_java.h @@ -22,7 +22,7 @@ typedef struct s_smx_ctx_java { void SIMIX_ctx_java_factory_init(smx_context_factory_t *factory); void smx_ctx_java_stop(smx_context_t context); - +smx_context_t smx_ctx_java_self(void); SG_END_DECL() #endif /* !_XBT_CONTEXT_JAVA_H */