jeudi 27 septembre 2007

Valider un schéma XSD en java

La validation d'un schéma XSD permet de vérifier qu'un document est bien conforme. Cette action se fait en même temps que le parsing, pour cela il est nécessaire de mettre dans la première ligne du xml le schéma que doit vérifier les données XML.



<dossier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation=
"http://mydomain.org/schema/dossier.xsd">




DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringComments(true);
dbf.setNamespaceAware(true);
dbf.setValidating(true);
dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
try {
documentBuilder = dbf.newDocumentBuilder();
documentBuilder.setErrorHandler(new DossierErrorHandler());
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
ByteArrayInputStream bif = new ByteArrayInputStream(xml.getBytes());
documentBuilder.parse(bif);



Il est également possible de forcer le schéma
par


dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdFile));



Ou bien par une ressource :

InputStream schemaIs = getClass().getResourceAsStream("/schema.xsd");
sp.setProperty(JAXP_SCHEMA_SOURCE, schemaIs);

Utilisation des filters dans maven

Les filter de maven permettent de copier des resources en modifiant le contenu défini comme étant filtré. Ils sont utiles pour fonctionner dans différent environnement. Notamment dans les fichier de propriétés qui définissent des propriétés pour passer les test unitaires.

Supposons qu'il soit nécessaire de configurer un chemin d'un fichier de log différemment suivant que l'on travaille sur un station LINUX ou sur son poste de développement Windows.

Ce fichier est défini dans un fichier de src/main/resources/log-aida.properties

son contenu est :

aida.logFile=${fileLog}


Il faut définir dans le fichier pom.xml que ces resources sont filtrées

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
[...]
</build>



Dans le fichier ~/.m2/settings on défini cette propriété

   <profiles>
<profile>
<id>unix</id>
<properties>
<filelog>/tmp/log.prout</filelog>
</properties>
</profile>
</profiles>
<activeprofiles>
<activeprofile>unix</activeprofile>
</activeprofiles>


Dès lors quand on tape mvn resources:resources le fichier src/main/resources/log-aida.properties est copié vers target/classes/log-aida.properties et son contenu est

aida.logFile=/tmp/log.prout


mercredi 26 septembre 2007

Les Web Services

Généralité

Ces dernière années ont vus l'émergence d'un nouveau type d'appel distant s'appuyant sur le protocole HTTP : Les Web Services . Ils permettent de réaliser des appels distants de manière standard et simple.

Bien que, ces aspects sont abordés par CORBA et RMI, la complexité de ces protocoles les a réservés à des applications très techniques. Les Web Services, en revanche sont facile à mettre en oeuvre .

Les services Web permettent de traiter les requêtes synchrones. Fonctionnement, un Web Service est comme un Call mais ses fonctions de sérialisation et de transport sont réalisées à l'aide des protocole HTTP et SOAP et non plus en utilisant une méthode propriétaire. Initié par Microsoft, SOAP (Simple Object Access Protocol) fournissait un cadre pour une généraliser les opérations de Call en utilisant le XML. Le Web Service ajoute les bénéfices du HTTP à SOAP. Le Web Service possède donc les qualités ces protocoles.

  • La robustesse de HTTP
  • L’interopérabilité du XML
  • Les réalisations de Web Service sont indépendantes du système d'exploitation et du langage de programmation utilisé.

A l'aide de son langage de description (WSDL), il permet de faciliter les échanges de données. Il permet également la communication normalisée entre les applications au sein des entreprises et entre les entreprises. Le langage de description de WebService : le WSDL (Web Service Deploiement Langage) permet de décrire un Web Service.

Il convient de bien comprendre les atouts qui ont fait le succès des Services Web et pour savoir les utiliser à bon escient.

  • Ils s’appuient sur le protocole le plus robuste de tous les réseau : HTTP
  • Ils ne sont pas propre à un langage en particulier et sont formalisé par un standard
  • Ils proposent un langage de description de service (Descripteur simples à comprendre)
  • Ils sont à la mode et dispose donc d'un support important

Prérequis technique

Pour utiliser des services Web, il faut d'abord un serveur d'application et d'un moteur de Web Service. En java, les implémentations incontournables sont

  • AXIS implémentation libre sous licence apache
  • Websphere
  • WebLogic

Le rôle de ce composant est de répondre au requêtes HTTP en les transformant en appel d'un efonction JAVA.

Dans le cadre d’un développement de Service-Web il est recommandé de n’avoir aucune interface visuelle dans la Webapp.

Utilisation des service Web

