Você está na página 1de 32

Grenoble INP Genie Industriel G-SCOP Universit Joseph Fourier CNRS

Stages dexcellence L2
Mathmatiques Informatiques

Contribution la ralisation dune plateforme WEB pour loptimisation en conception de produit.


Michal LAFRASSE, tudiant en L2 mathmatiques et informatiques

Maitres de stages : Jean Bigeon Directeur de recherche Jean.bigeon@grenoble-inp.fr TEL :04 76 57 49 04 Kahald Hadj-Hamou Enseignant-chercheur-maitre confrence khaled.hadj-hamou@g-scop.inpg.fr TEL :04 76 57 48 11

Sommaire
Introduction :...................................................3 Le langage Matlab et sa transformation en java. .................................................................3 Exemple concret :........................................3 Appelle dun programme Matlab au sein dun programme java...............................................5 JAMAL .........................................................6 MatlabControl ...............................................6 Conclusion, et voies dvolutions .................6 Conclusion et avis personnel...........................7 Avis personnel...............................................7 ANNEXE .............Erreur ! Signet non dfini.

Introduction :
Le sujet de mon stage portait sur la mise en place dune interface web pour la gestion de produit. Il sagissait de trouver une mthode de dveloppement dune interface web pour pouvoir utiliser diffrent algorithme crit dans diffrents langages. Jai commenc par ltude du langage matlab et cherch une mthode afin de transform un programme dans ce langage en un programme java (premire partie de mon rapport). Dans un second temps, il ma tait demand dappeler au sein de java, un programme ecrit en Matlab (deuxime partie de mon rapport). Pour conclure ce rapport, je parlerais de mon ressentis, de ce que sa ma apporter.

Le langage Matlab et sa transformation en java.


Le langage MAtlab (qui mtait avant ce stage) inconnu, est trs utilis dans le monde de lindustrie. Il permet de faire des choses assez simplement, mais est surtout trs bien document (ce que je vais contredire par la suite). Il mtait demand de traduire un algorithme Matlab en java, puis ensuite de le transformer en servlet pour pouvoir lutiliser sur le web. Lutilisation dun servlet a t la seule voie possible car le programme (transform en JAVA) va sexcuter sur le serveur et le client (personne qui utilise le programme) ne verra que la rponse. Cela permet donc nimporte qui dutiliser un programme Matlab sans avoir Matlab sur son ordinateur.

Pour traduire les codes Matlab en java, il ma donc fallut dcouvrir matlab (le langage, mais aussi la suite de logiciel associ). Et cest la que les problmes ont commenc. En effet, la documentation est trs vaste, trs dtaills, mais touche uniquement ou presque tout ce qui est souvent utilis (la programmation, la gestion de tableau, graphique, passage de parametre ). Mais quand cela touche un point comme la transformation en servlet, la documentation est trs dure a trouv, et nest souvent pas officiel. Petit a petit jai trouv differente mthode, que jai test par le biais dexemple concret. Jai ainsi trouv une extension de matlab permettant de faire exactement se que je cherchez : Matlab JA Builder. Malgrs cette extension, nous nous sommes rendu compte que ce que lon cherchez a faire ntait pas possible pour le moment. Pour prsenter cette impossibilit, je prefere le montrer par un exemple.

Exemple concret :

Pour commencer, ce quil faut savoir cest que tous les programmes Matlab ne peuvent pas tre traduits en Servlet. 3

Il faut en effet que chaque script Matlab soit transform en fonction. De plus, comme on peut le voir dans le code de getMagicWebFigure.m , si lon souhaite tracer des graphiques, il faut utiliser la fonction webfigure, afin de transformer notre graphique en figure interactive sur le web. Je passe rapidement sur le code matlab, car ce rapport nest pas l pour apprendre le matlab.

function figureOutput = getMagicWebFigure(x) f = figure; magicOutput = magic(x); surf(magicOutput); set(gcf,'Color',[1,1,1]) figureOutput = webfigure(f); close(f); end

Lun des algorithme que je devais essay de traduire si cette mthode fonctionn, tait un algorithme doptimisation. Il devait permetre de choisir la fonction doptimisation souhait ainsi que les parametres. Cest a ce niveau la que lon est limit. En effet, si lon souhaite afficher un graphique reprsentant une fonction, il faut que la fonction soit inscrite directement dans le code Matlab. Comme ceci A=1 ; B=2 ; X=0 :0.1 :10 ; Y=A.*x+B ; Plot(x,y) ; En effet si on lui passe en paramtre le A, cela ne fonctionnera pas. Mme si lon dclare une variable interne qui prend pour valeur le paramtre:
function figureOutput = getMagicWebFigure(nb) f = figure; a=nb; b=4;

x=0:10; y=a.*x+b; surf(magicOutput); set(gcf,'Color',[1,1,1]) figureOutput = webfigure(f); close(f); end

Ce probleme nous a donc fait abandonner cette direction, car cela limit grandement les possibilits. Malgr cela, jai crit un tutoriel pour mes maitres de stage expliquant la mise en place dun serveur web, des extensions java ncessaire, ainsi que lexplication de ce qui ne fonctionne pas. En effet, dans les annes venir, et les volutions du programme Matlab, ce qui nous empchait dutilis la solution trouv ci-dessus, nexistera plus, et pourra donc tre utilis.

Nous avons, a partir de ce moment la, dcid de changer de voit de recherche. Au lieu de partir dun programme Matlab vers un programme java, on sest dit que si on pouvait appeler un programme Matlab au sein dun programme java, il serait galement possible dappeler se programme par le biais dune Servlet et mme peut tre dune applet. Cest ce que je vais prsenter dans la deuxime grande partie de ce rapport.

