Une aide bienvenue pour se certifier SCWCD
Une seconde édition du livre Head First Servlets and JSP est sortie!
Si vous êtes à la recherche d’une aide adéquate pour obtenir le niveau de la certification SCWCD, ce livre est parfait! Cette seconde édition couvre la spécification 5 de Java Entreprise alors que la précédente portait sur la version 1.4. Par contre pour ceux qui sont déjà certifié sur la version 4 je ne pense pas qu’il y ait un grand intérêt à la passer du fait que les ajouts ont surtout été fait au niveau du langage et moins sur les specs Servlet/JSP.
Faisant partie de la série Head First (existe aussi en français sous le nom Tête la Première - cet ouvrage n’est pas traduit), la lecture est non seulement facile, elle aide énormément à la mémorisation et à la compréhension. Les auteurs se sont en effet mis au courant des dernières avancées en recherche cognitive et on peut dire que c’est sacrément efficace!
Et si vous êtes curieux n’hésitez pas à jeter un oeil aux autres livres de la série qui abordent des sujets plus intéressant les uns que les autres!
Package java.lang
La bibliotheque Java est vaste, tres vaste. Sans conteste cela lui procure une grande richesse puisque de ce fait il est possible de quasiment tout faire avec. Il devient cependant de plus en plus difficile de s’y retrouver a mesure que le langage evolue. Ces evolutions sont bien regulees par le Java Community Process mais n’empeche que les fonctionnalites sont toujours plus nombreuses!
Je vais tenter par une serie de plusieurs articles de parcourir quelques-uns des packages de Java afin de montrer les differentes classes disponibles. Bien sur ce ne sera qu’un survol mais toujours utile, que l’on decouvre le langage ou que l’on ait davantage l’habitude d’utiliser Java (enfin j’espere).
Pour bien commencer, prenons les choses par le debut: java.lang. Ce package est automatiquement importe lorsque l’on developpe en Java. Toutes les classes presentes dans ce package sont tres souvent utilisees dans les programmes et le compilateur nous facilite la vie en faisant lui-meme le lien lorsqu’il en rencontre une utilisation.
Wrapper types
On retrouve ainsi la definition des types de Java (Boolean, Byte, Character… et le venerable Object sans qui rien ne serait possible). On les nomme generalement _Wrapper types _pour faire ressortir que ce n’est que la correspondance des types natifs (ou primitifs) qui sont utilises lorsque l’on fait par exemple:
int theResponse = 42;
Lorsque l’on code sur Java a partir de la version 5, une fonctionnalite existante peut faire completement oublier ce concept: l’autoboxing. En effet, precedemment le code suivant ne compilait pas:
Integer laReponseATteVosQuestion = 42;
Threading
Tous les outils de concurrences ne se trouvent pas dans ce package. Cependant, le socle de base de la programmation multi-threading est integre dans java.lang. On y trouve la classe de base: java.lang.Thread mais aussi par exemple java.lang.ThreadLocal qui est utilisee afin d’implementer le pattern Thread Local Session.
On peut tres bien n’utiliser que la classe Thread pour les besoins concurrents. Nous verrons cependant lorsque nous aborderons le package java.util.concurrent qu’il existe plusieurs outils supplementaires qui facilitent la vie du developpeur lorsqu’il met le pied dans le monde du multi- threading.
Acces systeme
Enfin, plusieurs classes de ce package permettent de faire appel au systeme sur lequel tourne Java.
La classe System contient uniquement des membres statiques permettant par exemple de recuperer le flux de sortie de Java (le flux utilise pour afficher des donnees a l’ecran, la console), le temps actuel en millisecondes ou en nanosecondes, recuperer une variable d’environnement, enregistrer une propriete systeme, charger une classe ou une librairie dynamiquement ou encore enregistrer un SecurityManager personnalise.
La classe Runtime est elle davantage liee au “systeme” de Java. Il est ainsi possible de l’utiliser afin de recuperer la memoire disponible dans la machine virtuelle, lancer le Garbage Collector (aussi possible depuis la classe System qui fait en fait une redirection sur la classe Runtime) et enfin avant de mentionner la derniere classe, Runtime permet d’executer un nouveau processus systeme…
La classe Process liee donc a Runtime mais aussi a ProcessBuilder represente un processus natif. Une utilisation de ce genre de classe peut bien evidemment limiter la portabilite de l’application; il faut par consequent bien reflechir quant a son utilisation.
Par exemple, pour une application graphique permettant d’executer des imports de donnees sur une base Oracle il existe l’outil bien connu Sql Loader qui permet de charger les donner en ligne de commande. Il sera possible d’appeler directement depuis le code Java l’executable d’Oracle de cette maniere:
Process p = new ProcessBuilder("sqlldr",
"userid=root control=control.ctl").start();
Ensuite les flux de sortie, d’entree et d’erreur sont disponibles et doivent etre recuperes afin de pouvoir communiquer avec le processus lance.
Autour de tout cela je n’ai pas pris le temps de parler de l’ensemble d’exceptions et d’erreurs se trouvant dans le package mais comme je l’ai dit dans l’introduction, ce n’est et ne sera qu’un aperçu!
La charte des droits du programmeur
-
Tout programmeur doit avoir un affichage double écran
-
Tout programmeur doit avoir une station performante
-
Tout programmeur doit se procurer lui-même sa souris et son clavier personnels
-
Tout programmeur doit avoir une chaise confortable
-
Tout programmeur doit avoir une connexion rapide à Internet
-
Tout programmeur doit avoir un environnement de travail calme.
Dans ma courte expérience professionnelle, tout ce que je peux dire c’est qu’en Suisse on est bien traité! Un commentaire intéressant sur l’original de cette charte: “mettre des écouteurs, parfois même sans aucune musique (Andre Torrez)” permet simplement de remplir les conditions de l’article numéro 6 de la charte ;) … Ayant travaillé à Lyon durant 3 mois, les conditions m’ont amené à tenter l’expérience avec succès! [source : coding horror]
Lectures #4
Cela fait un bout de temps que je n’ai plus parlé de mes lectures. Je ne vais pas les mentionner toutes mais il y en a une ou deux qui en valent la peine.
Le juge d’Egypte (Christian Jacq)
Les histoires narrées par Christian Jacq sont rarement décevantes. On y retrouve une fois de plus pour son compte grâce aux multiples péripéties rencontrées par Pazair, petit juge provincial. Le personnage est armé de forts sentiments de justice et d’intégrité; bien sûr ce ne sera pas du goût de tout le monde.L’intrigue tourne autour d’un mystérieux vol ayant lieu dans l’une des grandes pyramides. Et ce n’est évidemment qu’à la toute fin que ce jeu de piste s’achève. C’est une lecture captivante et vraiment agréable. On est mené à travers l’Egypte entier, on se trouve immergé dans l’ambiance de cette civilisation quelque peu mythique.
Le bouc émissaire (Daphné Du Maurier)
La seule critique pour cet ouvrage est très favorable.Personnellement, la seule oeuvre que j’avais lu de Daphné Du Maurier auparavant était_ l’Auberge de la Jamaïque_ et il est clair que le résultat n’est pas le même.L’histoire est plus lente et m’a personnellement moins captivé. D’ailleurs j’ai l’impression que si je me lance à expliquer en quelques mots l’histoire j’en dirai déjà beaucoup trop si des candidats à cette lecture passent par là. C’est dire si c’est lent ;) Au delà de cela on retrouve tout de même la belle et agréable écriture de l’auteure avec des personnages très bien décris.J’ai aussi pu lire Cyrano de Bergerac récemment (eh oui je ne l’avais pas encore lu) et force est de constater que c’est un chef d’oeuvre! Un réel hommage à la langue française. C’était un véritable plaisir de me plonger dans ce bouquin, cela ne m’étonnerais pas que je le relise un jour.Pour finir, je déconseille la lecture de J’irai cracher sur vos tombes de Boris Vian. C’est trop cru (voir repoussant) à mon goût.
L'union fait la force
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:
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 ;)
Lectures #3
Et si c’était vrai… (Marc Levy)
Tout le monde la déjà lu mais pas moi. Maintenant c’est fait et comme la plupart des lecteurs j’ai été conquis par ce roman. L’histoire menée avec rythme nous envoûte très rapidement. On se sent embarqué au fil des pages dans la vie de cet architecte pour qui tout va bien… Un peu de piment dans sa vie nous plonge dans des réflexions que l’on manque trop facilement au rythme où vont nos vies aujourd’hui.
Cette histoire n’a fait que confirmer une envie en moi…. Visiter la région de San Francisco et la côte jusqu’à Monterey… Un roman qui se dévore et qui laisse un souvenir agréable… Un plaisir! De plus le personnage de Paul est réellement hilarent.
Le dictateur et le hamac (Daniel Pennac)
Mon premier roman de Pennac. Une histoire drôle dans tout les sens du terme. J’en ressors avec dans la tête une histoire confuse mais qui m’a fait passer un bon moment en compagnie du narrateur… dans son hamac. On est projeté dans les péripéties d’un président et de quelques-uns de ses sosies successifs lorsque lui-même se rend compte qu’il est agoraphobe…
Un humour que je n’avais encore que peu rencontré dans les livres… Décalé, délicieux.
Le meilleur des mondes (Aldous Huxley)
Le meilleur des mondes se situe dans les romans d’anticipation. Ecrit après la guerre, ce roman décrit la vie dans un futur où les bébés ne sont plus conçus naturellement mais par un long processus régulé par des humains qui sont eux-mêmes des “humains” conditionnés depuis leur naissance. Pour que l’équilibre soit toujours de mise, un système de classe a été défini. On se retrouve alors à suivre la vie d’un homme de haute classe qui est quelque peu différend des autres… Il réfléchit, se pose des questions, aime être seul…
J’ai eu du mal à entrer réellement dans l’histoire mais finalement ce bouquin m’a plu. L’imagination de l’auteur est impressionnante… A quand les cinéma sentants? La distribution de soppor? La familiarisation à la mort?
Amazon Web Service
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!
Il faut tout d’abord créer un compte sur la plateforme depuis cet url : http://www.amazon.com/gp/browse.html?node=3435361
Après inscription il est possible d’obtenir un identifiant (acces key id) nécessaire à l’interrogation du service web. Il nous manque plus que le lien reliant notre application et le service web. L’utilitaire en ligne de commande wsimport va nous créer ce lien. Cet outil est intégré au JDK. Donc si l’environnement est bien configuré il sera possible de directement lancer cet utilitaire depuis le prompt. Sinon il faudra vérifier que le répertoire JDK est bien référencé dans le _PATH _de l’environnement.
Utilisons donc cet utilitaire pour nous créer les classes nécessaires à
l’interrogation du service web. Pour cela rien de plus simple : wsimport http://www.amazon.com/gp/browse.html?node=3435361 -d src -p org.poxd.gen
Après exécution de cette ligne dans le shell (prompt DOS ou shell unix) un
ensemble de classes sont créées. Celles-ci feront tout le travail
d’interrogation sur le service web.
Suite à la création de ces classes, nous allons les utiliser afin d’interroger amazon pour nous retourner les résultats de livres pour un auteur renseigné par l’utilisateur dans une application graphique. L’aspect graphique peut en rebuter plus d’un lorsqu’il faut s’attaquer à la librairie swing qui a mauvaise réputation. Cependant en utilisant Netbeans il devient très facile d’arranger des composants ensembles grâce à Matisse son _GUI Builder. _En 2 minutes on peut se créer une fenêtre contenant une liste, un champ de texte, un bouton, une barre de menu et une gestion complète du positionnement et de la taille de la fenêtre qui vont être mémorisées à la fermeture de l’application pour les restaurer au prochain démarrage. Voici le rendu de mon application :