Le « Service Web » est utilisé pour retourner le résultat d'une fonction de traitement d'un objet Métier. Concrètement, vous n'aurez pas à modifier vos anciens développements pour transformer votre classe métier en service Web car vous utiliserez les Web Services comme une surcouche. Cela permet d’éviter les re-développement de l'application.

Une bonne pratique consiste à ne pas appeler directement les classes métiers mais en passant par des «Classes Façades » qui permettent de définir clairement quelles sont les méthodes de accessibles par le Web.


Avantages

Dans les systèmes d'information, il est fréquent de voir des réseaux se modifier, soit du point de vue des machines soit du point de l'architecture. Le service Web est alors idéal car il ne nécéssite que peut de développement pour être mis en place autour d'une ancienne architecture et garanti un agencement très souple de l'architecture.

Bien souvent, vous mettrez en comparaison les Web Service avec des appels RMI car la fonction première du RMI (Remote Method Invocation) est la même que les services WEB.

RMI
Web Service
Faible interropérabilité Forte interropérabilité
Cout de traitement 2/3 moins élevé que le Web Service Cout processeur élevé
Transmet l'état de l'objet L'état de l'objets doit être transmis en paramètre.
Complexe à mettre en ouvre Simple à mettre en oeuvre
Protocole nécessitant une forte cohérence des unités de traitement entre elle. (Quand un composant ne fonctionne plus plus rien ne fonctionne) Protocole robuste.
Difficile à optimiser Plus simple à optimiser.

Dans les pages précédentes j'ai souvent affirmé que la performance d'une méthode dépendait de l'intelligence de la programmation. Il en va de même pour les services Web, même s'ils sont réellement plus coûteux que des appels RMI, il sont plus simples à étudier et donc à optimiser.

Si vos machines ne se trouvent pas dans un même endroit, il n'est pas nécessaire de se poser de question c'est le Web Service qu'il faudra choisir. Dans le cas contraire, pour contrebalancer le couts des appels au Web Service il faut tout simplement diminuer le nombre des appels et augmenter la granularité.

En un mot, toute la richesse du Web Service réside dans sa simplicité et son interopérabilité. Ces qualités doivent être préservées.

Ce que ne sont pas les Web Services / Inconvénients

Les Web Services ne sont pas une méthodologie de développement de services utilisée dans le Web. En clair, ce n’est pas parce que votre service est utilisé dans une page Web qu’il doit utiliser un Web Service.

En outre, les services Web ne sont pas appropriés pour tous les types de traitements.Ils ne concernent qu’une sous classe de service (Qu’on appelle les services sans état – stateless ) :

  • Ne les utilisez pas pour des processus asynchrones.
  • Ne les utilisez pas pour des fonctions qui doivent être fréquemment appelées

Enfin, il faut signaler que les Web Services sont à la mode et plus ou moins succeptible d'être assaisonés à toutes les sauces. A vous de voir...

Le plus simple des services Web

Le plus simple des services web est une simple classe JAVA que l'on utilise avec l'extension JWS (Java Web Service) et qui se place dans un repertoire de la WebApp. On peut alors directement appeler les service en question par un Call. Vous programmer donc une fonction Web de la même manière qu'une JSP. Le fin du fin étant qu'elle peut être compilée à la volée.

Architecture

L'architecture des applications

Par rapport aux applications standard l'architecture d'une service web est un petit peu différente, en effet, il est possible de déployer un service web unitairement. Par conséquent il est envisagable de n'avoir qu'un seul moteur de service Web.

Supposons que vous ayez deux applications Web : une application de facturation et une application pour les payes. Ces WS sont appeléspar une troisième application extérieure. La première tendance sera de rajouter à chaque application un moteur de service web. Cette solution n'est pas mauvaise, toutefois elle presente l'inconvénient de caler le cycle de vie de l'application de Service Web sur le cycle de vie de l'application Web IHM. Généralement les services Web sont appelés à partir de traitements batch. Ceci a pour conséquence de rendre interdépendantes au panne et maintenance l'application WebService de l'application IHM. Il vous faudra donc faire un arbitrage entre le degré d'interconnexion entre le service Web et l'application et la tolérance au pannes que vous souhaitez assurer.

Ces trois possibilités sont détaillées dans le schéma ci dessous.Les grand rectangles représentent les application.

La mécanique interne d’un service Web