Appelle dun programme Matlab au sein dun programme java.

Cette partie, que je nai pu compltement achever, a tait la plus dure en terme de recherche. Bien quen 2006, un programme java ait t intgr matlab afin de permettre de pouvoir appeler un programme matlab dans un programme java, lensemble de la documentation sur le fonctionnement de celui-ci fut supprim de matlab. Mais la fonctionnalit est toujours prsente. Il ma donc fallu parcourir des centaines de sites, avant de commencer a trouv des piste. Finalement, jai pu trouver deux solutions possibles, complmentaires, et qui rpondent exactement lattente de mes maitres de stages et de ce qui mavait tait fix.

JAMAL
La premire solution repose sur un package java open source (jamal). Jamal est une archive permettant les liens entre un programme java et un programme Matlab. Il est possible en utilisant Jamal, dappeler un programme ou une fonction Matlab lintrieur dun programme java. En revanche, les paramtres envoys Matlab doivent uniquement se faire sous forme dun tableau. Les rsultats renvoys sont galement sous forme de tableau.

Lutilit de Jamal est base sur le fait quun programmeur java peut crer toute linterface graphique en java, et ensuite traiter les rsultats reu dans un tableau. En effet, il ny a pas besoin de connaitre la GUI sous Matlab. Cette premire mthode permet donc lappel de matlab au sein dun programme java, mais sera plutt utilis par les personnes plus performante en java, car tout ce qui touche linterface graphique, la demande de paramtre, lappel de fonction annexe ou tout autre chose, devra tre fait en java. Matlab sera uniquement utilis pour raliser les scripts de bases.

MatlabControl
Je vais maintenant prsenter le fonctionnement de Matlabcontrol. Matlabcontrol, mme si il permet dappeler galement Matlab au sein dun programme, permet dappeler nimporte quel programme Matlab. Contrairement jamal, on nest pas oblig de passer par des tableaux, que se soit pour lenvoi de paramtres, ou pour leurs retours. On peut donc, grce cette mthode, coder une interface graphique, tracer des figures, faire des formulaires sous Matlab, et lors de lappel, ils seront excuts par Matlab, et non par java. Cette mthode sera prfr des personnes plus a laise avec Matlab et surtout pour lutilisation de programme dj ralis en Matlab. Ceci vite donc leurs rcritures ou leurs adaptations

Conclusion, et voies dvolutions


Les deux mthodes sont complmentaires, car jamal, permet de raliser linterface graphique en java et Matlabcontrol en Matlab. Le sujet initial tait de trouver une mthode afin de pouvoir utilis des programmes Matlab sur le web. Cest deux mthodes sont un trs bon dbut de piste. En effet, il faut pour continuer lavancement de ce projet, transformer les diffrents programmes java en applet, afin de pouvoir les utiliser sur un site, par lintermdiaire dun serveur Matlab. 6

Matlabcontrol nayant pas pu tre tudi en dtails (beaucoup trop long).

Conclusion et avis personnel


Jai, par le biais de se rapport, prsent les diffrentes base afin de pouvoir utilis un script Maltab au sein dune application web. La transformation en application web na pas tait exprim, car mon stage tait uniquement bas sur la recherche de pistes, afin que si une solution tait possible, le service informatique, ou un autres stagiaire puisse prendre la suite.

Avis personnel
Lobjectif du stage initial tait la dcouvert du monde de la recherche ainsi que la contribution la ralisation dune plateforme WEB pour loptimisation en conception de produit, je pense que lobjectif a tait atteint. En effet, malgr la prsence de mes deux maitres de stage, jtais libre dans le choix de mes recherches. Je devais uniquement trouver une solution appropri, simple et faire un tutoriel afin dexpliquer le choix, la mise en place de la solution, ainsi que son utilisation.
Ce stage ma permis dapprendre diffrents langage, diffrents moyen de recherche (forum, blog, documentation officiel, article), pour arriver une solution viable et volutive. Jai grandement apprci la prsence de mes deux maitres de stages, toujours a lcoute, a me consacrer de leur temps pour des explications sur le sujet, ou mme sur des sujets a par, comme mon orientation, les dbouchs. Malgr leur emploi du temps charg, ils ont pu tre prsent et se rendre disponible. En revanche plusieurs critique sont a relev, et permettrons surement de meilleur condition dans les annes a venir. La premire est le fait que travailler seul (malgr laide du ou des maitres de stage) empche dapprendre le travail en quipe, la rpartition des taches. De plus, le travail en quipe est un domaine qui ne nous est pas enseign a luniversit, ou peu (que lors de petit projet, ou de tp). La deuxime critique, qui provient des deux tudiants prsent dans le mme labo que moi, mes deux maitres de stage ainsi que moi-mme, est le fait que le stage dune dure de 2 mois, ne doit pas dpasser 120 heures. Le fait que cela ne doit pas dpasser 120 heures nous a tait signaler dans notre contrat de travail, reu 2 semaine avant la fin du stage. Nous tions dj au double du temps (35 heures par semaine). Nous avons donc pens quil faudrait soit permettre deux mois a 35 heures par semaine, soit transformer ces deux mois, en un seul mois a 120 heures.

Vous pourrez trouver en annexe les deux tutoriels que jai faits pour le laboratoire. Malgr que cela dpasse largement les 15 pages, mes maitres de stages mon tout de mme conseiller de vous les remettre.