Netbeans s’appuie sur l’Application framework développé par Sun ce qui tend à rendre les choses plus facile pour ce genre de développement. Tout ce qui est de la gestion de l’internationalisation, des actions, du modèle de Swing est plus accessible à tout développeur.
Maintenant si nous retournons à notre application nous allons y intégrer l’appel au service web d’amazon en passant par nos classes générées par wsimport. Pour récupérer donc une liste de livres correspondant à un auteur le tout est aussi simple que ça:
AWSECommerceService service = new AWSECommerceService();
AWSECommerceServicePortType portType =
service.getAWSECommerceServicePort();
ItemSearchRequest request = new ItemSearchRequest();
Holder<OperationRequest> operationrequest =
new Holder<OperationRequest>();
Holder<java.util.List<Items>> items =
new Holder<java.util.List<Items>>();
request.setSearchIndex("Books");
request.setAuthor("tevis");
ItemSearch search = new ItemSearch();
search.setAWSAccessKeyId(AWSID);
search.getRequest().add(request);
List result = new ArrayList();
portType.itemSearch("", AWSID, AWSID, "", "", "", request,
search.getRequest(), operationrequest, items);
La variable AWSID étant la clé fournie par amazon après création d’un compte. A ce moment-là, la liste _result _contient toutes les informations dont on peut avoir besoin! Tout est accessible depuis son membre value. Pour de plus amples informations sur ce qui est possible et comment je vous laisse consulter le centre de ressources d’amazon. Voici en quelques minutes ce que l’on peut obtenir conjointement avec les services web d’Amazon et Netbeans 6.

