Author: thimel Date: 2006-08-31 17:12:15 +0000 (Thu, 31 Aug 2006) New Revision: 5 Modified: doc/etude.rst doc/installation.rst src/java/org/codelutin/j2r/RProxy.java src/java/org/codelutin/j2r/net/RNetEngine.java src/test/org/codelutin/j2r/NetTest.java Log: - Modification de la detection des params reseau : net://ip:port - maj doc Modified: doc/etude.rst =================================================================== --- doc/etude.rst 2006-08-31 07:57:43 UTC (rev 4) +++ doc/etude.rst 2006-08-31 17:12:15 UTC (rev 5) @@ -12,14 +12,15 @@ Heureusement, R est un projet tr�s modulaire et permet par le biais d'extensions d'ouvrir son moteur � d'autres appplications. En Java, deux possibilit�s s'offrent � nous : - - Acc�s par le r�seau : L'application envoie des requ�tes par le r�seau � une - extension de R faisant office de serveur, laquelle renvoie par la suite les - r�sultats obtenus. - - Acc�s par une librairie JNI : Il s'agit d'�crire du code en un langage autre - que Java qui sera compil� et exc�cut� par la machine plut�t qu'interpr�t�. - Gr�ce � JNI, il est ensuite possible d'appeler ce code depuis une application - Java. +- Acc�s par le r�seau : L'application envoie des requ�tes par le r�seau � une + extension de R faisant office de serveur, laquelle renvoie par la suite les + r�sultats obtenus. +- Acc�s par une librairie JNI : Il s'agit d'�crire du code en un langage autre + que Java qui sera compil� et exc�cut� par la machine plut�t qu'interpr�t�. + Gr�ce � JNI, il est ensuite possible d'appeler ce code depuis une application + Java. + Le pr�sent document va donc comparer ces deux solutions afin de d�terminer laquelle est la plus adapt�e. Afin d'effectuer une comparaison plus pertinente, ces solutions seront compar�es, lorsque c'est possible, � l'utilisation de R @@ -33,15 +34,15 @@ d�cision finale. Avant m�me de commencer, la nature m�me des solutions sugg�re certains r�sultats qu'il faudra v�rifier : - - Les temps de r�ponse obtenus en R pur seront inf�rieurs aux solutions r�seau - et JNI. Le contraire serait �tonnant dans la mesure o� l'utilisation de R pur - est la seule solution n'impliquant pas de technologie tierce. - - Les appels JNI devraient prendre moins de temps que les appels r�seau. - L'utilisation des interfaces r�seau est reconnue est informatique pour �tre - un point qui ralenti souvent les applications. - - Certains calculs simples effectu�s en Java pur pourraient parfois s'av�rer - plus rapide. Cependant, des calculs plus complexes comme des calculs - matriciels devraient faire ressortir l'avantage de R. +- Les temps de r�ponse obtenus en R pur seront inf�rieurs aux solutions r�seau + et JNI. Le contraire serait �tonnant dans la mesure o� l'utilisation de R pur + est la seule solution n'impliquant pas de technologie tierce. +- Les appels JNI devraient prendre moins de temps que les appels r�seau. + L'utilisation des interfaces r�seau est reconnue est informatique pour �tre + un point qui ralenti souvent les applications. +- Certains calculs simples effectu�s en Java pur pourraient parfois s'av�rer + plus rapide. Cependant, des calculs plus complexes comme des calculs + matriciels devraient faire ressortir l'avantage de R. Consid�rations techniques @@ -55,9 +56,9 @@ possibilit� de recevoir et traiter des requ�tes TCP/IP, le rendant ainsi accessible � tous types de langages. - - Avantages : R non n�cessaire sur la machine cliente, d�l�gation des calculs � - une machine tierce, appli 100% portable - - Inconv�nient : Rserve � installer sur le serveur +- Avantages : R non n�cessaire sur la machine cliente, d�l�gation des calculs � + une machine tierce, appli 100% portable +- Inconv�nient : Rserve � installer sur le serveur JNI --- @@ -65,10 +66,10 @@ L'utilisation de JNI implique la cr�ation d'une librairie d�pendante du syst�me. On perd donc un peu de la portabilit� du Java. - - Avantages : Installation basique de R - - Inconv�nients : M�me machine, n�cessite des param�tres de d�marrage de - l'application Java, l'application Java n'est plus 100% portable car - cr�ation/compilation d'une librairie n�cessaire. +- Avantages : Installation basique de R +- Inconv�nients : M�me machine, n�cessite des param�tres de d�marrage de + l'application Java, l'application Java n'est plus 100% portable car + cr�ation/compilation d'une librairie n�cessaire. D�roulement (protocole) des tests @@ -79,18 +80,20 @@ conditions, s'il y en a, dans lesquelles telle ou telle solution est meilleure. Deux types de tests ont �t� effectu�s. - - Le premier consiste � envoyer de tr�s petits calculs � R et ce beaucoup de - fois de suite. On obtient donc une moyenne pour chacune des solutions ce qui - permettra d'�valuer le co�t de chaque m�thode. - - Le second se base sur la quantit� de donn�es � v�hiculer. Il s'agit donc l� - de calculs plus long mais surtout g�n�rant un plus gros volume de donn�es. - Plusieurs mesures seront effectu�es avec des tailles croissantes afin - d'�valuer l'impact de l'augmentation volum�trique. - - Le dernier test est surtout informatif et ne fera ressortir que le temps - n�cessaire � initialiser chacunes des solutions �tudi�es. +- Le premier consiste � envoyer de tr�s petits calculs � R et ce beaucoup de + fois de suite. On obtient donc une moyenne pour chacune des solutions ce qui + permettra d'�valuer le co�t de chaque m�thode. +- Le second se base sur la quantit� de donn�es � v�hiculer. Il s'agit donc l� + de calculs plus long mais surtout g�n�rant un plus gros volume de donn�es. + Plusieurs mesures seront effectu�es avec des tailles croissantes afin + d'�valuer l'impact de l'augmentation volum�trique. +- Le dernier test est surtout informatif et ne fera ressortir que le temps + n�cessaire � initialiser chacunes des solutions �tudi�es. + A noter que : - De fa�on � ne pas trop laisser libre cours aux optimisations des diff�rentes + +De fa�on � ne pas trop laisser libre cours aux optimisations des diff�rentes plateformes, les calculs r�p�t�s sont volontairement changeants au sein d'un m�me test (ils restent n�anmoins identiques entre les tests). Modified: doc/installation.rst =================================================================== --- doc/installation.rst 2006-08-31 07:57:43 UTC (rev 4) +++ doc/installation.rst 2006-08-31 17:12:15 UTC (rev 5) @@ -0,0 +1,97 @@ +Le pr�sent document a pour but de faciliter les diff�rentes installations n�cessaires en vue d'utiliser la librairie LutinJ2R. + +.. contents:: + +Installation +============ + +Premi�rement il est n�cessaire d'avoir R d'install� sur la machine qui devra effectuer les calculs R. Chaque solution a des particularit�s. + +Solution r�seau +--------------- + +Il est possible d'utiliser R en local (machine locale) ou de confier les calculs � une tierce machine (machine distante). + +Que ce soit sur la machine locale ou distante, il faut installer R. Le plus simple est de consulter la documentation en ligne de R : + http://wiki.r-project.org/rwiki/doku.php?id=getting-started:installation:pac... + +La proc�dure suivante diff�re selon la plateforme : + +Sous Linux +~~~~~~~~~~ + +Il faut installer le serveur qui va r�ceptionner et traiter les requ�tes TCP/IP. Dans l'ordre, il faut : + - T�l�charger les sources de la version 0.4-3 (http://rosuda.org/Rserve/dist/Rserve_0.4-3.tar.gz) ou � defaut la derni�re disponible � l'adresse ; + - Se logguer en root ; + - Exc�cuter la commande "R CMD INSTALL Rserve_0.4-3.tar.gz". + +A noter que l'�tape d'installation requiert un compilateur C/C++. Une intervention suppl�mentaire est peut-�tre donc n�cessaire ! + +Sous Windows +~~~~~~~~~~~~ + +Les �tapes � suivre : + - T�l�charger la version 0.4-3 pr�compil�e (http://rosuda.org/Rserve/dist/w32bin/0.4-3/2.3.1/Rserve.exe) ou � d�faut la derni�re disponible � l'adresse http://rosuda.org/Rserve/dist/rserve-win.html ; + - Il faut ensuite copier le fichier t�l�charg� dans le dossier 'bin' de l'installation de R. Par d�faut pour la version 2.3.1 de R, ce dossier est "C:\Program Files\R\R-2.3.1\bin". + +Solution JNI +------------ + +Il faut avant tout que R soit install�. Le plus simple est de consulter la documentation en ligne de R : + http://wiki.r-project.org/rwiki/doku.php?id=getting-started:installation:pac... + +Concr�tement R est pr�t. +Cependant, si la plateforme ou l'architecture de la machine est particuli�re, il reste � compiler les sources natives (non-Java) du projet et cr�er une librairie adapt�e. + +Heureusement, la proc�dure est simple + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + +Configuration +============= + +Solution r�seau +--------------- + +Il n'y a de configuration � faire que s'il s'agit d'une utilisation sur une machine distante. Dans le cas contraire, la configuration de la solution r�seau est termin�e. + +Dans le cas d'une machine distante, il faut autoriser les connections entrantes. Par d�faut, Rserve rejette ces connections. + +Pour contrer cela, il faut �diter un fichier de configuration. + +Sous Linux, il s'agit du fichier + /etc/Rserv.conf +alors que sous Windows, il s'agit du fichier + Rserv.cfg - qui doit se trouver au m�me endroit que l'exc�cutable Rserve.exe. (Par d�faut : C:\Program Files\R\R-2.3.1\bin) + +Si ce fichier n'existe pas, il faut le cr�er et ajouter la ligne suivante : + remote enable + +Solution JNI +------------ + +La librairie compil�e ou obtenue � l'�tape pr�c�dente doit �tre plac�e au bon endroit sur le syst�me pour pouvoir �tre utilis�e. + +Quelque soit la plateforme, il faut positionner des variables d'environnement. + +- R_HOME : doit pointer sur le dossier d'installation de R (soit /usr/lib/R sous Linux ou C:\Program Files\R\R-2.3.1 sous Windows ou ...) +- LD_LIBRARY_PATH : doit pointer sur le dossier lib contenu dans R_HOME (soit R_HOME/lib/ sous Linux ou R_HOME\lib sous Windows ou ...) + +Il faut ensuite copier la librairie (libjri.so ou jri.dll ou ...) dans le dossier LD_LIBRARY_PATH + +D�marrage +========= + +Cette �tape n'est n�cessaire que pour la solution r�seau. + +Solution r�seau +--------------- + +La derni�re �tape de pr�paration est le lancement de Rserve. + +Sous Linux, tapez la commande : + R CMD Rserve + +Sous Windows, double-cliquez sur : + Rserve.exe dans le dossier d'installation de R (par d�faut : C:\Program Files\R\R-2.3.1\bin) Modified: src/java/org/codelutin/j2r/RProxy.java =================================================================== --- src/java/org/codelutin/j2r/RProxy.java 2006-08-31 07:57:43 UTC (rev 4) +++ src/java/org/codelutin/j2r/RProxy.java 2006-08-31 17:12:15 UTC (rev 5) @@ -46,6 +46,8 @@ * <li><code>-DR.type=jni</code></li> * <li><code>-DR.type=...</code></li> * </ul> + * Il est possible de parametrer la solution network, pour cela, voir la + * documentation de {@link org.codelutin.j2r.net.RNetEngine} */ public class RProxy implements REngine { @@ -59,7 +61,10 @@ private boolean init(String RType) { boolean initSucceded = false; - if ("net".equalsIgnoreCase(RType)) { + if (RType == null) { + RType = "net"; + } + if (RType.startsWith("net")) { initSucceded = initOnNet(); if (!initSucceded) { if (log.isErrorEnabled()) { Modified: src/java/org/codelutin/j2r/net/RNetEngine.java =================================================================== --- src/java/org/codelutin/j2r/net/RNetEngine.java 2006-08-31 07:57:43 UTC (rev 4) +++ src/java/org/codelutin/j2r/net/RNetEngine.java 2006-08-31 17:12:15 UTC (rev 5) @@ -41,7 +41,14 @@ import org.rosuda.JRclient.Rconnection; /** + * Cette classe represente le moteur reseau pour acceder a R. Par defaut, il + * essaye de se connecter a l'adresse 127.0.0.1 sur le port 6311. Cependant, il + * est possible de le parametrer. * + * Il suffit de remplacer l'option de lancement <code>-DR.type=net</code> par + * <code>-DR.type=net://192.168.99.122:6312</code> ou 192.168.99.122 est + * l'adresse de la machine distante et 6312 le port sur lequel tourne le + * serveur. */ public class RNetEngine implements REngine { @@ -55,19 +62,29 @@ * @see org.codelutin.j2r.REngine#init() */ public boolean init() { - String host = System.getProperty("R.net.host", "127.0.0.1"); - return init(host); - } - - public boolean init(String host) { - String portAsString = System.getProperty("R.net.port", ""+DEFAULT_PORT); + String typeProp = System.getProperty("R.type", "net"); + int urlPos = typeProp.indexOf("net://"); + String host = "127.0.0.1"; + String portAsString = null; + if (urlPos != -1) { + String url = typeProp.substring(urlPos + 6); + int commaPos = url.indexOf(":"); + if (commaPos != -1) { + host = url.substring(0, commaPos); + portAsString = url.substring(commaPos + 1); + } else { + host = url; + } + } int port = DEFAULT_PORT; - try { - port = Integer.parseInt(portAsString); - } catch (NumberFormatException nfe) { - if (log.isWarnEnabled()) { - log.warn("Bad port format " + portAsString + ", using default" + - " port : " + port); + if (portAsString != null) { + try { + port = Integer.parseInt(portAsString); + } catch (NumberFormatException nfe) { + if (log.isWarnEnabled()) { + log.warn("Bad port format " + portAsString + ", using default" + + " port : " + port); + } } } return init(host, port); Modified: src/test/org/codelutin/j2r/NetTest.java =================================================================== --- src/test/org/codelutin/j2r/NetTest.java 2006-08-31 07:57:43 UTC (rev 4) +++ src/test/org/codelutin/j2r/NetTest.java 2006-08-31 17:12:15 UTC (rev 5) @@ -55,9 +55,7 @@ protected void setUp() throws Exception { LutinTimer init = new LutinTimer(); init.startTiming(); - System.setProperty("R.type", "net"); -// System.setProperty("R.net.host", "monitor"); -// System.setProperty("R.net.port", "6311"); +// System.setProperty("R.type", "net://192.168.99.122:6312"); if (engine == null) { engine = new RProxy(); }