Source : http://jamal.khadkevich.org/about.html https://github.com/hutm/JAMAL https://code.google.com/p/Matlabcontrol/ http://www.cs.virginia.edu/~whitehouse/Matlab/MatlabControl.java http://undocumentedMatlab.com/blog/jmi-wrapper-local-Matlabcontrol-part-2/ http://www.slideshare.net/Matlabcontent/Matlab-control-statements http://www.mathworks.fr/Matlabcentral/newsreader/view_thread/279442

Un laboratoire pluridisciplinaire de rfrence pour rpondre aux dfis scientifiques poss par les mutations du monde industriel allant de la conception des produits la gestion des systmes de production sappuyant sur de fortes comptences en optimisation Enjeux socitaux
Mondialisation : Acclration des mouvements de
dlocalisation qui concernent les activits de production et, ce qui est plus nouveau, les activits de conception.

Dveloppement des services : les frontires entre industrie


et service sestompent. De mme la notion de produit volue (produits tendus, produits-services, )

Capacit des entreprises innover : croissance durable


et performance conomique des entreprises se jouent sur la capacit des entreprises innover sur les produits, les services et les organisations industrielles.

Dveloppement durable : la question interroge les modles


et pratiques de la conception de produits (co-conception, recyclage,..) mais aussi les modles de production (limites du Juste Temps, logistique inverse,).

Dfis scientifiques
Incertitude et instabilit : l'exigence et la versatilit des
consommateurs, limprvisibilit de la concurrence imposent de nouvelles approches scientifiques en optimisation, gestion des systmes et conception.

Collaboration dacteurs distribus : des acteurs distribus


gographiquement, avec des mtiers et des cultures diffrents doivent collaborer pour rpondre aux besoins des clients. Cette complexit accrue interroge la recherche en conception produit ou gestion des systmes. Des recherches amont en optimisation : la conception et la gestion optimise des systmes de production ncessitent des outils mathmatiques puissants. Il est indispensable de mener des travaux amont pour aider la cration doutils performants en optimisation.

Ingnierie des connaissances : lexternalisation, la coconception, le turn-over, imposent aux entreprises la mise en place d'une vritable ingnierie des connaissances. Des modles et des outils doivent tre dvelopps qui impliquent une approche multi disciplinaire, en particulier SPI/STIC/SHS.

Produire

Ple Optimisation et Systmes de Production : OSP


Concevoir - Optimisation Combinatoire - Recherche Oprationnelle pour les Systmes de Prod. - Gestion et Conduite des Systmes de Production Distribuer

Ple Conception Intgre : CI


- Conception Collaborative - Conception Produit-Process - Systmes dInformation et Reprsentations multiples du produit

Traiter en Fin de vie


Rayonnement international - Pilotage du Rseau d'Excellence VRL-KCiP (24 membres, 15 pays) transform en association EMIRAcle - Coordination de linfrastructure VISIONAIR - Partenaire de la plateforme europenne Mecafuture - Implication dans : projets europens, PHC, projets internationaux Collaborations industrielles : Airbus, Alcan, Antcim, Arcelor, Caterpillar, Dassault Aviation, DS, EADS CCR, EADS Allemagne, Essilor, Eurocopter, Hager, ILOG, PCO, Pechiney, PSA, Renault, Schneider, Siemens, SLN, ST micro, ZF., Relations contractuelles : - Contrats industriels et institutionnels : rgion, FCE, ANR, Europe - 1 M de contrats en moyenne par an

Utiliser
Le laboratoire et les formations - Ense3, Gnie Industriel, ENSIMAG, UFR de Mcanique, UFR IMAG, Polytech, IUT - Ecoles Doctorales : I-MEP2, MSTII, EEATS Quelques chiffres - Permanents chercheurs : 59 - Personnel administratifs et technique : 14 - Doctorants : environ 60 - Publications : 2,7 publis internationales /an/pers. Articles internationaux : 50 60 /an Actes de confrences int. : 70 80 / an Thses et HDR : 15 18 / an

Laboratoire G-SCOP 46, avenue Flix Viallet 38031 GRENOBLE Cedex 1 Tl. : +33 4 76 57 43 20 Fax : + 33 4 76 57 46 95 E-mail : g-scop@g-scop.fr

http://www.g-scop.fr

ANNEXE

Utilisation de programme Matlab dans Java.


1) Utilisation de Jamal.
Jamal est une archive permettant les liens entre un programme java et un programme Matlab. Il est possible en utilisant Jamal, dappeler un programme ou une fonction Matlab lintrieur dun programme java. En revanche, les paramtres envoys Matlab doivent uniquement se faire sous forme dun tableau. Les rsultats renvoys sont galement sous forme de tableau. Lutilit de Jamal est base sur le fait quun programmeur java peut crer toute linterface graphique en java, et ensuite traiter les rsultats reu dans un tableau. En effet, il ny a pas besoin de connaitre la GUI sous Matlab. Etudions un exemple: Nous allons illustrer son utilisation par le biais dun exemple de lutilisation de la fonction sum de Matlab. Cela reviendrait au mme en utilisant un programme cre par nos soins. Voici le code java que nous allons utiliser :
/ici on importe les fichiers jamal permettant de faire le lien entre java et Matlab/ import com.jamal.*; import com.jamal.client.MatlabClient; public class Run0 { public static void main(String[] args) { try { /ici on se connecte au client Matlab. Il suffit de donner le lien pointant vers lexcutable de Matlab. On peut grce a cela ladapter facilement pour un serveur, il suffira de point Matlab.exe sur le serveur/ MatlabClient MatlabClient = new MatlabClient( MatlabCaller.HOST_ADDRESS,"C:\\Program Files\\MATLAB\\R2011b\\bin\\Matlab.exe", 40); /on passe en premier un tableau dans lequel se trouve tous les paramtres ncessaires la fonction (ici la fonction sum)/ Object[] inArgs = new Object[1]; inArgs[0] = new int[] { 1, 2, 3, 4 }; /on appelle la fonction Matlab en lui passant en paramtres le nom de la fonction sous forme de chaine de caractre, le tableau des paramtres et 1 si on attend une rponse, 0 sinon/ Object[] outputArgs = MatlabClient.executeMatlabFunction("sum", inArgs, 1); double[] result = (double[]) outputArgs[0]; /on affiche le rsultat/ System.out.println("The sum 1+2+3+4=" + result[0]); MatlabClient.shutDownServer(); } catch (JamalException e) {

e.printStackTrace(); } } }

