Actualités

[26/06/2017] Smile acquiert Hypertexte, expert en référencement naturel (SEO) et en contenus optimisés

Smile annonce l’acquisition de l’agence Hypertexte, spécialiste du référencement naturel, de la conception et de la réalisation de contenus pensés pour le SEO.

[21/06/2017] Smile dans le top 10 des entreprises où il fait bon travailler !

Smile entre dans le classement très fermé des entreprises où il fait bon débuter sa carrière. Un palmarès publié dans Les échos et réalisé par Meilleures-entreprises.com.

[20/06/2017] Smile classé 1er hébergeur en haute disponibilité depuis 3 mois

Depuis début mars, soit 3 mois consécutifs, Smile est à la tête du Classement des Hébergeurs en haute disponibilité, réalisé par ip-label et le Groupe NextRadio TV (01net, BFM, RMC).

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