L’union fait la force

28 01 2008

Il est toujours intéressant de parcourir du code source créé par d’autres personnes, c’est à mes yeux une excellente formation pour devenir un bon développeur. Je peux le vérifier en ce moment puisque je travaille sur la résolutions d’incidents sur une application web ayant pour base principale Struts.

J’ai été vraiment impressionné par le nombre de classes utilisées simplement pour supporter les opérations ajout, récupération,mise à jour et suppression de données (CRUD). A la décharge de l’équipe ayant créé cette application, il faut avouer que le modèle de Struts encourage à créer une classe par action.

Personnellement, je pense que la philosophie objet est respectée si l’on décide de regrouper les opérations CRUD dans une seule et même classe. Le nombre de classes va ainsi diminuer et rendre plus de clarté à l’environnement et l’objectif de chaque classe sera toujours bien défini.

De plus pour ne rien gâcher, Struts propose lui-même cette solution! La classe DispatchAction permet en effet au développeur de regrouper plusieurs actions en une-seule. Cette classe se trouvant dans la hiérarchie de la standard Action n’ est donc pas très différente de celle-ci.

En reprenant ce qu’explique la javadoc de cette nouvelle recrue, voici comment doter davantage de fonctionnalités à une action:

  • la déclaration de la classe dans le fichier struts-config est quelque peu différente:<action
    path="/saveSubscription"
    type="org.apache.struts.actions.DispatchAction"
    name="subscriptionForm"
    scope="request"
    input="/subscription.jsp"
    parameter="method"/>
    Le type de l’action correspond à la nouvelle classe et l’attribut parameter tient également un rôle particulier dans cette situation. C’est ce paramètre qui va être utilisé afin de définir quelle action sera exécutée.
  • définir une méthode par action suivant le modèle suivant:public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
  • la dernière chose à faire est de faire passer le paramètre ‘method’ (la valeur de l’attribut parameter de la 1ère étape) avec comme valeur le nom de l’action. Pour ce faire il n’y a qu’à passer par un lien ou un champ caché dans un formulaire!

Le résultat devient tout de même beaucoup plus agréable! La productivité va également sûrement être favorisée du fait qu’il n’y aura plus à jongler entre plusieurs classes pour changer d’opération sur un certain objet… Et le développeur qui devra passer plus tard sur un code plus compact en sera très reconnaissant 😉





Java 6 sur Mac sur Leopard disponible

19 12 2007

Alors que beaucoup sont révoltés quant à l’attitude complètement ignorante d’Apple, une preview est enfin disponible!

Espérons qu’une version finale verra le jour et que d’ici là une communication plus transparente se mette en place… On peut toujours fabuler… Merci Steve





Amazon Web Service

12 12 2007

Les applications aujourd’hui connectées à Internet peuvent interroger des services web afin d’obtenir des données externes aux objets de l’application. Il est ainsi possible d’interroger des miliers de bases de données en ligne.

Nous avions par exemple vu l’application Delicious Library. L’appel d’un service web se fait au moment où on lance une recherche à propos d’un média. En entrant un simple mot vous obtenez une liste de livre, cd, dvd ou encore de jeux vidéos correspondant à votre recherche. L’application utilise le service web de la plateforme amazon et par cet article je vais démontrer la facilité avec laquelle il est possible d’interroger se service web en Java. C’est parti!

Lire le reste de cette entrée »





Java et le web 2.0

19 11 2007

Un article intéressante concernant java et les appels asynchrones est consultable sur developerwors.

 Il met bien à l’index les lacunes de l’architecture Servlet de Java en ce qui concerne le buzz du moment : le web 2.0. Mais ce qu’il y a d’intéressant c’est que l’article propose des pistes sur lesquelles se diriger lorsque l’on veut créer une gestion asynchrones de requêtes. Il est parlé entre autre de du projet Apache MINA , SEDA, mais également du pattern COMET. Très bon tour d’horizon et d’idées à consulter. Un benchmark est de plus utilisé afin de prouver l’apport des appels asynchrones par rapport à la démarche synchrone traditionnelle à Java. Il propose de nombreuses ressources; à aller consulter!

 Pour info l’article parle également de 2 solutions proposées par les conteneurs Tomcat et Jetty qui permettent une communication asynchrone : Apache Tomcat 6 Comet API et Jetty Continuations.





Multithreaded Java GUI Programming

2 10 2007

J’ai lu récemment cet article sur InformIT. J’ai cependant une petite précision à faire. Il est en effet important de connaître la structure de swing au niveau threading avant de faire passer une application monothread à une application multithread. Ce n’est pas aussi simple que l’article semble le montrer.

Au départ de toute application, swing ou pas, la machine virtuelle démarre un thread de lancement. Ce thread a pour nom le main-thread, c’est donc au sein de celui-ci qu’est lancé la méthode main de votre application. Ensuite votre code peut initialiser, lancer, tuer des threads à souhait. Mais lorsque vous développez une application graphique avec le framework swing, un thread additionnel est lancé. Il se nomme l’Event Dispatch Thread (abbrévié EDT). Ce thread a pour but de gérer les interactions de l’utilisateur et l’affichage des composants graphiques de votre application. Ce qui est important c’est que ce thread n’ait à faire que des tâches très courtes afin que votre application ne gèle pas mais également que tout changement d’apparence de votre application passe par lui.

Si maintenant nous revenons à l’article de Monsieur Morris nous pouvons voir en page 3 que pour lui passer une application swing en multithreading est aussi simple que de créer un thread lors d’un clic de bouton et le lancer. Ce pourrait en effet paraître très facile! Mais il faut faire très attention en suivant cette méthode… En effet si vous mettez à jour votre application depuis le thread lancé il peut vous arriver malheur et ce qu’il fait dans l’article.

En revenant à notre description (très rapide) de l’architecture swing nous nous rappelons de l’EDT. Tout ce qui concerne un changement graphique doit passer par ce thread puisque c’est lui gère tout (redimensionnement, rafraîchissement, disposition…) ! Il existe plusieurs méthodes dans l’API de java qui permettent d’ajouter une tâche à effectuer dans l’EDT: SwingUtilities.invokeLater(Runnable r) et SwingUtilities.invokeAndWait(Runnable r)

Je vous laisse consulter la documentation pour connaître leur spécificités. Tout cela pour dire qu’il ne faut pas oublier de passer par l’EDT pour changer l’aspect de votre application pour ne pas avoir de surprise.