Maintenant que nous avons ce code (dans eclipse), nous devons lui dire ou il peut trouver le fichier jamal.jar. Pour cela, nous devons tout dabord tlcharger le fichier jar : http://jamal.khadkevich.org/download.html Cliquez sur Download the latest stable version . Maintenant que nous avons tlcharg le fichier jar, nous allons lintgrer au projet. Pour cela rendez vous sur eclipse, cliquez droit sur le nom de votre projet (le miens sappelle jamal), puis sur proprits.

Une fentre comme celle-ci souvre, cliquez sur java build path puis sur Add External jar , puis pointez votre fichier jar que vous venez de telecharger, puis cliquez sur ouvrir.

Voila, vous pouvez maintenant excuter votre programme java, vous devez avoir ceci daffich dans la console dclipse :

Votre programme fonctionne correctement. Pour ce qui est de la licence dutilisation de Matlab, vous pourrez trouver tous ce quil faut sur le lien suivant : https://github.com/hutm/JAMAL/blob/master/LICENSE.txt En rsum jamal permet dappeler un programme Matlab au sein dun programme java, mais ceci que par le biais de tableau (1 dimension ou 2). Tout ce qui sera affichage graphique ou autre entrainera une erreur lors de lexcution, et sera obligatoirement a ralis directement dans le code java. Un autre point et que par cette mthode, Matlab ne souvre pas rellement, il souvre uniquement pour excuter ce quon lui demande mais reste en fond de tache. Toutes les informations sur Jamal peuvent tre retrouver sur ce site : http://jamal.khadkevich.org/about.html Ou celui-ci : https://github.com/hutm/JAMAL

2) Matlab control
Je vais maintenant prsenter le fonctionnement de Matlabcontrol. Cette partie na pas pu tre totalement parcourue par manque de temps. Matlabcontrol, mme si il permet dappeler galement Matlab au sein dun programme, permet dappeler nimporte quel programme Matlab. Contrairement jamal, on nest pas oblig de passer par des tableaux, que se soit pour lenvoi de paramtres, ou pour leurs retours. On peut donc, grce cette mthode, coder une interface graphique, tracer des figures, faire des formulaires sous Matlab, et lors de lappel, ils seront excuts par Matlab, et non par java. Cette mthode sera prfr des personnes plus a laise avec Matlab et surtout pour lutilisation de programme dj ralis en Matlab. Ceci vite donc leurs rcritures ou leurs adaptations. Pour commencer, je vais vous prsenter un exemple dutilisation afin de vous montrer ce dont il est possible de faire avec Matlabcontrol. Rendez vous sur le site suivant pour tlcharger le fichier Matlabcontrol et le dossier demo. https://code.google.com/p/Matlabcontrol/downloads/list Il faut tlcharger le fichier Matlabcontrol-4.0.0_src.zip. Au moment o jcris ce rapport, Matlabcontrol en est a sa version 4.0.0. Maintenant que vous avez fait ca. On va crer notre projet sous eclipse. Crez un dossier, avec le nom que vous voulez dans le workspace declipse, puis dcompresser larchive dedans. Mon dossier sappelle essai chez moi. Maintenant que cest fait, ouvrez eclipse et crez un nouveau projet :

Cliquer sur java project. La vous allez avoir une fentre qui va souvrir. Entrez le nom du dossier que vous avez cr afin de crer votre projet :

Maintenant votre projet est cr. Il va falloir ajouter au projet le fichier jmi.jar, afin que Matlabcontrol puisse fonctionner. Pour cela, cliquez droit sur le nom de votre projet, et faite proprit. Une fentre souvre, cliquez sur java build path , puis sur add externals jar :

Il va maintenant falloir trouver le fichier jmi.jar de Matlab. Il se trouve par dfaut dans le dossier : C:\Program Files\MATLAB\R2011b\uninstall\java\jar\jmi.jar Une fois slectionner cliquez sur ok. Voila, le projet peut maintenant tre cr pour voir toute ltendu des possibilits de Matlab control. Pour cela, nous allons utiliser un petit programme ralis en Matlab afin de pouvoir tester Matlabcontrol. Voici le programme :
function essai a = inputdlg({'a?','b?','c?'}); b= str2double(a); display(b); x=0:10; y=b(1).*x.*x+b(2).*x+b(3); plot(y); msgbox(int2str(b)); end

Cest un programme tout simple, il demande a lutilisateur trois paramtres (a,b et c) qui vont lui permettre ensuite de tracer la courbe y=a*x+b*x+c et dafficher dans une boite de dialogue, les paramtres a, b et c. Ce programme est un bon exemple, car il permet dillustrer le fonctionnent lors de lappelle dun programme possdant une interface graphique . Nous allons maintenant pouvoir excuter lexemple de Matlabcontrol. Excutez-le grce eclipse, vous devez avoir une fentre graphique qui va souvrir :