Pour utiliser un service Web il faut réaliser les 5 couches techniques que l'on voit sur le dessin ci dessous. Nous n'évoquerons pas la partie Métier du coté du serveur car elle est complètement dépendante de la problématique.

  • Configurer le dispatcher : C'est ici que nous décrivons notre service Web à partir du langage de description de service web WSDL.
  • Couche de Médiation : Elle nous permet d'écrire notre requête directement à partir du code JAVA sans avoir une seule ligne de XML à taper. Ces médiateurs sont générés automatiquement à partir du fichier WSDD.Nous le verrons dans le chapitre suivant
  • Les façades : Il s'agit de l'opération qui consiste à utiliser les classes métier. Dans les facades on doit gérer les instanciations des classes métier.

Préparer votre classe métier

Vous avez le choix dans les réponses que le web service vous retournera après son appel, ce peut être des type simples comme int ou double, mais le plus souvent vous souhaiterez faire transiter des type structurés (des beans). Cependant, les web service ne permettent pas de sérialiser et de désérialiser des types aussi complexes que l'on pourrait le souhaiter. Par exemple les interfaces java.util.Set ne sont pas sérialisables dans les web service et il est nécessaire de passer par une étape intermédiaire.

Lorsque vous créez votre web service à partir d'une classe métier, il vaut mieux faire intervenir une classe façade qui au lieu de retourner des beans complexe qui intègre de la logique métier ne retournera que des beans stricto senso qui seront des copies de vos bean métiers qui leur enlève le superflux.

On a donc trois opérations pour créer notre façade :

  • Créer des beans de retour allégés
  • Créer des beans de paramètres allégés
  • Créer la méthode façade acceptant ces beans

Les utilitaires vont générer un WSDL qui comportera les informations qui permettront d'enrichir le bean des méthodes qui permettront la sérialisation. Il existe deux méthodes pour enrichir le bean, soit on utilise des classes qui manipuleront le bean pour le remplir, c'est cette méthode qui est retenue par IBM, soit le code du bean est modifié, c'est cette philosophie qui est utilisée par Axis.

Création d'un fichier WSDL à partir d'une classe JAVA

Une fois que notre service est isolé à l'aide des façade, il est temps de créer le descripteur de Web Service. A partir de ce descripteur, nous allons enrichir le bean pour le rendre serialisable.

WSAD

Puis, sous WSAD c'est très simple, il suffit de se servir de l'assistant et de se laisser guider.

Dans cet environnement, les classes de médiation sont appelée proxy. Vous devez choisir votre implémentation, selectionner la classe que vous souhaitez transformer en WebService. Attention, dans les premières versions de WSAD, ce n'est pas très fiable.

Axis et Eclipse

Axis nous fournit des utilitaires qui permettent de générer le WSDL.

% java org.apache.axis.wsdl.Java2WSDL -o wp.wsdl -l"http://localhost:8080/axis/services/WidgetPrice"
-n "urn:Example6" -p"samples.userguide.example6" "urn:Example6" samples.userguide.example6.WidgetPrice

  • -o indique le nom du fichier de sortie
  • -l indique l'endroit ou est rendu le service ( Notez qu'à l'interieur d'un web service nous avons des information qui sont propore au serveur.
  • -n est l'espace de nommage du WSDL cible
  • -p indicates a mapping from the package to a namespace. There may be multiple mappings.
    the class specified contains the interface of the webservice.

