Chris Gibbs chrisgibbs@geocities.com
Cet article est destiné à aider les nouveaux venus dans le monde Linux ou Java, autant à configurer leur machine pour faire tourner des applications Java, qu'à leur permettre de disposer d'un environnement efficace pour développer des applications dans ce langage.
Plus précisément, j'expliquerai comment mettre en place le JDK 1.1.x de Sun et les paquetages associés. Ce n'est pas la seule manière de faire fonctionner Java sous Linux.
Blackdown.org propose le tout nouveau JDK 1.2.x pour Linux (au moment où j'écris cet article c'est toujours une version de pré-distribution). Je ne vous recommande de l'utiliser que si vous avez également le nouveau noyau Linux 2.2.x. Si vous décidez d'installer le JDK 1.2.x, alors remarquez qu'il n'est pas nécessaire de vous procurer les paquetages Swing et JSDK, puisqu'ils y sont déjà inclus. Vous pourrez également faire face à certains problèmes de compatibilité si vous utilisez de vieilles applications Java avec le JDK 1.2.x. En particulier si vous avez l'intention d'utiliser l'extension javapache de Apache, vous devrez utiliser le JDK 1.1.x.
En plus de tout cela il existe d'autres environnement de développement Java et d'autres compilateurs Java comme le jikes d'IBM. Utilisez-les à vos propres risques ! A mon humble avis, Sun a défini et développé le langage Java, donc j'attends de leurs environnements Java qu'ils soient les plus standards. D'autres environnements peuvent être intéressants, mais je ne peux pas en parler ici.
Malheureusement le développement du langage Java pour Linux traîne par rapport à celui des autres systèmes d'exploitation. Cela étant dit, il y a encore des avantages à utiliser Java sous Linux, dont le moindre n'est pas la facilité de trouver des outils de développement sophistiqués. Si vous n'avez pas eu l'occasion de voir une version récente de DDD (Le Débugger avec affichage Dynamique -NdT: traduction nulle !), vous ne devez pas vous rendre compte qu'il supporte maintenant Java. Si vous écrivez un quelconque programme sous Linux, DDD est indispensable.
Le plus grand avantage que présente Java est également son plus gros défaut. Pour les raisons données ci-dessous, le fait que le même code puisse tourner sur n'importe quelle plate-forme sans avoir à être recompilé est responsable du fait que les applications Java apparaissent lentes. C'est cette lenteur qui à mené certaines personnes à se poser la question de la nécessité d'utiliser Java.
Il est vrai que si l'unique critère de sélection d'un langage de programmation est la rapidité avec laquelle il est capable de lancer et de faire tourner des applications, alors je n'envisagerais même pas l'utilisation de Java. Même si des applications comme jedit et le lecteur de CD en java décrit précédemment dans cette e-zine, ont des fonctions équivalentes à des applications écrites en C, elles sont très lentes à démarrer et je suis réticent à les utiliser quand j'ai des solutions plus rapides.
Mais Java n'est pas conçu pour de telle applications. Java excelle en ce pour quoi il a été originalement créé, c'est à dire fournir un moyen d'avoir des applications sur tout l'internet. Sur l'internet la vitesse de chargement d'une application n'est pas vraiment importante comparée au temps qu'il faut pour la télécharger.
Maintenant considérons votre gentil FAI, et les serveurs qui vous fournissent l'accès à l'internet. Votre FAI (même votre intranet local) a besoin des machines les plus rapides possibles répondant à certains critères (coût, etc.). Le coût du serveur lui-même peut ne pas être important comparé à l'investissement que représente les applications serveur. Utiliser Java pour de telles applications permet à votre FAI d'être libre de choisir la meilleure architecture et le meilleur système d'exploitation sans avoir à se soucier du coût et de la faisabilité d'une réimplantation de telles applications. Elles peuvent simplement être copiées d'une machine à une autre. Peut-être, un jour, Microsoft développera un système d'exploitation fiable qui sera supérieur à un système d'exploitation *NIX. Si jamais ce jour arrive je voudrais changer et laisser Linux, et l'utilisation de Java me permettra de faire ça et de garder exactement les applications serveur que j'utilise en ce moment.
Si votre volonté est d'utiliser un ordinateur seul dans son coin, sans aucun accès à un quelconque réseau, soit localement soit sur l'internet, alors vous n'aurez probablement pas besoin ou tout simplement vous ne voudrez pas utiliser Java. Mais si votre machine est partie intégrante d'un réseau local ou de l'internet, alors, l'utilisation de Java doit être prise au sérieux. Java n'est pas la seule façon de développer des applications réseau. Par exemple, Perl peut être utilisé de manière similaire. Mais Java est une option très séduisante.
Je vous en prie, ne récupérez pas votre JDK directement chez Sun. Ils ne fournissent un support que pour Microsoft Windows, Solaris, etc. Allez plutôt à Blackdown.org et trouvez la version dont vous avez besoin.
Tous les autres paquetages mentionnés ici doivent être rapatriés depuis le site de Sun.
Le port pour plate-forme Linux du JDK peut être trouvé soit sur le disque d'une distribution Linux, soit à http://blackdown.org. Vous verrez que vous avez un choix ahurissant de fichiers à installer. Il y a le JRE aussi bien que le JDK. Je vous conseille de prendre le JDK complet puisqu'il contient tous les autres.
Linux a sûrement été le premier système d'exploitation à fournir le support direct de Java dans le noyau. Cela permet à Linux de faire tourner, à la fois des applications et des applets Java, sans recourir à un navigateur comme Netscape. Mais si vous pensez que le support Java du noyau va lui permettre de faire tourner directement du code Java, vous vous trompez complètement.
Pour comprendre ce qu'il se passe vous devez vous rendre compte que Java est juste un cran au dessus de l'exécution interprétée d'un langage, par rapport à une exécution après compilation. Dans les temps anciens de l'informatique, il était courant d'utiliser des langages interprétés, comme le GW-BASIC, pour écrire des applications simples. Le code qui était écrit n'était jamais compilé pour créer un programme, mais il était plutôt parcouru par un interprèteur qui exécutait effectivement les instructions. C'est une manière très peu efficace de faire les choses et les résultats seront toujours lents.
Java se distingue des langages interprétés, comme les vieilles versions de BASIC, en ce sens que le code source est compilé. Mais le source n'est pas compilé en vue d'obtenir quelque chose d'exécutable directement pas un ordinateur comme cela serait le cas si vous compiliez un programme C avec gcc. A la place, le code source est compilé en un code objet (byte-code) au format standard. La raison pour laquelle la même application Java peut fonctionner sur n'importe quelle plate-forme est précisément le fait que ce code objet a un format standard. Les programmes java et appletviewer, fournis par Sun pour par Blackdown.org s'occupent de parcourir ce code objet et d'exécuter les instructions. C'est la raison pour laquelle les applications Java peuvent paraître lentes, le code objet devant être parcouru par un interprèteur avant de pouvoir être exécuté, cependant la situation n'est pas aussi mauvaise qu'elle pouvait l'être avec les anciens programmes BASIC, puisque le code objet a déjà été optimisé par le compilateur java.
Quand vous compilez votre noyau Linux avec le support pour Java, ce que vous faites en réalité c'est dire au système d'exploitation d'invoquer soit java soit appletviewer, quand il y a une demande pour exécuter une application java. Linux vous donne juste accès à un raccourci pour dire 'appletviewer mon_application'.
Pour cette raison vous devez dire au noyau où vous gardez vos exécutables Java. Si vous avez eu le JDK chez Blackdown.org alors le hasard veut que java et appletviewer soient placés dans /usr/local/java/bin. Si vous installez le JDK depuis une distribution S.u.S.E. alors ils seront dans /usr/lib/java/bin. Bien sûr vous pouvez avoir installé le JDK dans un endroit non standard.
Avant de recompiler votre noyau Linux, éditez le fichier /usr/src/linux/fs/binfmt_java.c pour décrire la situation qui est la vôtre.
#include <linux/malloc.h> #include <linux/binfmts.h> // Remplacez ceci par l'emplacement correct sur votre système. #define _PATH_JAVA "/usr/local/java/bin/java" // Remplacez ceci par l'emplacement correct sur votre système. #define _PATH_APPLET "/usr/local/java/bin/appletviewer" #define _PATH_SH "/bin/bash" char binfmt_java_interpreter[65] = _PATH_JAVA; char binfmt_java_appletviewer[65] = _PATH_APPLET;
Veuillez noter que les références à java et à appletviewer doivent se faire sur les vrais exécutables et non pas sur un quelconque lien symbolique que vous pouvez avoir créé. Dans l'exemple ci-dessus le répertoire /usr/local/java peut être un lien symbolique vers /usr/lib/java-1.1.7, mais le fichier qui est véritablement référencé n'est pas un lien symbolique, il existe vraiment dans /usr/lib/java-1.1.7/bin.
A présent vous pouvez décider de compiler le support de Java directement dans le noyau, ou si vous voulez l'avoir en tant que module. J'ai choisi d'utiliser un module. Le seul commentaire que je pense être nécessaire de faire est que, lorsque j'essaye d'exécuter un fichier html, kerneld ne charge pas automatiquement le module binfmt_java, et donc je doit d'abord lancer la commande "insmod binfmt_java".
Oui, Linux va vous permettre d'exécuter certains fichiers HTML comme s'ils étaient des applications. Pour comprendre pourquoi vous pouvez être amenés à faire ça vous devez comprendre la différence entre les applet java et une application java complète. Alors qu'une application java fournit elle-même les ressources dont elle a besoin, une applet non. Normalement une applet doit être incluse dans une page web qui est vue par une navigateur capable de gérer Java, comme Netscape ou HotJava, parce qu'elle n'a pas elle-même de fenêtre mère. Une possibilité est d'utiliser le programme appletviewer pour voir l'applet.
Linux vous donne un choix supplémentaire. Si vous ajoutez la ligne
<!--applet-->
De la même manière une application Java est faite d'un ou plusieurs fichiers class. Pour rendre les applications exécutables par Linux, il vous suffit tout simplement de rendre le fichier class, le plus haut placé dans la hiérarchie, exécutable avec chmod.
En lisant la documentation qui est fournie avec le JDK (Java Development Kit), nous voyons qu'il n'est pas nécessaire de spécifier les valeurs des variables d'environnement CLASSPATH et JDK_HOME. Bien que cela soit vrai pour le JDK lui-même, j'ai eu affaire à certaines applications qui s'attendent à trouver ces variables d'environnement positionnées. Dans tous les cas, les déclarer ne vous fera aucun mal, et je vous recommande de faire ce qui suit pour installer le JDK correctement :
Où {JDK_HOME} est le répertoire source de votre installation du JDK.
L'API JavaBeans vous permet de créer des bouts de programmes en Java. Ces morceaux de programmes sont complets, se suffisent à eux-même, et sont des bouts de programmes qui peuvent être liés de manière visuelle dans n'importe quel programme Java, applet ou servlet. De tels bouts de programmes sont connus sous le nom de Beans [NdR: haricots]. Les IDE [NdR: environnement intégré de développement, à savoir éditeur+compilateur+débogeur accessibles depuis la même fenêtre] Java disponibles sont nombreux à utiliser cette technologie pour nous fournir des outils de construction d'application, comme NetBeans ou Visarj. BeanBox, un simple IDE JavaBean, est inclus dans le paquetage pour vous permettre de débuter.
Quand vous démarrez BeanBox, en lançant bin.sh dans le sous-répertoire BDK/beanbox, trois fenêtres apparaissent :
La fenêtre ToolBox contient au départ un certain nombre d'exemples de beans, et vous pouvez ajouter les vôtres pour créer votre propre environnement de programmation. Sélectionnez un bean en cliquant dessus. Cliquez alors quelque part dans la fenêtre BeanBox. Le javaBean apparaîtra et une liste de ses propriétés sera affichée dans la fenêtre Properties. Vous pouvez alors utiliser cette dernière fenêtre pour personnaliser le JavaBean pour qu'il soit adapté à votre application. Quand vous avez fini d'ajouter des Beans et que vous êtes satisfait de l'apparence de votre application dans la fenêtre BeanBox, vous pouvez sélectionner File/Make applet du menu de cette même fenêtre, et une applet complète, avec un fichier html d'exemple, sera générée pour vous.
Maintenant cela doit-être clair pour vous, les JavaBeans fournissent des moyens pour développer des applications sans écrire une seule ligne de code. Bien sur, vous aurez besoin d'écrire les Beans eux-mêmes, mais de nombreux fabricants mettent des Beans à disposition et l'internet est un bon endroit pour chercher de nouveaux composants.
Une des particuliarités des JavaBeans est qu'ils sont empaquetés dans un fichier au format JAR. Ce format a de nombreux avantages par rapport aux fichiers de classes java, et entre autres :
Le JDK 1.2.x a des capacités additionnelles comme la gestion des différentes versions de paquetages, le verrouillage des paquetages, et l'empaquetage des extensions.
/usr/lib/BDK
Toutes les applications Java ne sont pas au même niveau ! Certaines ont une meilleure apparence que d'autres. Swing fournit plusieurs améliorations au langage Java. Alors que vous n'avez pas besoin de Swing pour développer et faire tourner des applications Java et des applets, vous pouvez très bien en avoir besoin pour compiler ou faire tourner certaines applications Java (comme jedit) qui sont distribuées librement sur l'internet. Les JFC (Java Foundation Classes, qui sont incluses dans le paquetage Swing), associées à Swing, fournissent un ensemble de "petits" composants qui fonctionnent de la même manière sur toutes les plates-formes. En fait, elles fournissent des extensions graphiques au langage Java qui peut amener plusieurs améliorations au look-and-feel [NdR: combinaison de l'apparence et du comportement des éléments graphiques de base] de vos applications.
Cette capture d'écran montre le premier écran qui apparaît quand vous lancez l'application swingset. Cette dernière peut être utiliser pour faire une démonstration des améliorations que swing apporte. En sélectionnant une catégorie comme ListBox vous pourrez afficher et modifier les différentes options qui sont disponibles et de ce fait, vous rendre familiers les effets que Swing peut proposer.
Une application que je peux recommander et qui fait une utilisation complète de Swing est jedit, un joli petit éditeur. Il est disponible sous la forme de son code source complet, et est adapté à l'édition de textes bruts comme du HTML, des sources Java, des scripts Perl, des documents LaTeX, etc. L'éditeur supporte l'ajout de plug-ins et un ou deux exemples simples sont fournis pour vous permettre de débuter.
Où {SWING_HOME} est le répertoire dans lequel vous avez décompressé Swing.
En fait, il y a deux paquetages : l'API d'Accessibilité Java et les Utilitaires d'Accessibilité Java eux-même.
L'API d'Accessibilité Java définit un contrat entre les composants individuels de l'interface utilisateur qui forment une application Java et un ensemble de techniques d'assistance qui fournit des accès aux applications Java. Si une application Java supporte complètement l'API d'Accessibilité Java, alors elle doit être compatible et faciliter l'utilisation des technologies d'assistance comme les lecteurs d'écran, les loupes d'écran, etc... Avec une application Java qui supporte entièrement l'API d'Accessibilité Java, aucun modèle hors-écran ne devrait être nécessaire vu que l'API fournit toutes les informations qui sont habituellement contenues dans ce type de modèle.
En vue de fournir un accès à une application Java, une technique d'assistance a besoin d'un peu plus que de l'API d'Accessibilité Java : elle a également besoin de pouvoir trouver les objets qui sont manipulés par l'API aussi bien que d'être capable d'être chargée dans la machine virtuelle java, de traquer les événements, etc. La classe d'utilitaires d'Accessibilité Java fournit cette assistance.
Comme vous pouvez le deviner en voyant cette capture d'écran, les Utilitaires d'Accessibilité Java nécessitent que vous ayez préalablement installé le paquetage Swing.
Plusieurs utilitaires d'exemples sont fournis dans le paquetage. La capture d'écran ci-dessus montre le Java Monitor (Moniteur Java) qui vous permet d'avoir des informations sur les objets affichés à l'écran par une Machine Virtuelle Java. Il y a aussi :
C'est un peu différent des autres paquetages mentionnés précédemment, puisque vous devez activer explicitement les différents utilitaires compris dans ce paquetage.
Quand vous lancez n'importe quelle application Java vous êtes également capable de lancer automatiquement un des utilitaires décrit ci-dessus en suivant les étapes décrites ci-après :
AWT.EventQueueClass=com.sun.java.accessibility.util.EventQueueMonitor
AWT.assistive_technologies=JavaMonitor
L'API Java Servlet (JSDK : Java Servlet Development Kit) est une extension standard du Kit de Développement Java. Les Servlets sont des morceaux de programmes qui fonctionnent dans des serveurs pour étendre leurs fonctionnalités. Par exemple, les servlets constituent un remplacement efficace et indépendant de la plate-forme pour les scripts CGI. Les serveurs qui peuvent héberger des servlets sont des serveurs capables de faire tourner java et qui répondent à des requêtes client.
Ce diagramme montre une mise en oeuvre typique d'un servlet java. Un serveur HTTP fait tourner un servlet qui a pour tâche de lire des données à partir d'un formulaire HTML et d'appliquer les règles d'une société pour mettre à jour leur base de donnée de commande. Dit plus simplement, un servlet java est une version serveur d'une applet java. Comme nous pouvons nous y attendre, comme un serveur tournera à distance et qu'il ne sera pas surveillé (du point de vue de l'utilisateur du moins) le servlet n'a pas d'interface graphique.
Les servlets permettent d'écrire des documents dynamiques plus facilement et qui sont plus rapide à faire fonctionner. Les servlets posent également le problème de la programmation du côté serveur avec des API dépendantes de la plate-forme : il sont développés avec l'API Java Servlet, une extension standard de Java.
Donc, utilisez les servlets pour gérer les requêtes client HTTP. Par exemple, vous pouvez utiliser un servlet pour traiter les données POSTées via HTTP en utilisant un formulaire HTML, et qui contient un bon de commande ou les données d'une carte de crédit. Un tel serveur peut faire part d'un système de gestion et de traitement de bons de commande, fonctionnant avec les bases de données produits et l'inventaire, et peut-être un système de paiement en-ligne.
Parmi les nombreuses utilisations possibles d'un servlet, nous comptons :
Si vous utilisez Apache, vous serez intéressé par le projet javapache, disponible à l'adresse http://java.apache.org. Pour l'utiliser vous aurez besoin du JDK 1.1.x, et vous devez utiliser la version 2.0 du JSDK. Le mois prochain j'espère faire une introduction à ce projet.
Le JSDK est disponible au téléchargement à l'adresse http://java.sun.com/products/java-servlets.
Si vous utilisez le nouveau JDK 1.2.x, souvenez-vous bien que vous n'avez pas besoin de télécharger ce paquetage, puisque le JSDK est déjà inclus.
/etc/profile
export PATH=$PATH:/usr/lib/JSDK/bin
CLASSPATH
, soit
export CLASSPATH=$CLASSPATH:/usr/lib/JSDK/lib/jsdk.jar
/etc/profile
.
Chaque paquetage comprend sa propre documentation au format HTML. Cependant, alors que vous devez obtenir votre JDK chez Blackdown.org, plutôt que chez Sun, la documentation du JDK ne sera pas dans le paquetage.
Sun fournit une documentation complète pour les versions 1.1.x et 1.2.x su JDK. La documentation pour la version 1.1.X est celle de la version 1.1.3 et je ne pense pas qu'elle ait été modifiée depuis.
Dans le sous-répertoire demo vous trouverez de nombreux exemples. Trouvez les fichiers HTML qui lancent les applets Java et rendez-les exécutable comme nous l'avons vu plus haut, comme cela vous pourrez les lancer comme des programmes conventionnels.
Le sous-répertoire docs contient un guide du programmeur Java complet. Ceci est encore amélioré par l'apport du Tutoriel Java.
Sun possède un tutoriel Java complet qui peut vous aider à accélérer nettement votre programmation en Java. Le tutoriel complet, ainsi que certaines des ses parties spécifiques peuvent être téléchargées :
Vous pouvez également lire le tutoriel en-ligne à l'adresse http://java.sun.com/docs/books/tutorial.
Notez bien que : Alors que vous êtes libre de mettre ce tutoriel à disposition sur un réseau local ou un intranet, Sun demande que vous ne le mettiez pas en libre service sur l'internet.
C'est un navigateur écrit entièrement en Java. C'est pour cela que même sur un processeur de type Pentium 133 MHz, il sera très lent. L'avantage c'est qu'il est un des rares navigateurs disponibles sous Linux pouvant faire tourner des applets Java. Il est également très intéressant pour d'autres raisons.
HotJava est extrêmement modulaire, l'interface utilisateur peut être personnalisée facilement et il a une faible empreinte (il n'occupe pas beaucoup de ressources système). En fait, c'est ce que raconte Sun. En pratique, si j'essaye de charger des applets Java alors que d'autres applications tournent, le navigateur me claquera dans les bras. J'aurais pensé que s'il avait une faible empreinte cela n'arriverait pas - enfin... [NdR: bug != taille (!!)]
Sun déclare en plus que ce navigateur est idéal pour différents équipements - tels que les visio-phones ou les PC de bureau. Tout ce que je peux dire c'est que tant que le navigateur ne sera pas plus rapide (sur mon pentium avec 32 Mo de RAM il mets à peu près trois minutes à se lancer), et plus fiable, il est peu probable qu'il vous soit utile à moins que vous ayez vraiment un processeur très rapide.
Le coeur de HotJava est le Composant HTML HotJava. C'est un JavaBean qui parcourt et affiche l'HTML. Il peut être inclus dans vos propres applications, n'importe quoi allant du lecteur de forums au four micro-ondes (oui, maintenant il y a même des fours à micro-onde et des réfrigérateurs qui vous donnent un accès à l'internet), peut l'utiliser pour afficher des informations.
HotJava supporte les standards internet suivants :
Les paquetages suivant sont également à votre disposition :
Le mois dernier j'avais expliqué comment mettre en place un serveur HTTP Apache. Le mois prochain j'ai l'intention de relier ces deux articles en montrant comment incorporer les extensions javapache à Apache, comme cela vous pourrez utiliser Java pour créer des pages HTML dynamiques et des applications serveur pour améliorer votre site web.
Dans un article futur je devrais faire un tours des Plug-ins disponibles pour Netscape et montrer combien il est simple de développer vos propres plug-ins. Entre-temps J'attends vos commentaires et vos suggestions pour les articles futurs.
Note de l'éditeur : Le Linux Journal d'octobre, uniquement dans sa version en-ligne, contient deux articles traitant de Java :
Traduction française de Xavier Serpaggi.