Pour commencer il faut cliquer sur connect. Connect permet de faire la liaison grce a Matlabcontrol, entre le programme Matlab et le notre programme java. Une fois que vous tes connect, vous pouvez excuter des fonctions, procedures ou programmes Matlab. Une chose que je nai pas eu le temps de trouver, et la faon pour que Matlab ne reste pas ouvert derrire, et quil se lance uniquement en mode consol, ou serveur. Le choix par dfaut correspond a void eval(string command) . Il permet dutiliser les procdures Matlab, c'est--dire des fonctions qui ne renvoient pas dlment. Ce qui est le cas de notre programme de test nomm essai. On va donc mettre dans la partie command, linstruction qui est essai puis cliquer sur invoke. Cela va ouvrir un formulaire de saisie de a, b et c. Une fois remplie, le graphique va safficher et une fentre de dialogue va nous redonner les paramtres rentrs. Maintenant essayons avec des fonctions dj cres sous Matlab. Nous devons cette fois ci changer de mode, et mettre object[] returningEval (String command , int nargout) car nous allons utiliser une fonction qui retourne une rponse. Essayons avec cette commande : sum([1,2,3]') Elle permet de faire la somme de 1, 2 et 3. Le formulaire nargout, permet de dire si le programme que lon appelle renvoi ou pas des paramtres. 0 pour le fait quil ne renvoi rien, 1 pour le renvoi dun lment, 2 pour le renvoi de deux lments et ainsi de suite. Ici nous allons utiliser la fonction sum, il faut donc laisser la valeur 1 dans le formulaire. Dans notre interface graphique, nous devons avoir cela qui saffiche :

Les autres modes disponibles sont des modes plus larges . Ils permettent en effet de faire plus de chose, et de ne pas avoir, ou presque, besoin de changer de mode selon le cas. Il suffit seulement de changer la partie nargout, les valeurs des paramtres Lensemble des donns que jai trouv pour Matlabcontrol peuvent tre retrouv sur les diffrents sites ci-dessous : https://code.google.com/p/Matlabcontrol/ http://www.cs.virginia.edu/~whitehouse/Matlab/MatlabControl.java http://undocumentedMatlab.com/blog/jmi-wrapper-local-Matlabcontrol-part-2/ http://www.slideshare.net/Matlabcontent/Matlab-control-statements http://www.mathworks.fr/Matlabcentral/newsreader/view_thread/279442

En rsum, mme si je nai pas eu le temps de faire tout le tour de Matlabcontrol, celui-ci permet de faire a peut prs la mme chose que jamal, mais est plus tourn vers les personnes spcialises en Matlab. En effet, il permet de raliser lensemble de linterface graphique, des formulaires, des courbes sur Matlab, et ensuite par un simple appelle en java, dafficher le tout.

3) Conclusion, et voies dvolutions :


Les deux mthodes sont complmentaires, car jamal, permet de raliser linterface graphique en java et Matlabcontrol en Matlab. Le sujet initial tait de trouver une mthode afin de pouvoir utilis des programmes Matlab sur le web. Cest deux mthodes sont un trs bon dbut de piste. En effet, il faut pour continuer lavancement de ce projet, transformer les diffrents programmes java en applet, afin de pouvoir les utiliser sur un site, par lintermdiaire dun serveur Matlab. Matlabcontrol nayant pas pu tre tudi en dtails (beaucoup trop long), il faudrait retravailler linterface graphique de lexemple. Les volutions possiblent serait, la reconnaissance automatique des paramtres, de leurs types, de la prsence dune fonction, dune procdure Les fonctions de base de Matlab, comme la somme, la multiplication pourrais tre directement inscrite dans linterface et pourrais tre slectionn directement dans une liste. Toutes ces volutions permettraient lutilisation des applets par nimporte qui, mme des personnes dont les comptences en informatiques sont faibles. Cela permettrait donc leurs utilisations dans nimporte quelle entreprise, et surtout le fait que les algorithmes ne seraient pas connus par leurs utilisateurs, puisque ceux-ci seront stocks sur un serveur distant, et le service web mis en place se contenteras uniquement dappelle de fonction, procdures ou mme programmes. Lutilisation dapplet java permettras aussi dutiliser nimporte quel algorithme car java peut appeler nimporte quel langage. Et Matlab pouvant tre maintenant utilis, cela couvre une plus grande surface de travail.

Exemple de cration dune Servlet partir dun programme Matlab.


Pr-requis : -Avoir le dernier JRE et JDK install sur la machine. Si ce nest pas le cas, les tlcharger ICI ; -Avoir Matlab dinstall (Matlab). -Avoir Matlab Java Builder (Matlab JA builder). -Avoir Matlab Compiler Runtime dinstall. Si ce nest pas le cas se rfrer la partie annexe. -Avoir TomCat 7.0 ou suprieur dinstall (cest le serveur local qui va nous permettre dutiliser du java). La procdure dinstallation se trouve en annexe.

Prsentation gnrale :
Le but initial de cette recherche tait de trouver une manire de pass dun programme sous matlab une application web afin que nimporte qui puisse utiliser ce programme. Lutilisation dun servlet a t la seule voie possible car le programme (transform en JAVA) va sexcuter sur le serveur et le client (personne qui utilise le programme) ne verra que la rponse. Cela permet donc nimporte qui dutiliser un programme Matlab sans avoir Matlab sur son ordinateur. Pour faire cela une extension de Matlab existe afin de transformer un programme Matlab en fichier jar : Matlab JA Builder.

Etude dun exemple.