Nous générons un fichier WSDL qui décrit la signature de la méthode ainsi que le serveur qui rend ce service. En parcourant ce fichier on voit qu'il contient les informations

  • La première partie types contient la description des Types (Bean de paramètre et de résultats qui seront utilisés dans notre WebService.
  • La deuxième partie comporte la structure des messages.
  • La troisième partie comporte les bindings.Qui représente les fonctions accessible par notre service.
  • La quatrième partie nous présente la liste des services chaque service est rattaché à une URL.

Appel de Web Service

Nous avons deux possibilités pour tester un service web que nous avons déployé sur le serveur :

  • Utiliser le client de test fourni par WSAD et accessible par un click droit sur un WSDL
  • Générer automatiquement les classes de proxy à partir du WSDL et les utiliser

WSAD propose un assistant pour vous aider à construire des clients de WebService à partir de
Descripteurs de Web Service (Fichier aux extensions .wsdl ). Le WSDL comprend des informations de :

  • Définition de Schéma de message.
  • Point d’appel (EndPoint)

Le produit de cette opération est une série de classes qui vous permettrons d’appeler les services Web et de reconstruire un objet à partir d’un flux.

Penser au moment de livrer le wsdl à remplacer l’adresse ‘localhost :9080’ par le nom ou l’adresse IP du serveur sur lequel le service est déployé.

La génération des classes de médiation

Vocabulaire :

Binding désigne en anglais un lien entre deux choses, c'est précisement ce qu'il fait : Il vous permet de relier votre code java au web service en ignorant le fonctionnement d'une web service. C'est souvent bien utile. En pratique on se sert pratiquement toujours des bindings.

Les binding sont générés en même temps que sont généré vos bean enrichis.Alors utilisez les !

Cas d'école :

Etudions le descripteur de déploiement des WebServices fournis par google : GoogleSearch.wsdl. Nous y voyons le schéma du Web Service. A partir de ce schéma, il nous est possible de générer les classes qui permettrons d'appeler ce service sans que jamais nous n'ayons besoin de coder nous même les fonctions d'appel. Il faut comprendre que les bean enrichis doivent être présent non seulement du coté serveur mais également du coté client.

Voici la ligne de commande utilisée pour axis

java org.apache.axis.wsdl.WSDL2Java -o src -d Session -s -S true -Nurn:Matrix matrix.ws wp.wsdl

Déploiement

Il nous reste ensuite à générer les fichiers de déploiement, ces fichiers seront utiles pour informer le dispatcher des services qu'il doit rendre. C'est le seul lien qui exite entre la classe JAVA que vous avez créer et votre dipatcher de requête. Sans le savoir vous les avez déjà générés, ce sont les fichiers deploy.wsdl et undeploy.wsdl qui se trouvent au même endroit que vos dindings.

Table d’association des type JAVA->SOAP

Vous pouvez vous servir de ce tableau pour comprendre ce qui est décrit par votre WSDL.

xsd :base64Binary

byte[]
xsd:boolean boolean
xsd:byte byte
xsd:dateTime java.util.Calendar
xsd:decimal java.math.BigDecimal
xsd:double double
xsd:float float
xsd:hexBinary byte[]
xsd:int int
xsd:integer java.math.BigInteger
xsd:long long
xsd:QName javax.xml.namespace.QName
xsd:short short
xsd:string java.lang.String

Et l'interropérabilité ?

Dans certaine entreprise des petites applications ont parfois des besoins d'appeler des services qui sont déjà disponibles sur d'autre serveurs. Les WS seront intéressant pour faire communiquer une application PHP et JAVA.

  • JAVA
  • C++
  • Perl / Python etc.
  • Rebol
  • PHP

mardi 25 septembre 2007

Le langage JAVA

Les interfaces


Une interface possède en Java

  • Un nom
  • Un package
  • Des méthodes

Exemple de code :



package mypackage;

interface Voiture{
accelere();
freine();
tourneLeVolant(float degres);
};


Les classes

La classe est l'un des élément de base de java. Une classe d'objets ou classe doit avoir :

  • Un nom
  • Un package
  • Des attributs
  • Des méthodes

Voici une définition de classe :

Exemple de code :


package mypackage;

class Client {
String nom;
String prenom;
};


Les relations entre les classes

On ne peut dériver un classe que d'une seule classe en Java, c'est une des limitation de Java savament désignée par : Il n'est pas possible de faire du polymorphisme en Java. (Ca fait bien ! )

Voici une définition de classe qui dérive de la classe client. La dérivation s'écrit à l'aide du mot clé extends


package mypackage;

class ClientHeureux extends Client{
void smile();
};



Le mot clé extends signifie que la classe ClientHeureux est une spécialisation du Client. Le ClientHeureux possède aussi un nom et un prénom mais il possède la spécificité de sourire.

Les portées ou scopes

Un scope est utilisé pour caractériser le champ d'application d'une fonction. Une bonne pratique consiste à utiliser les visibilité minimale, toutefois, Voici les différentes visibilités qui sont utilisées en JAVA.

  • default
  • private
  • protected
  • public

Private

Caractérise un attribut ou une méthode organique, c'est à dire qu'elle n'est accessible que depuis la classe d'objet considérée.

Protected

Caractérise un attribut ou une méthode organique. Toutefois, les descendant des cette classe d'objet auront également accès à cette méthode.

Public

Caractérise uns attribut ou une méthode qui est accessible depuis n'importe quelle classe.

Default

Caractérise un attribut ou une méthode accessible depuis tout le package. Si aucun mot clef n'est donné, c'est cette visibilité qui est utilisée.

Les packages

Les packages permettent d'organiser les classes et interfaces en sous ensembles, c'est la notion de package. Dans un package on place plusieurs classes.

Du point de vue strict de la programmation cette organisation apporte des bénéfices au niveau de la clarté.

Ce qui est important c'est de définir pour le projet une organisation homogène. Dans la pratique, on utilise les package pour faire un découpage fonctionnel et ou technique.

Par exemple, toutes les classes qui se rapportent à un client peuvent être regroupées dans un même package, on procède dans ce cas à un découpage fonctionnel. Il est également possible de regrouper les classes d'un point de vue technique, par exemple on regroupe entre elle toutes les classes se rapportant au parsing d'un fichier.



Les Exceptions


Une des caractéristiques de JAVA est de gérer depuis la runtime les exceptions. Ainsi il est impossible de créer un erreur de segmentation. Tous les programmes JAVA se termine donc de manière normale.

Pour parler des exceptions il est nécessaire de se placer dans le cadre de l'execution d'un programme. Un programme est manipulé au niveau de la runtime comme une pile d'appel. Le sommet de la pile donne l'instruction qui va être executée. Parfois certaines opérations sont impossibles et provoquent un résultat indéterminé, c'est par exemple le cas d'une division par zéro. Le processeur n'est pas en mesure de donner le résultat, il a donc le choix :

  • Soit il donne une réponse aléatoire... Mais ce n'est pas le genre de l'informatique
  • Soit il s'arrête et déclare qu'il ne sait pas faire
  • En Java, il a une troisième possibilité : Il lance une exception.

Attention à ne pas confondre une exceptions avec le traitement d'erreur, car il y aura toujours des cas qu'on avait pas prévu, on s'appuie sur la machine virtuelle pour ces cas là. Pour autant, il n'est pas bon de faire du traitement d'erreur avec des exceptions.

La lancée d'une exception c'est comme une bulle dans la stack, elle remonte jusqu'a ce qu'un bloc d'un frame supérieur soit en mesure de traiter l'exception.

La lancée d'une exception se fait par le mot clé throw. Si l'exception n'étend pas une RuntimeException, il est nécessaire que vous ajoutiez dans votre code un block de traitement d'exception par les mots clés try et catch.

La récupération d'une exception se fait par le mot clé catch.

Pour pouvoir attrapper une exception il est nécessaire de l'avoir placée dans un block try.

Il existe deux types d'exceptions :

  • Les exceptions standards qui dérivent de la classe Exception
  • Les exceptions RuntimeException qui sont une sous classe de la classe des Exception, celle ci sont déclenchées par une impossibilité du processeur de traiter l'instruction. Par exemple ArithmeticException est une RuntimeException car le processeur ne sait pas diviser par zéro.

Clément Soullard, Juin 2004

Ce document est placé sous la licence libre Free Doc. La reproduction partielle ou totale de ce document est permise et encouragée. Cependant, les images du film Matrix ne sont évidement pas libres de droits.

Si vous faites évoluer le document merci de me tenir au courant.

Barbarismes Javaien et liens

Java Term Definition More Information
Applet An applet is a Java program that runs within the web browser. Applets use a graphical user interface and may have text, images, buttons, scrollbars, and sound. AWT and SWING are frequently associated with articles and tutorials about creating applets.
  1. Building Applets
  2. Trail: Writing Applets
  3. Package java.applet
AWT The Abstract Window Toolkit (AWT) is a package of classes for creating components such as buttons, menus, and scrollbars for applets and standalone applications.
  1. AWT Fundamentals
  2. Using the AWT to Create a GUI
  3. Package java.awt Description
  4. AWT Forums
Java API The Java Application Programming Interface (API) is prewritten code, organized into packages of similar topics. For instance, the Applet and AWT packages include classes for creating fonts, menus, and buttons. The full Java API is included in the Java 2 Standard Edition download.
  1. API Documentation
  2. Building an Application
JavaBeans JavaBeans architecture provides a way of designing reuseable software components that can be visually manipulated in builder tools. Beans can besimple like buttons, or more complex like a tool to access databases.
  1. JavaBeans Technology
  2. JavaB eans Technology: Unlocking The BeanContext API
  3. JavaBeans Forums
Java Foundation Classes (JFC) The Java Foundation Classes (JFC) are a set of GUI components and other services simplifying the development and deployment of desktop and Internet/Intranet applications.
  1. Java Foundation Classes (JFC)
  2. JFC FAQ
  3. Project Swing Forum
  4. Accessibility Forum
Java Native Interface (JNI) JNI is the native programming interface for Java that is part of the JDK. The JNI allows Java code to operate with applications and libraries written in other languages, such as C, C++, and assembly. Recommended only for advanced programmers.
  1. Trail: Java Native Interface
  2. Chapter 5: JNI Technology
  3. Java Native Interface, 1.2
JavaServer Pages (JSP) Create dynamic web pages with JSP by embedding scriptlets (Java programming language code) with HTML. JSP pages process forms, perform calculations, or do anything else that can be written with the Java programming language. To develop and test JSP, download the JavaSever Web Development Kit, and J2SE.
  1. JavaServer Pages Tutorial
  2. JavaServ er Pages: A Developer's Perspective
  3. JSP Pro (Two chapters in PDF)
  4. Core Servlets and JavaServer Pages (Two chapters)
  5. JavaServer Pages Forums
  6. JavaSever Web Development Kit Forums
Java 2 Platform, Enterprise Edition (J2EE) The J2EE platform provides a component-based approach to the design, development, assembly, and deployment of enterprise applications. The J2EE platform gives you a multitiered distributed application model, the ability to reuse components, a unified security model, and flexible transaction control.
  1. Java 2 Platform, Enterprise Edition
  2. J2EE Tutorial
  3. Downloads
  4. Java BluePrints
  5. Enterprise JavaBeans(EJB) Technology Fundamentals
  6. Java Programming Forums
Java 2, Micro Edition (J2ME) Java 2 Micro Edition (J2ME) is targeted for the consumer and embedded market. The API specifications are based on Java 2 Standard Edition (J2SE), but modified to meet the unique requirements of each product. J2ME makes it possible to write Java applications for cell phones, smart cards, pagers, and other consumer devices.
  1. Java 2 Micro Edition (J2ME) Technology
  2. Wireless Developer
  3. How Wireless Applications Work
  4. Java Wireless Technology Discussions
Java 2, Standard Edition (J2SE) This download includes the essential compiler, tools, runtimes, and APIs for writing, deploying, and running applets and applications in the Java programming language.
  1. Java 2 Platform, Standard Edition (J2SE)
  2. Online Documentation
  3. Introducing the Java Platform
  4. Getting Started
Java Virtual Machine (JVM) The Java virtual machine executes instructions that a Java compiler generates. This run time environment, or JVM, is embedded in various products, such as web browsers, servers, and operating systems.
  1. Java Virtual Machine Forums
JDBC JDBC is a Java API for executing SQL statements. By using the JDBC API, you can access almost any data source, from relational databases to spreadsheets to flat files. J2SE includes the JDBC API.
  1. JDBC API
  2. Lesson: Learn JDBC Basics
  3. JDBC Forums
JDK JDK is the short-cut name for the set of Java development tools, consisting of the API classes, a Java compiler, and the Java Virtual Machine interpreter, regardless of which version. The JDK is used to compile Java applications and applets. The most current version is the J2SE., the preferred term these days. If you use J2SE 1.2 and later to develop applications, you are using what's known as the Java 2 Platform.
  1. Download J2SE 1.4
  2. Online Documentation
  3. Introducing the Java Platform
  4. Getting Started
JINI The Jini network technology enables any service--from enterprise systems to kitchen appliances--to network smoothly and simply. The Jini architecture lets each service (device or software) tell others how to talk to it, without any administrator settings.
  1. Jini Network Technology
  2. Distribu ted Events in Jini
  3. Technology
  4. How to Attach a User Interface to a Jini Service
  5. Core Jini
  6. General Distributed Computing Forums
Project Swing The javax.swing package of classes is used to create GUI components for applets and applications. Project Swing classes enable programmers to specify a different look and feel for each platform, or a uniform look across all platforms. Swing is the project code name for the lightweight GUI components in JFC.
  1. Java Foundation Classes
  2. Fundamentals of JFC/Swing: Part I
  3. Fundamentals of JFC/Swing: Part II
  4. Creating GUI with JFC/Swing
  5. Project Swing: Building a User Interface
  6. Project Swing Forums
RMI Remote Method Invocation (RMI) lets Java applications communicate across a network. The communicating applications can be running on different computers on opposite sides of the planet. This higher-level and method-based approach to network communications allows access to a remote object as easily as a local object.
  1. Java Rmote Invocation (RMI)
  2. Fundamentals of RMI Short Course
  3. RMI-IIOP Documentation
  4. Lesson 8: Remote Method Invocation
  5. RMI-IIOP Forums
Servlets A servlet is an extension to a server that enhances the server's functionality. Servlets are most commonly used to process forms, handle redirects or authenticate user names and passwords, and create dynamic content.
  1. Java Servlet Technology
  2. Lesson: Overview of Servlets
  3. Lesson 5: Writing Servlets
  4. What 's New in the Servlet API?
  5. Funda mentals of Java Servlets
  6. JavaServer Web Development Kit Forums

Introduction au JAVA

Allo. Comment JAVA ?

Principes de base :

Langage et plateforme JAVA

Le JAVA est un langage informatique orienté objet qui a été créé pour satisfaire à plusieurs besoins :

  • Simplicité de programmation
  • Portabilité
  • Simplicité de la gestion de la mémoire

Pour être exact il faut distinguer le langage JAVA de la plateforme de developpement JAVA qui sont souvent assimilés :

  • Une plateforme de développement permet de créer et d'exécuter des programmes.
  • Un langage permet de décrire soit des objets, soit des actions.

La plateforme Java est utilisée pour exécuter des programmes, il existe déjà des programmes écrits en JAVA qui tournent sous des plateforme autre que JAVA : la plateforme Mono ou .NET.

Cette plateforme est constituée par :

  1. Un compilateur
  2. Un interpréteur ou runtime
  3. Des librairies ou APIS

Les trois étages de représentation en JAVA

En réalité, la transformation en langage machine repose sur deux moments :

  1. La compilation
  2. L'interprétation runtime

Forces et faiblesses du JAVA

Le JAVA est simple, facile à programmer, facile à debugger

Sans cet élément crucial, il est probable que le JAVA n'aurait pas connu un tel succès

Le kit de développement est gratuit et la communauté de développeurs est énorme

De nombreux frameworks sont proposés gratuitement pour accélérer vos développements.

Le JAVA est réellement portable sur les environnements Solaris, Linux, Windows, Mac OS-X et AIX sur tous les aspects non visuels.

C'est a dire qu'aucun développement n'est nécessaire pour effectuer un portage.

Le JAVA est portable facilement quand il y a des aspects visuels à prendre en compte.

C'est a dire que les bugs rencontrés lors des portages seront mineurs et facilement corrigeables.

Le JAVA a des performances moindres sur les aspects nécessitant beaucoup de traitement processeur ( Vidéo, 3D )

Par contre, il est suffisant pour l'imagerie et la publication.

Le JAVA n'est pas recommandé lorsqu'on souhaite se servir de fonctions propres à un OS

Le principe de JAVA étant de factoriser les talents communs à tous les OS, il faudrait revenir sur sa portabilité si l'on souhaitait exploiter des spécificités du système.

Comparatifs technologiques

J’ai un jugement relativement peu nuancé concernant le bénéfice de la technologie JAVA, si je suis intègre dans mon prosélytisme, il n’en demeure pas moins que mon jugement est sans doute une version légèrement euphorique du marché. Cet avertissement donné, je ne parlerai plus au conditionnel ! Le Java, disais-je, est formidable : Il peut être utilisé dans tous les champs connus d’applications de l’informatique :

  • Interface Utilisateur (Client Lourd)
  • Interface Web (Client Léger)
  • Middleware (Batch et Workflow)
  • Informatique Scientifique
  • Informatique embarquée
  • Temps Réel

La différence est que suivant le domaine il ne possède pas les mêmes qualités à opposer à ses adversaires.

Interface Utilisateur

Pour les interfaces utilisateurs on utilise essentiellement les Langages Objet comme C++ et Objective C pour les applications grand public. Ce type d’application il nécessite des installeurs.

Pour les petite application d'entreprise on utilise également du VB et d’autres langages scriptés, les exigences de robustesse et de facilité d’installation sont habituellement moindres. Par rapports à ces deux alternatives les avantages du JAVA sont les suivants :

  • Pour les applications grand public, l’installation est simplifiée du fait de la portabilité native du JAVA.
  • Par rapport aux applications utilisée dans les entreprises basé sur des scripts. Le JAVA possède un design (lié à la force/rigueur du langage) qui lui donne un amortissemenet plus long à ce genre d’application. Cela qui garanti au prix d’un effort un peu plus important au début d’avoir une meilleure pérennité du produit développé.

Interface Web et Middleware

C’est véritablement l’environnement dans lequel le JAVA a vraiment tiré son épingle du jeu, lorsqu’on l’attendait plutôt sur les aspects plus graphiques et grand public. Ce sont les développeurs qui en votant avec leurs pieds ont fait du JAVA un acteur majeur du coté des serveurs. Sa force de ce point de vue réside dans la réponse normalisée qui a été apportées très tôt aux CGI par la plateforme J2EE.

Ses concurrents actuels sont le PHP et les solutions Microsoft. PHP connaît un succès certain en particuliers dans les sites qui ont besoins d’une grande réactivité, mais globalement, les solutions JAVA prennent l’avantage dès qu’il s’agit d’un projet dont l’amortissement est prévu sur plus de 5 ans. Sur le Middleware, IBM s’est aligné avec JAVA et il est pratiquement le seul en lice pour les technologies de demain à ce niveau.

Informatique scientifique

On dépasse progressivement l’époque où c’était avant tout la puissance qui était demandée à l’informatique scientifique. Maintenant, le JAVA est attendu dans toutes les applications scientifiques réellement critiques, comme le pilotage d’un robot sur Mars, pilotage de fusées etc. C’est un phénomène assez nouveau, d’une part les nouveaux chercheurs connaissent ce langage.D’autre parts, on sait mieux intégrer le risque « humain » de programmation.

Informatique embarquée

L’informatique embarquée occupe maintenant une part non négligeable du CA global de ce secteur avec l’avènement du téléphone portable et plus généralement de l’informatique embarquée. Et, surprise, Sun a réalisé une partie non négligeable de son CA l’année dernière sur les jeux embarqués dans les téléphones portables. Pour les mêmes raisons de fiabilité on trouve bénéfice à utiliser ce langage sur des plateformes embarquées.

Runtime et JDK

Sun est le principal acteur du JAVA c'est lui qui détient les droits sur la norme. Cette norme est publique et bien que les sources java des librairies soient publiques, les codes source de la machine virtuelle ne sont pas publics.

Sun fournit deux types de plateforme Java :

JRE

Java Runtime Environnement : c'est ce qu'il faut installer pour faire fonctionner JAVA, ce kit comprend la RunTime ainsi que divers utilitaires qui peuvent être utilisés lors de l'exécution d'un programme, par exemple un gestionnaire de sécurité.

JDK

Java Developpement Kit : Ee kit en plus de la runtime comprend un compilateur, un packager et divers utilitaires qui permettent de créer des programmes JAVA. Il sert pour le developpement. Ce Kit peut être nécessaire pour faire fonctionner certaines applications serveur, en particulier les serveur d'application car il ont besoin d'avoir un compilateur.

La compilation

Pour produire un programme JAVA, il est nécessaire de le compiler. Ainsi le code est transformé en des classes compilées (Qu'on appelle bytecode) qui pourront s'exécuter sur la machine virtuelle.

On peut compiler en utilisant en ligne de commande le programme javac qui fait partie du JDK. Cependant, ce fontionnement est de plus en plus marginal et il existe des IDE gratuites et puissantes comme Eclipse qui effectuent graphiquement ce genre d'opération.

La machine virtuelle

Which pill would you take, the red or the blue?

Pour pouvoir être exécutées les intructions données par le bytecode sont transformées en instructions processeur. Puisque tous les processeurs ne disposent pas du même jeu d'instructions et que certaines opérations sont possibles en un seul cycle d'horloge sur un processeur tandis qu'elles se réalisent en plusieurs instructions sur un autre processeur, le rôle de la machine virtuelle est de convertir un jeu d'instructions propre au processeur.

C'est ici que se trouve la force et la faiblesse du JAVA. La phase d'interprétation du JAVA est celle qui le pénalise le plus par rapport à des langages tel que le C ou C++ qui produisent des exécutables directement en langage machine. En effet, la phase d'interprétation consomme du temps processeur. Les machines virtuelles récentes sont trois fois plus lente que celle en langage processeur. Mais Attention cependant, cela ne veut pas dire que le JAVA est trois fois plus lent car dans un ordinateur il n'y a pas que le processeur qui compte, habituellement ce sont plus les entrées sorties qui consomment le plus de temps.

De plus, ce désavantage en performance sur le papier est compensé par des aspects pratiques au niveau de la programmation. En effet, le langage JAVA est un langage facile à programmer, une bonne conception est souvent la plus grande source de gain en termes de performances. Il ne faut donc pas éliminer le JAVA avec cet argument va-tout que vous entendrez encore dans la bouche de certains vétérans : "Le java n'est pas suffisament performant".

En programmation C ou C++ c'est au programmeur d'allouer et de désallouer de la mémoire. En java on ne parle plus d'allocation de mémoire, mais de référencement d'objet. Pour le programmeur JAVA cette machine virtuelle est une aubaine car elle permet au progammeur de ne plus avoir en tête la représentation mémoire de son programme.

Quand on programme en C, il est facile de penser à allouer de la mémoire sinon ça ne marche pas. Il est par contre beaucoup moins nécessaire de désallouer de la mémoire car le programme fonctionne toujours même s'il consomme plus de mémoire, ce ne sont que de bonne habitudes de développement qui permettent de s'en sortir et il y aura toujours certaines fuites mémoire imprévisibles. C'est assez difficile de s'en apercevoir et difficile à réparer car l'incident se produit parfois longtemps après le développement. En Java, exit ce genre de problème. Ou presque...

Liens utiles

Le site de référence : On y trouve le JDK et tout un tas de tutoriaux (mais c'est en anglais).