<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><div></div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">First thanks for your reply. I am searching for these APIs but I didn't find anything till now.</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="font-family: 'Times New Roman'; font-size: medium; "><font class="Apple-style-span" face="arial, helvetica, sans-serif" size="2">For you&nbsp;points&nbsp;here is my reply:</font></div><div style="font-family: 'Times New Roman'; font-size: medium; "><font class="Apple-style-span" face="arial, helvetica, sans-serif"
 size="2"><br></font></div><div style="font-family: 'Times New Roman'; font-size: medium; "><font class="Apple-style-span" face="arial, helvetica, sans-serif" size="2"><br></font></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">OK, but does that assume eternal life in perfect health of both the.....<br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="font-family: arial, helvetica, sans-serif; font-size: 10pt; ">&gt;<font class="Apple-style-span" color="#0000FF">I want to run mpiexec one time only because the program load some data in memory and I don't want to load the data for each client because it is the same.</font></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black;
 font-family: arial, helvetica, sans-serif; font-size: 10pt; ">So in this case your app doesn't spawn a process -- your seq C++<br>subsystem isn't a program, but a shared library.........</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="font-family: arial, helvetica, sans-serif; font-size: 10pt; "><span class="Apple-style-span" style="color: black; ">&gt;&nbsp;</span><font class="Apple-style-span" color="#0000FF">Yes, my seq C++ subsystem is a shared library</font><br>&nbsp;</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">Well, you can, but not without spawning a separate process: as a<br>command line tool, mpiexec provides its own entry point. If you don't<br>mind this, you don't need JNI in the first place, but you possibly do.</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div
 style="font-family: arial, helvetica, sans-serif; font-size: 10pt; "><span class="Apple-style-span" style="color: black; ">&gt;&nbsp;</span><font class="Apple-style-span" color="#6000BF">how ? I tried but I failed I don't know how to run the program, because in this case I will run it with Java not with mpiexec...</font></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br>Otherwise there's the client-server approach: your MPI C++ system runs<br>as a whole separate server process, and the Java service code queries<br>the subservice thru tcp socket, RPC, or even something WS-ish if you<br>embed a small HTTP server and in your C++ code.</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="font-family: arial, helvetica, sans-serif; font-size: 10pt; "><span
 class="Apple-style-span" style="color: black; ">&gt;&nbsp;</span><font class="Apple-style-span" color="#0000FF">I was thinking about this solution but I wanted to know if there is any APIs or not....</font><br><br>(You'd have to see what to do about potentially overlapping requests,<br>but if the main Java WS allows them, that'd be something to consider<br>regardless of the approach.)<br><br>For a mere proof-of-concept hack, you could just execute mpiexec from<br>Java as a separate process using something like Runtime.exec().</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="font-family: arial, helvetica, sans-serif; font-size: 10pt; "><span class="Apple-style-span" style="color: black; ">&gt;&nbsp;</span><font class="Apple-style-span" color="#0000FF">If I used&nbsp;Runtime.exec(), how will I pass the user requests to the library ?</font></div><div style="color: black; font-family: arial,
 helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">It seems that there no solution except the&nbsp;client-server approach; connecting HTTP and C++.</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">&nbsp;I think I will work with it.</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">If you you have any other ideas, please let me know.</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; ">Thanks and Regards,</div><div style="color: black; font-family:
 arial, helvetica, sans-serif; font-size: 10pt; ">Hisham</div><div style="color: black; font-family: arial, helvetica, sans-serif; font-size: 10pt; "><br></div></div><div><br></div><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><br><div style="font-family:arial, helvetica, sans-serif;font-size:13px"><font size="2" face="Tahoma"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> Nicolas Rosner &lt;nrosner@gmail.com&gt;<br><b><span style="font-weight: bold;">To:</span></b> mpich-discuss@mcs.anl.gov<br><b><span style="font-weight: bold;">Cc:</span></b> Hisham Adel &lt;hosham2004@yahoo.com&gt;<br><b><span style="font-weight: bold;">Sent:</span></b> Wed, March 16, 2011 11:49:14 PM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [mpich-discuss] Connect MPI application to a Web service<br></font><br>
There might be some sort of API for this, but I'll let someone else<br>answer that part, and throw in a few alternative ideas<br>instead/meanwhile:<br><br><br>&gt; I don't want to run mpiexec for each client request. I want to run mpiexec only one time, then keep the program running waiting for other clients requests.<br><br>OK, but does that assume eternal life in perfect health of both the<br>external process and your app's own interface to it? In a server<br>context I'd consider relaxing the "only one time" design to something<br>closer to "not too often". Enabling the system to be self-healing in<br>this aspect adds complexity, but depending on the case could be well<br>worth its cost in robustness.<br><br><br>&gt; For the sequential version [..] JNI.<br><br>So in this case your app doesn't spawn a process -- your seq C++<br>subsystem isn't a program, but a shared library. The Java code<br>triggers a call to a native C++ function directly; the main()
 entry<br>point is that of the `java' executable (possibly an app server or so).<br>Is that correct?<br><br><br>&gt; for the parallel version [..] I don't know how to<br>&gt; run the program in this case; I can't use mpiexec.<br><br>Well, you can, but not without spawning a separate process: as a<br>command line tool, mpiexec provides its own entry point. If you don't<br>mind this, you don't need JNI in the first place, but you possibly do.<br><br>If your main priority is to avoid any new processes, and/or using JNI<br>is mandatory by requirement, I can't think of much except what I<br>mentioned at the top (some API I'm not familiar with).<br><br>Otherwise there's the client-server approach: your MPI C++ system runs<br>as a whole separate server process, and the Java service code queries<br>the subservice thru tcp socket, RPC, or even something WS-ish if you<br>embed a small HTTP server and in your C++ code.<br><br>(You'd have to see what to do about
 potentially overlapping requests,<br>but if the main Java WS allows them, that'd be something to consider<br>regardless of the approach.)<br><br>For a mere proof-of-concept hack, you could just execute mpiexec from<br>Java as a separate process using something like Runtime.exec().<br><br><br>Hope this helps,<br><br>Nicolás<br></div></div><div style="position:fixed"></div>


</div><br>







      </body></html>