Je vais vous prsenter lexemple du carr magique. Pour ceci nous allons tout dabord tlcharger lensemble des fichiers sources qui vont nous tre utiles. Rendez vous sur cette page : Magic web figure. Cliquez sur le lien de tlchargement. Maintenant que vous avez tlcharg le fichier zip, dcompressez-le. Nous allons maintenant tudier un peu tous les fichiers que nous avons notre disposition et voir leur utilit.

Les scripts Matlab :


Pour commencer, ce quil faut savoir cest que tous les programmes Matlab ne peuvent pas tre traduits en Servlet. Il faut en effet que chaque script Matlab soit transform en fonction. De plus, comme on peut le voir dans le code de getMagicWebFigure.m , si lon souhaite tracer des graphiques, il faut utiliser la fonction webfigure, afin de transformer notre graphique en figure interactive sur le web.
function figureOutput = getMagicWebFigure(x) f = figure; magicOutput = magic(x); surf(magicOutput);

set(gcf,'Color',[1,1,1]) figureOutput = webfigure(f); close(f); end

Cest a ce niveau la que lon est limit. En effet, si lon souhaite afficher un graphique reprsentant une fonction, il faut que la fonction soit inscrite directement dans le code Matlab. Comme ceci A=1 ; B=2 ; X=0 :0.1 :10 ; Y=A.*x+B ; Plot(x,y) ; En effet si on lui passe en paramtre le A, cela ne fonctionnera pas. Mme si lon dclare une variable interne qui prend pour valeur le paramtre:
function figureOutput = getMagicWebFigure(nb) f = figure; a=nb; b=4; x=0:10; y=a.*x+b; surf(magicOutput); set(gcf,'Color',[1,1,1]) figureOutput = webfigure(f); close(f); end

Cest la raison pour laquelle nous avons choisi de prendre une autre direction afin de rsoudre ce que lon cest fix.

ExamplesPage.jsp :
Cest lune des quatre pices maitresse dun Servlet. Cest la page qui soccupe dafficher ce que lon voit sur la page internet. Elle contient de lhtml, du java et du javascript. Cest sur cette page que lon retrouve les formulaires afin de faire passer des paramtres a notre programme, ainsi que lappel au programme (ou fonction).

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Calculation Services</title>

La partie qui suit soccupe de pr-remplir le formulaire avec une valeur prdfinie si rien nest rentr. <% String sizeStr = request.getParameter("size"); int size = 5; boolean sizeSet = false; if(sizeStr!=null && sizeStr.length()>0) { size = Integer.parseInt(sizeStr);

sizeSet = true; } %> La partie qui suit dclare les fichiers style utiliss. C'est--dire le fichier *.css utilis. Nous y reviendrons plus loin car la partie css nest pas obligatoire. <link rel="Stylesheet" type="text/css" media=all href="./StyleSheet.css" /> <link href="StyleSheet.css" rel="stylesheet" type="text/css" /> </head> <body> La partie qui suit contient le formulaire. <form method="get"> <div style="text-align: center"> <table width="760" cellpadding="0" cellspacing="0"> <tr> On a la possibilit de mettre une image den tte, ici header_bg.jpg <td><img src="header_bg.jpg" alt="Header Image Not Found" width="779" height="72" /></td> </tr> </table> <br /> <h1> Calculation Services</h1> Calculate Magic Square <br> Size: <input type="text" name="size" size="8" value="<%=size%>" > <br> <input type="submit" value="Calculate"> <br> <br /> La partie qui suit vrifie le bon contenue et le bon fonctionnement de lenvoi du formulaire <script type="text/javascript"> try { var objXHR = new XMLHttpRequest(); } catch (e) { try { var objXHR = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { var objXHR = new ActiveXObject('Microsoft.XMLHTTP');

} catch (e) { document.write('XMLHttpRequest not supported'); } } } Pour finir on appel le servlet MagicSquare en lui passant par lurl le contenue du formulaire (lensemble des paramtres ncessaires). objXHR.open('GET','MagicSquare?size=<%=size%>',false); objXHR.send(null); document.writeln(objXHR.responseText); </script> <br> </div> </form> </body> </html>

