Actualités

[28/04/2017] Smile annonce son plan stratégique Open Arrow 2021 et accueille à son capital EURAZEO PME, nouvel actionnaire de référence qui succède à Keensight Capital

Smile, leader de l’intégration et l’infogérance de solutions open source, choisit son nouvel actionnaire majoritaire et s’offre de nouveaux moyens lui permettant le déploiement de son plan stratégique OPEN ARROW 2021 visant à créer un nouveau champion européen de l’IT de plus de 200M€ de chiffre d’affaires.

[25/04/2017] Smile est à nouveau Strategic Partner Alfresco !

Pour la quatrième année consécutive, Smile est Strategic partner Alfresco, le plus haut niveau de partenariat !

[12/04/2017] Smile décroche le statut de Partenaire Global Elite Magento !

Smile est très heureux d'annoncer que nous devenons Partenaire Global Elite Magento - un statut accordé à seulement 5 entreprises dans le monde !

Toutes les actualités picto
       

Vous avez besoin de mettre à jour votre Lecteur Flash Flash 7

Guillemet ouvrant l'actualité des solutions
et des technologies open source Guillemet fermant
picto

Faire tourner GWT sur un environnement .NET, qui a dit impossible ? (Partie 2)

Dans la première partie de cet article nous avons abordé essentiellement les problématiques propres au développement de la solution : l'implémentation partielle de l'API Servlet en faisant une correspondance entre cette API et son équivalent dans le framework .NET.

Pour accéder à la première partie de cet article, cliquez ici.

Nous allons, dans cette seconde partie, nous concentrer sur le déploiement de l'application obtenue dans un serveur IIS.

Déploiement de la librairie dans IIS

La recette est simple :

1. Créer un répertoire bin dans le répertoire C:\inetpub\wwwroot.
2. Copier la dll dans ce répertoire bin.
3. Ajouter toutes les librairies de IKVM dans le répertoire bin
4. Déposer le contenu du répertoire war de notre application dans C:\inetpub\wwwroot.
5. Faire de notre répertoire une webapp :
- Ouvrir le gestionnaire IIS (Internet Services Manager).
- Clic-droit sur site web par défaut, puis clic sur propriétés.
- Dans l'onglet répertoire de base clic sur créer. (renommer au passage l'application en « gwt »)
6. Créer un mapping pour notre application, pour que chaque requête soit redirigée vers ASP.NET :
- Clic-droit notre application (« gwt »), puis clic sur propriétés.
- Dans l'onglet répertoire de base, clic sur configuration.
- Clic sur ajouter pour créer un nouveau mapping.
- Dans le champs Executable : Parcourir l'explorateur de fichier et sélectionner la libairie Aspnet_isapi.dll
- Dans le champs Extension : saisir « *. »
- Décocher vérifier l'existence du fichier.
7. Clic sur OK

8. Fermer le gestionnaire IIS.

Nous allons maintenant créer un fichier web.config à la racine du projet (C:\inetpub\wwwroot):

web.config
 
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
   <system.web>
      <authentication mode="None" />
      <httpHandlers>
         <add verb="*" path="gwttest/greet" type="web.custom.HttpHandlerImpl, MyGWTHandler" />
      </httpHandlers>
   </system.web>
</configuration>

Dans ce fichier, " web.custom.HttpHandlerImpl" est le nom complet de notre implémentation d'IHTTPHandler préfixée par le package, et " MyGWTHandler" la librairie .NET où se situe la classe.

Un peu de débogage

On peut maintenant tester notre application dans notre navigateur en appelant sa page de départ :

http://localhost/GWTTest.html

En cliquant sur « Send » on obtient tout d'abord une page d'erreur :

En appelant directement l'URL de la servlet à partir de Firefox, on comprend un peu mieux le problème :

Mais cette page d'erreur représente déjà un résultat intéressant et insolite : il s'agit d'une page d'erreur IIS classique à laquelle tout développeur .NET est habitué, mais en regardant de plus près la pile de l'Exception, on constate qu'elle contient des classes Java !
En l'occurrence, il s'agit simplement d'un problème de NullReferenceException (l'équivalent de la NullPointerException en java).
Après quelques tâtonnements, l'ajout de logs afin de mieux comprendre quelles sont les méthodes qui sont utilisées par GWT et que nous n'avons pas implémenté (ou mal implémenté), nous arrivons enfin à obtenir un code retour 200 indiquant que l'application tourne mais il reste un problème :

Après quelques recherches, le problème semble lié à l'utilisation par GWT du ContextClassloader. Le détail du problème est donné dans le dernier paragraphe de cet article, et pour le résoudre nous décidons de patcher la classe correspondante de GWT. Le résultat ne se fait pas attendre : l'application fonctionne :

Conclusion

Le déploiement d'une application GWT dans un serveur IIS n'a pas été une chose aisée mais avec un peu de patience et beaucoup de débogage, le résultat est là. L'outil IKVM est celui qui a rendu pensable ce portage et il se révèle encore une fois très puissant.
En fin de compte, seules 6 classes java ont du être écrites et une seule ligne de code modifiée dans GWT pour arriver à faire tourner notre application.
La méthode appliquée ici peut être extrapolée à toute application GWT et permet d'envisager des applications .NET pouvant fonctionner sous environnement Microsoft IIS ou Mono sous Linux et dont tout ou partie de l'interface graphique serait réalisée avec GWT, le reste de l'application pouvant être écrit en C# par exemple.

Quelques problèmes rencontrés

  • Attention à la version du Framework .NET :

Un message : « Le format du fichier XXX.dll n'est pas valide. » indique que la version du Framework utilisée par IIS est différente de celle du fichierl XXX.dll. Il faudra donc changer de version du Framework dans IIS (dans le gestionnaire IIS, clic droit sur l'application GWT, puis clic sur propriétés, dans l'onglet ASP.NET changer la version du Framework)

  • La classe com.google.gwt.user.server.rpc.RPC utilise le ContextClassloader afin de charger les classes de l'application : Thread.currentThread().getContextClassLoader()

Apparemment pour des raisons techniques, ceci n'est pas possible avec IKVM. Quelques éléments d'explications ici :

http://sourceforge.net/apps/mediawiki/ikvm/index.php?title=ClassLoader

Eric Plaquevent
picto

Commentaires

Soyez la premiere personne à ajouter un commentaire sur cet article.
Ecrire un nouveau commentaire