Vous pouvez trouver les sources ici.
Java et le web 2.0
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.
Lectures #2
L’oiseau d’amérique (Walter Tevis)
Un roman SF mais trop tout comme j’aime. C’est l’histoire de ce qu’est devenu l’humanité en l’an 2100 et quelques au contact de robots de classes plus ou moins sophistiquées. A cette époque tout est régulé jusqu’au taux d’infantilité. Ce taux est d’ailleurs devenu très bas au point qu’il n’y a carrément plus d’enfants qui naisse…. Mais tout n’est pas perdu. … (je ne sais plus son nom) , un humain, lui travaille à l’université de New-York et peut consulter de nombreux livres… Il apprend à lire et découvre ce qu’était l’homme au XXème siècle. Il prend goût à la lecture et au visionnage d’oeuvres cinématographiques ce qui le change complètement. Il ne fume plus d’herbe, ne prend plus de _soppor _et est heureux!
Je vous laisse découvrir cet ouvrage magnifique qui est un hommage à la lecture et à cette détermination de vivre innée à l’homme.
#Et après (Guillaume Musso)
Roman quelque peu fictif (un peu moins celui-ci) et à suspens. C’est l’histoire d’un gamin qui manque de se noyer à l’âge de 8 ans et qui devient plus tard avocat renommé sur Manhattan. Un épisode tragique rend la séparation d’avec sa femme inévitable. Celle-ci déménage à l’autre bout des Etats-Unis mais un contact régulier est maintenu entre lui et sa petite fille Bonnie. C’est alors qu’un étrange chirurgien entre dans sa vie avec des révélations bien étranges….
Si vous ne l’avez pas lu, sautez dessus! J’ai particulièrement aimé les dialogues entre le père et sa fille qui lui inculque le respect des gens quels qu’ils soient, le respect de l’argent, le respect tout court. Une autre chose qui ressort bien de se livre est notre changement d’attitude lorsque l’on se dit que l’on va bientôt mourir… A chacun de nous de ne pas oublier de vivre chaque journée à fond pour n’avoir aucun regret (plus facile à dire qu’à faire).