Web.xml :
Ce fichier est aussi lun des fichiers indispensable dans la ralisation dune Servlet. Remarque: il doit absolument possder le mme nom : web.xml. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>MagicSquareServlet</servlet-name> <servlet-class>MagicSquareServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MagicSquareServlet</servlet-name> <url-pattern>/MagicSquare</url-pattern> </servlet-mapping> <servlet> <servlet-name>WebFigures</servlet-name> <servlet-class> com.mathworks.toolbox.javabuilder.webfigures.WebFiguresServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>WebFigures</servlet-name> <url-pattern>/WebFigures/*</url-pattern> </servlet-mapping> </web-app> Il faut un fichier xml par application. En effet chaque application sur le serveur Tomcat (ou autre) possde une structure dfinie dans le fichier web.xml. Le fichier web.xml possde tout dabord la balise : <web-app> </web-app> Il y a ensuite les diffrents lments dans lesquels sont dfinis les noms de notre Servlet.: <servlet></servlet> et <servlet-mapping></servlet-mapping> . La Servlet est dfinie dans lapplication par <servlet></servlet> . : -<servlet-class></servlet-class> : nom rel de la Servlet ;

-<servlet-name></servlet-name> : nom interne l'application. Dans <servlet-mapping></servlet-mapping> nous trouvons les informations destin au client : -<servlet-name></servlet-name> : nom interne l'application ; -<url-pattern></url-pattern> : nom du ct client.

Une Servlet a donc diffrent nom. Ceci permet que si vous appelez une application dans diffrente pages, et quun jour vous dcidez de changer le nom de la Servlet, vous naurais besoin de changer uniquement le fichier web.xml pour renommer la Servlet.

MagicSquareServlet.java :
Ce fichier correspond notre Servlet. Elle possde uniquement du code java. On liste les fichiers importer. Les six premires lignes sont obligatoires. La septime importe le fichier jar, et les suivantes sont prsentes car notre programme dpend de Matlab. import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import javax.servlet.ServletConfig; import java.io.IOException; import examples.*; Tous les import suivant sont obligatoire lorsque lon utilise un code provenant de Matlab. Javabuilder permet le fonctionnement de : -web figure afin dafficher les graphiques ou figures interactives que lon souhaite -gnrer une partie de page html afin dafficher le rsultat (du carr magique sous forme de tableau) import com.mathworks.toolbox.javabuilder.webfigures.WebFigure; import com.mathworks.toolbox.javabuilder.webfigures.WebFigureHtmlGenerator; import com.mathworks.toolbox.javabuilder.MWJavaObjectRef; import com.mathworks.toolbox.javabuilder.MWNumericArray; import com.mathworks.toolbox.javabuilder.MWException; public class MagicSquareServlet extends HttpServlet { MagicCalc est la fonction cre lors de notre compilation entre getMagicWebFigure.m et getMagic.m en fichier jar. Vous pourrez trouver ce fichier java dans le dossier example de JavaEndToEnd . private MagicCalc calc; public void init(ServletConfig config) throws ServletException { super.init(config);

try { calc = new MagicCalc(); } catch(MWException e) { e.printStackTrace(); } } public void destroy() { super.destroy(); if(calc!=null) { calc.dispose(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { On rcupre le paramtre rcuprer dans le formulaire et pass par lurl par la page jsp MWNumericArray size = new MWNumericArray(Integer.parseInt(request.getParameter("size"))); double[][] square = new double[0][]; On initialise la figure afin de tracer notre graphique ou plutt limage de celui ci. WebFigure figure = null; try { On appelle notre fonction getMagicWebFigure afin de crer le graphique. Object[] results = calc.getMagicWebFigure(1, size); MWJavaObjectRef ref = (MWJavaObjectRef)results[0]; figure = (WebFigure)ref.get(); getServletContext().setAttribute("UserPlot",figure); On appelle la fonction getMagic afin de crer le carr magique. La rponse est stocke dans un tableau double dimension cre plus tt. Object[] result = calc.getMagic(1, size); MWNumericArray array = (MWNumericArray)result[0]; square = (double[][])array.toArray(); } catch(MWException e) { e.printStackTrace(); } La partie qui suit va soccuper de laffichage de la figure ainsi que du carr magique.

StringBuffer buffer = new StringBuffer(); WebFigureHtmlGenerator webFigureHtmlGen = new WebFigureHtmlGenerator("WebFigures",getServletContext()); if(figure!=null) { try { On affiche la figure String outputString = webFigureHtmlGen.getFigureEmbedString(figure,"UserPlot", "application","330","330",null); buffer.append(outputString); } catch(Exception e) { e.printStackTrace(); } } La partie qui suit va soccuper dafficher le carr magique sous forme dun tableau au format html. On gnre du code html afin que laffichage rponde a la forme dun carr. buffer.append("<BR>"); buffer.append("<BR>"); buffer.append("<TABLE >"); for (double[] row : square) { buffer.append("<TR>"); for (double value : row) { buffer.append("<TH>"); buffer.append(new Double(value).intValue()); } } buffer.append("</TABLE>"); buffer.append("<BR>"); response.getOutputStream().print(buffer.toString()); } }

StyleSheet.css :
Ce fichier est comme je lai dit plus tt, facultatif. Il permet en effet de designer la page internet. body { font-size: 11pt; font-family: Arial; background-color: whitesmoke; } LABEL {

} H1 {

font-size: 12pt; font-family: Arial; font-family: Arial; font-weight: bold; font-size: 22pt; color: black;

} Sur cette feuille css on a dfini la taille de la police, la police, la couleur pour les titre (H1), lensemble de la page (body). Cette feuille nest pas du tout obligatoire mais si vous voulez que votre page ressemble a quelque chose, vous tes oblig de passer par celle-ci.

Maintenant que nous avons parcouru un peu tout le fonctionnement de nos codes sources initiales, nous allons maintenant voir comment compiler et ensuite excuter tout cela sur notre serveur Tomcat.

Traitement de lexemple :
Pour ceci je vais suivre deux mthodes diffrentes pour la premire tape.

Premire tape (gnration du fichier jar) :


1ere mthode : Dans cette premire mthode nous allons utiliser linterface graphique de Matlab afin de gnrer le fichier jar correspondant au code Matlab. Pour commencer, lancer Matlab et placer vous dans le dossier mcode afin de trouver les codes Matlab : Webapp->WEB-INF->mcode Ensuite cliquer sur start -> matlab->Matlab Builder JA->Deplytool comme le montre limage ci dessous.

Choisissez un nom pour votre paquetage. Pour cet exemple je lappellerais example. Slectionner galement le type : java package. Puis cliquer sur

Notre package est cre. Il nous faut maintenant choisir un nom (ou des noms de class) ainsi que dy insrer les codes sources Matlab que lon souhaite transformer. Nous avons droite un nouveau menu qui vient de souvrir :

Vous devez faire comme jai fait dans les cadres rouges, c'est--dire que vous devez nommer la class (ici MagicCalc) et y insrerez les codes sources Matlab : getMagic.m et getMagicWebFigure.m. Il ne vous reste plus qua lancer le processus de compilation en cliquant sur ce bouton : Une fentre de progression va souvrir. Ne vous inquitez pas, le temps avant le dmarrage est assez long.

Voila, nous venons de crer le fichier jar grce a Matlab.

2eme mthode :
La deuxime mthode ce fait en ligne de commande en utilisant le compilateur intgr a Matlab : mcc. Il faut se placer la racine du dossier dcompress (JavaEndtoEnd) et taper cette commande : mcc -W "java:examples,MagicCalc" -d .\scratch -T "link:lib" -v "class{MagicCalc:.\webapp\WEB-INF\mcode\getMagic.m,.\webapp\WEBINF\mcode\getMagicWebFigure.m}" Ceci va nous crer le mme fichier jar que prcdemment en le plaant dans le dossier scratch.

Deuxime tape :
Dans le cas du passage par linterface graphique dans la premire tape, il faut se rendre dans le dossier cr par Matlab : example->src et copi le fichier jar afin de le mettre dans webapp\WEB-INF\lib Dans le cas du passage par la ligne de commande, nous allons galement dplacer le fichier jar, mais cette fois ci par la commande suivante : xcopy /Y .\scratch\examples.jar .\webapp\WEB-INF\lib Dans le deux cas: Il faut ensuite rcuprer le fichier servlet_api.jar et le mettre a la racine du dossier JavaEndToEnd. Pour cela rendez vous dans le dossier dinstallation de Tomcat. Si vous avez laiss, lors de linstallation les paramtres par dfaut, il devrait se trouver une adresse de ce style : Program files-> Apache Software Foundation->Tomcat 7.0->lib Arriv dans lib copi coller le fichier servlet_api.jar dans le dossier JavaEndToEnd. Nous allons maintenant rcuprer le fichier javabuilder.jar. Il se trouve dans le dossier dinstallation de Matlab : Program Files->MATLAB->R*****->toolbox->javabuilder->jar Copiez le fichier et placez le dans JavaEndToEnd-> webapp->WEB-INF->lib

Troisime tape :

Nous allons maintenant compiler le tout. En se plaant la racine du dossier JavaEndToEnd, tapez la commande suivante : javac -cp servlet-api.jar;.\webapp\WEB-INF\lib\javabuilder.jar;.\webapp\WEBINF\lib\examples.jar; -d .\webapp\WEB-INF\classes .\webapp\WEBINF\src\MagicSquareServlet.java

Quatrime tape :
Pour finir nous allons crer le fichier *.war. Cest ce fichier qui sera excut sur le serveur. Cette tape ce fait uniquement en ligne de commande. Il faut se placer dans le dossier webapp : cd webapp Et ensuite on utilise la commande suivante pour gnrer notre fichier JavaEndToEnd.war. jar -cvf ..\JavaEndToEnd.war . La compilation est termine, nous allons maintenant pouvoir voir le rsultat. Rcuprer le fichier war gnr et placez le dans le dossier Tomcat->webapps Maintenant rendez vous a cette adresse : http://localhost:8080/JavaEndToEnd/ExamplesPage.jsp Ce qui est en rouge correspond ladresse de notre serveur. Ce qui est en bleu notre fichier war Ce qui est en vert la page jsp qui va soccuper du formulaire, de lappel de la Servlet et des fonctions ncessaires. Vous devez obtenir une page ressemblant celle-ci :

Si vous avez une page comme celleci :

Il faut redmarrer le serveur Tomcat :

En cliquant sur stop, puis Start. Voila nous avons donc parcouru tout lexemple du carr magique.

Annexe:
Installation de TOMCAT :
Tomcat est principalement un serveur apache accompagn dun conteneur de Servlet. Dans notre recherche, le conteneur de Servlet et lextension obligatoire afin de pouvoir utiliser une Servlet java.

Il faut savoir que pour installer un serveur apache comme Tomcat, il est obligatoire de possder les accs administrateur sur la machine. Il faut tout dabord tlcharger la dernire version, qui est pour le moment TOMCAT 7.0. Dans Binary Distributions il faut tlcharger la version : 32-bit/64-bit Windows Service Installer. Car dans notre exemple nous utilisons Windows.

Maintenant que le fichier est tlcharg, rendez vous dans le dossier de destination et clique sur lexcutable et laissez vous guider. Arriv sur cette page :

Il est demand une valeur de port, il faut conserver la valeur par dfaut. Nous naurons pas besoin de la chang pour ce que lon souhaite faire pour le moment. Il est galement demand sur cette page un identifiant et un mot de passe administrateur. Travaillant en local, il nest pas obligatoire. Mais il est vrai que si le serveur tait destin tre connect internet, cette partie serait grandement conseille. La dernire tape consiste choisir le dossier de destination. Pour finir linstallation, une demande de lancement de serveur est affiche, acceptez la. Nous avons maintenant dans la barre de tache ceci :

En cliquant dessus on obtient le menu suivant :

Pour stopper le serveur il suffit de cliquer sur stop service, et pour compltement fermer le serveur sur exit. Voila, linstallation est termin.

Installation de MCR (Matlab Compiler Runtime) :


Rendez vous dans le dossier Matlab dans program files ->toolbox->compiler->deploy->win64 Sur Windows Seven ladresse ressemble celle-ci : C:\Program Files\MATLAB\R2xxxx\toolbox\compiler\deploy\win64 Dans le dossier win64, vous trouverez le fichier dinstallation: MCRInstaller.exe Double cliquer dessus (il vous faudra, comme pour Tomcat, les droits dadministrateurs afin de pouvoir installer MCR). Linstallation va se lancer toute seul. Mais ncessite tout de mme quelque intervention de votre par.

Você também pode gostar