vendredi 12 juin 2015

Cour java


  Partie 1 : Les bases du langage Java 2. Les notions et techniques de base en Java Imprimer Sommaire Consulter avec table des matières
Développons en Java   v 2.00  
Copyright (C) 1999-2014 .  


1. Présentation de Java


chapitre   1


Niveau : niveau 1 Fondamental 

Java est un langage de programmation à usage général, évolué et orienté objet dont la syntaxe est proche du C. Ses caractéristiques ainsi que la richesse de son écosystème et de sa communauté lui ont permis d'être très largement utilisé pour le développement d'applications de types très disparates. Java est notamment largement utilisé pour le développement d'applications d'entreprises et mobiles.
Quelques chiffres et faits à propos de Java en 2011 :
  • 97% des machines d'entreprises ont une JVM installée
  • Java est téléchargé plus d'un milliards de fois chaque année
  • Il y a plus de 9 millions de développeurs Java dans le monde
  • Java est un des langages les plus utilisé dans le monde
  • Tous les lecteurs de Blue-Ray utilisent Java
  • Plus de 3 milliards d'appareils mobiles peuvent mettre en oeuvre Java
  • Plus de 1,4 milliards de cartes à puce utilisant Java sont produites chaque année
Ce chapitre contient plusieurs sections :

1.1. Les caractéristiques

Java possède un certain nombre de caractéristiques qui ont largement contribué à son énorme succès :
Java est interprété
le source est compilé en pseudo code ou bytecode puis exécuté par un interpréteur Java : la Java Virtual Machine (JVM). Ce concept est à la base du slogan de Sun pour Java : WORA (Write Once, Run Anywhere : écrire une fois, exécuter partout). En effet, le bytecode, s'il ne contient pas de code spécifique à une plate-forme particulière peut être exécuté et obtenir quasiment les mêmes résultats sur toutes les machines disposant d'une JVM.
Java est portable : il est indépendant de toute plate-forme
il n'y a pas de compilation spécifique pour chaque plate forme. Le code reste indépendant de la machine sur laquelle il s'exécute. Il est possible d'exécuter des programmes Java sur tous les environnements qui possèdent une Java Virtual Machine. Cette indépendance est assurée au niveau du code source grâce à Unicode et au niveau du bytecode.
Java est orienté objet.
comme la plupart des langages récents, Java est orienté objet. Chaque fichier source contient la définition d'une ou plusieurs classes qui sont utilisées les unes avec les autres pour former une application. Java n'est pas complètement objet car il définit des types primitifs (entier, caractère, flottant, booléen,...).
Java est simple
le choix de ses auteurs a été d'abandonner des éléments mal compris ou mal exploités des autres langages tels que la notion de pointeurs (pour éviter les incidents en manipulant directement la mémoire), l'héritage multiple et la surcharge des opérateurs, ...
Java est fortement typé
toutes les variables sont typées et il n'existe pas de conversion automatique qui risquerait une perte de données. Si une telle conversion doit être réalisée, le développeur doit obligatoirement utiliser un cast ou une méthode statique fournie en standard pour la réaliser.
Java assure la gestion de la mémoire
l'allocation de la mémoire pour un objet est automatique à sa création et Java récupère automatiquement la mémoire inutilisée grâce au garbage collector qui restitue les zones de mémoire laissées libres suite à la destruction des objets.
Java est sûr
la sécurité fait partie intégrante du système d'exécution et du compilateur. Un programme Java planté ne menace pas le système d'exploitation. Il ne peut pas y avoir d'accès direct à la mémoire. L'accès au disque dur est réglementé dans une applet.

Les applets fonctionnant sur le Web sont soumises aux restrictions suivantes dans la version 1.0 de Java :
  • aucun programme ne peut ouvrir, lire, écrire ou effacer un fichier sur le système de l'utilisateur
  • aucun programme ne peut lancer un autre programme sur le système de l'utilisateur
  • toute fenêtre créée par le programme est clairement identifiée comme étant une fenêtre Java, ce qui interdit par exemple la création d'une fausse fenêtre demandant un mot de passe
  • les programmes ne peuvent pas se connecter à d'autres sites Web que celui dont ils proviennent.
Java est économe le pseudo code a une taille relativement petite car les bibliothèques de classes requises ne sont liées qu'à l'exécution.
Java est multitâche il permet l'utilisation de threads qui sont des unités d'exécutions isolées. La JVM, elle même, utilise plusieurs threads.

Il existe 2 types de programmes avec la version standard de Java : les applets et les applications. Une application autonome (stand alone program) est une application qui s'exécute sous le contrôle direct du système d'exploitation. Une applet est une application qui est chargée par un navigateur et qui est exécutée sous le contrôle d'un plug in de ce dernier.
Les principales différences entre une applet et une application sont :
  • les applets n'ont pas de méthode main() : la méthode main() est appelée par la machine virtuelle pour exécuter une application.
  • les applets ne peuvent pas être testées avec l'interpréteur. Elles doivent être testées avec l'applet viewer ou doivent être intégrées à une page HTML, elle même visualisée avec un navigateur disposant d'un plug in Java, .

1.2. Un bref historique de Java

Les principaux événements de la vie de Java sont les suivants :
Année Evénements
1995 mai : premier lancement commercial du JDK 1.0
1996 janvier : JDK 1.0.1
1996 septembre : lancement du JDC
1997 février : JDK 1.1
1998 décembre : lancement de J2SE 1.2 et du JCP
1999 décembre : lancement J2EE
2000 mai : J2SE 1.3
2002 février : J2SE 1.4
2004 septembre : J2SE 5.0
2006 mai : Java EE 5
décembre : Java SE 6.0
2008 décembre : Java FX 1.0
2009 février : JavaFX 1.1
juin : JavaFX 1.2
décembre : Java EE 6
2010 janvier : rachat de Sun par Oracle
avril : JavaFX 1.3
2011 juillet : Java SE 7
octobre : JavaFX 2.0
2012 août : JavaFX 2.2
2013 juin : Java EE 7
2014 mars : Java SE 8, JavaFX 8

1.3. Les différentes éditions et versions de Java

Sun/Oracle fournit gratuitement un ensemble d'outils et d'API pour permettre le développement de programmes avec Java. Ce kit, nommé JDK, est librement téléchargeable sur le site web d'Oracle :
http://www.oracle.com/technetwork/java/index.html
Le JRE (Java Runtime Environment) contient uniquement l'environnement d'exécution de programmes Java. Le JDK contient lui-même le JRE. Le JRE seul doit être installé sur les machines où des applications Java doivent être exécutées.
Depuis sa version 1.2, Java a été renommé Java 2. Les numéros de version 1.2 et 2 désignent donc la même version. Le JDK a été renommé J2SDK (Java 2 Software Development Kit) mais la dénomination JDK reste encore largement utilisée, à tel point que la dénomination JDK est reprise dans la version 5.0. Le JRE a été renommé J2RE (Java 2 Runtime Environment).
Trois plate-formes d'exécution (ou éditions) Java sont définies pour des cibles distinctes selon les besoins des applications à développer :
  • Java Standard Edition (J2SE / Java SE) : environnement d'exécution et ensemble complet d'API pour des applications de type desktop. Cette plate-forme sert de base en tout ou partie aux autres plate-formes
  • Java Enterprise Edition (J2EE / Java EE) : environnement d'exécution reposant intégralement sur Java SE pour le développement d'applications d'entreprises
  • Java Micro Edition (J2ME / Java ME) : environnement d'exécution et API pour le développement d'applications sur appareils mobiles et embarqués dont les capacités ne permettent pas la mise en oeuvre de Java SE
La séparation en trois plate-formes permet au développeur de mieux cibler l'environnement d'exécution et de faire évoluer les plate-formes de façon plus indépendante.
Avec différentes éditions, les types d'applications qui peuvent être développées en Java sont nombreux et variés :
  • Applications desktop
  • Applications web : servlets/JSP, portlets, applets
  • Applications pour appareil mobile (MIDP) : midlets
  • Applications pour appareil embarqué (CDC) : Xlets
  • Applications pour carte à puce (Javacard) : applets Javacard
  • Applications temps réel
Sun fournit le JDK, à partir de la version 1.2, pour les plate-formes Windows, Solaris et Linux.
La version 1.3 de Java est désignée sous le nom Java 2 version 1.3.
La version 1.5 de Java est désignée officiellement sous le nom J2SE version 5.0.
La version 6 de Java est désignée officiellement sous le nom Java SE version 6.
La documentation au format HTML des API de Java est fournie séparément. Malgré sa taille, cette documentation est indispensable pour obtenir des informations complètes sur toutes les classes fournies. Le tableau ci-dessous résume la taille des différents composants selon leur version pour la plate-forme Windows.
 
Version 1.0
Version 1.1
Version 1.2
Version 1.3
Version 1.4
Version 5.0
Version 6
Version 7
Version 8
JDK compressé  
8,6 Mo
20 Mo
30 Mo
47 Mo
44 Mo
73 Mo
 
151 Mo
JDK installé      
53 Mo
59 Mo
   
219 Mo
302 Mo
JRE compressé    
12 Mo
7 Mo
 
14 Mo
15,5 Mo
 
46 Mo
JRE installé      
35 Mo
40 Mo
   
106 Mo
136 Mo
Documentation compressée    
16 Mo
21 Mo
30 Mo
43,5 Mo
56 Mo
 
84 Mo
Documentation décompressée    
83 Mo
106 Mo
144 Mo
223 Mo
 
263 Mo
 

1.3.1. Les évolutions des plates-formes Java

Les technologies Java évoluent au travers du JCP (Java Community Process). Le JCP est une organisation communautaire ouverte qui utilise des processus établis pour définir ou réviser les spécifications des technologies Java.
Les membres du JCP sont des personnes individuelles ou des membres d'organisations communautaires ou de sociétés commerciales qui tendent à mettre en adéquation la technologie Java avec les besoins du marché.
Bien que le JCP soit une organisation communautaire ouverte, Oracle (depuis son reachat de Sun Microsystems) est le détenteur des marques déposées autour de la technologie Java et l'autorité suprême concernant les plates-formes Java.
Des membres du JCP qui souhaitent enrichir la plate-forme Java doivent faire une proposition formalisée sous la forme d'une JSR (Java Specification Request). Chaque JSR suit un processus qui définit son cycle de vie autour de plusieurs étapes clés : drafts, review et approval.
Chaque JSR est sous la responsabilité d'un leader et traitée par un groupe d'experts.
Il est possible de souscrire à la liste de diffusion du JCP à l'url : https://jcp.org/en/participation/mail
Cette liste de diffusion permet d'être informé sur les évolutions des JSR et des procédures du JCP et de participer à des revues publiques ou de fournir des commentaires.
Le site du JCP propose une liste des JSR par plates-formes ou technologies :
Une fois validée, chaque JSR doit proposer une spécification, une implémentation de référence (Reference Implementation) et un technology compatibility kit (TCK).

1.3.2. Les différentes versions de Java

Chaque version de la plate-forme Java possède un numéro de version et un nom de projet.
A partir de la version 5, la plate-forme possède deux numéros de version :
  • Un numéro de version interne : exemple 1.5.0
  • Un numéro de version externe : exemple 5.0
Le nom de projet des versions majeures fait référence à des oiseaux ou des mammifères.
Le nom de projet des versions mineures concerne des insectes.
Version Nom du projet Date de diffusion
JDK 1.0 Oak Mai 1995
JDK 1.1   Février 1997
JDK 1.1.4 Sparkler Septembre 1997
JDK 1.1.5 Pumpkin Décembre 1997
JDK 1.1.6 Abigail Avril 1998
JDK 1.1.7 Brutus Septembre 1998
JDK 1.1.8 Chelsea Avril 1999
J2SE 1.2 Playground Décembre 1998
J2SE 1.2.1   Mars 1999
J2SE 1.2.2 Cricket Juillet 1999
J2SE 1.3 Kestrel Mai 2000
J2SE 1.3.1 Ladybird Mai 2001
J2SE 1.4.0 Merlin Février 2002
J2SE 1.4.1 Hopper Septembre 2002
J2SE 1.4.2 Mantis Juin, 2003
J2SE 5.0 (1.5) Tiger Septembre 2004
Java SE 6.0 (1.6) Mustang Décembre 2006
Java SE 7 (1.7) Dolphin Juillet 2011
Java SE 8 (Spider) Mars 2018

1.3.3. Java 1.0

Cette première version est lancée officiellement en mai 1995.
Elle se compose de 8 packages :
  • java.lang : classes de bases
  • java.util : utilitaires
  • java.applet : applets
  • java.awt.* : interface graphique portable
  • java.io : gestion des entrées/sorties grâce aux flux
  • java.net : gestion des communications à travers le réseau

1.3.4. Java 1.1

Cette version du JDK est annoncée officiellement en mars 1997. Elle apporte de nombreuses améliorations et d'importantes fonctionnalités nouvelles dont :
  • les Java beans
  • les fichiers JAR
  • RMI pour les objets distribués
  • la sérialisation
  • l'introspection
  • JDBC pour l'accès aux données
  • les classes internes (inner class)
  • l'internationalisation
  • un nouveau modèle de sécurité permettant notamment de signer les applets
  • un nouveau modèle de gestion des événements
  • JNI pour l'appel de méthodes natives
  • ...

1.3.5. Java 1.2 (nom de code Playground)

Cette version du JDK est lancée fin 1998. Elle apporte de nombreuses améliorations et d'importantes fonctionnalités nouvelles dont :
  • un nouveau modèle de sécurité basé sur les policy
  • les JFC sont incluses dans le JDK (Swing, Java2D, accessibility, drag & drop ...)
  • JDBC 2.0
  • les collections
  • support de CORBA
  • un compilateur JIT est inclus dans le JDK
  • de nouveaux formats audio sont supportés
  • ...
Java 2 se décline en 3 éditions différentes qui regroupent des APIs par domaine d'applications :
  • Java 2 Micro Edition (J2ME) : contient le nécessaire pour développer des applications capables de fonctionner dans des environnements limités tels que les assistants personnels (PDA), les téléphones portables ou les systèmes de navigation embarqués
  • Java 2 Standard Edition (J2SE) : contient le nécessaire pour développer des applications et des applets. Cette édition reprend le JDK 1.0 et 1.1.
  • Java 2 Enterprise Edition (J2EE) : contient un ensemble de plusieurs API permettant le développement d'applications destinées aux entreprises tel que JDBC pour l'accès aux bases de données, EJB pour développer des composants orientés métiers, Servlet / JSP pour générer des pages HTML dynamiques, ... Cette édition nécessite le J2SE pour fonctionner.
Le but de ces trois éditions est de proposer une solution reposant sur Java quelque soit le type de développement à réaliser.

1.3.6. J2SE 1.3 (nom de code Kestrel)

Cette version du JDK est lancée en mai 2000. Elle apporte de nombreuses améliorations notamment sur les performances et des fonctionnalités nouvelles dont :
  • JNDI est inclus dans le JDK
  • hotspot est inclus dans la JVM
  • JPDA
  • ...
La rapidité d'exécution a été grandement améliorée dans cette version.

1.3.7. J2SE 1.4 (nom de code Merlin)

Cette version du JDK, lancée début 2002, est issue des travaux de la JSR 59. Elle apporte de nombreuses améliorations notamment sur les performances et des fonctionnalités nouvelles dont :
  • JAXP est inclus dans le JDK pour le support de XML
  • JDBC version 3.0
  • new I/O API pour compléter la gestion des entrées/sorties de manière non bloquante
  • logging API pour la gestion des logs applicatives
  • une API pour utiliser les expressions régulières
  • une API pour gérer les préférences utilisateurs
  • JAAS est inclus dans le JDK pour l'authentification
  • un ensemble d'API pour utiliser la cryptographie
  • les exceptions chainées
  • l'outil Java WebStart
  • ...
Cette version ajoute un nouveau mot clé au langage pour utiliser les assertions : assert.

1.3.8. J2SE 5.0 (nom de code Tiger)

La version 1.5 du J2SE est spécifiée par le JCP sous la JSR 176. Elle intègre un certain nombre de JSR dans le but de simplifier les développements en Java.
Ces évolutions sont réparties dans une quinzaine de JSR qui seront intégrées dans la version 1.5 de Java.
JSR-003 JMX Management API
JSR-013 Decimal Arithmetic
JSR-014 Generic Types
JSR-028 SASL
JSR-114 JDBC API Rowsets
JSR-133 New Memory Model and thread
JSR-163 Profiling API
JSR-166 Concurrency Utilities
JSR-174 Monitoring and Management for the JVM
JSR-175 Metadata facility
JSR-199 Compiler APIs
JSR-200 Network Transfer Format for Java Archives
JSR-201 Four Language Updates
JSR-204 Unicode Surrogates
JSR-206 JAXP 1.3

La version 1.5 de Java est désignée officiellement sous le nom J2SE version 5.0.
La technologie Pack200 permet de compresser les fichiers .jar pour obtenir un réduction du volume pouvant atteindre 60%.

1.3.9. Java SE 6 (nom de code Mustang)

Cette version est spécifiée par le JCP sous la JSR 270 et développée sous le nom de code Mustang.
Elle intègre un changement de dénomination et de numérotation : la plate-forme J2SE est renommée en Java SE, SE signifiant toujours Standard Edition.

1.3.9.1. Les évolutions de Java 6

Cette version inclut plusieurs JSR :
JSR 105  XML Digital Signature APIs
JSR 173  Streaming API for XML
JSR 181  Web Services Metadata for Java Platform
JSR 199  Java Compiler API
JSR 202  Java Class File Specification Update
JSR 221  JDBC 4.0 API Specification
JSR 222  Java Architecture for XML Binding (JAXB) 2.0
JSR 223  Scripting for the Java Platform
JSR 224  Java API for XML-Based Web Services (JAX-WS) 2.0
JSR 250  Common Annotations for the Java Platform
JSR 269  Pluggable Annotation Processing API

Elle apporte donc plusieurs améliorations :
L'amélioration du support XML
Java 6.0 s'est enrichie avec de nombreuses nouvelles fonctionnalités concernant XML :
  • JAXP 1.4
  • JSR 173 Streaming API for XML (JSR 173)
  • JSR 222 Java Architecture for XML Binding (JAXB) 2.0 : évolution de JAXB qui utilise maintenant les schémas XML
  • Le support du type de données XML de la norme SQL 2003 dans JDBC

JDBC 4.0
Cette nouvelle version de l'API JDBC est le fruit des travaux de la JSR 221. Elle apporte de nombreuses évolutions :
  • chargement automatique des pilotes JDBC
  • Support du type SQL ROWID et XML
  • Amélioration du support des champs BLOB et CLOB
  • L'exception SQLTransaction possède deux classes filles SQLTransientException et SQLNonTransientException

Le support des services web
Les services web font leur apparition dans la version SE de Java : précédemment ils n'étaient intégrés que dans la version EE. Plusieurs JSR sont ajoutés pour supporter les services web dans la plate-forme :
  • JSR 224 Java API for XML based Web Services (JAX-WS) 2.0 : facilite le développement de services web et propose un support des standards SOAP 1.2, WSDL 2.0 et WS-I Basic Profile 1.1
  • JSR 181 Web Services MetaData : définit un ensemble d'annotations pour faciliter le développement de services web
  • JSR 105 XML Digital Signature API : la package javax.xmlcrypto contient une API qui implémente la spécification Digital Signature du W3C. Ceci permet de proposer une solution pour sécuriser les services web

Le support des moteurs de scripts
L'API Scripting propose un standard pour l'utilisation d'outils de scripting. Cette API a été développée sous la JSR 223. La plate-forme intègre Rhino un moteur de scripting Javascript

L'amélioration de l'intégration dans le système d'exploitation sous-jacent
  • La classe java.awt.SystemTray permet d'interagir avec la barre d'outils système (System Tray)
  • La classe java.awt.Desktop qui permet des interactions avec le système d'exploitation (exécution de fonctionnalités de base sur des documents selon leur type)
  • Nouveaux modes pour gérer la modalité d'une fenêtre
  • Amélioration dans Swing
  • Amélioration des look and feel Windows et GTK
  • la classe javax.awt.SplashScreen qui propose un support des splashscreens
  • Ajout du layout javax.swing.GroupLayout
  • Filtres et tris des données dans le composant Jtable
  • La classe SwingWorker qui facilite la mise en oeuvre de threads dans Swing
  • Utilisation du double buffering pour l'affichage

Les améliorations dans l'API Collection
  • 5 nouvelles interfaces : Deque (queue à double sens), BlockingDeque, NavigableSet (étend SortedSet), NavigableMap (étend SortedMap) et ConcurrentNavigableMap
  • ArrayDeque : implémentation de Deque utilisant un tableau
  • ConcurrentSkipListSet : implémentation de NavigableSet
  • ConcurrentSkipListMap : implémentation de ConcurrentNavigableMap
  • LinkedBlockingDeque : implémentation de BlockingDeque

L'améliorations dans l'API IO
  • Modification des attributs d'un fichier grâce aux méthodes setReadable(), setWritable()  et setExecutable de la classe File

Java Compiler API
Cette API est le résultat des travaux de la JSR 199 et a pour but de proposer une utilisation directe du compilateur Java. Cette API est utilisable à partir du package javax.tools

Pluggable Annotation-Processing API
Cette API est le résultat des travaux de la JSR 269 et permet un traitement des annotations à la compilation. Cette API est utilisable à partir du package javax.annotation.processing

Common Annotations
Cette API est le résultat des travaux de la JSR 250 et définit plusieurs nouvelles annotations standards.
@javax.annotation.Generated : permet de marquer une classe, une méthode ou un champ comme étant généré par un outil
@javax.annotation.PostConstruct : méthode exécutée après la fin de l'injection de dépendance
@javax.annotation.PreDestroy : méthode de type callback appelée juste avant d'être supprimée par le conteneur
@javax.annotation.Resource : permet de déclarer une référence vers une ressource
@javax.annotation.Resources : conteneur pour la déclaration de plusieurs ressources

Java Class File Specification
Issue des travaux de la JSR 202, cette spécification fait évoluer le format du fichier .class résultant de la compilation.
La vérification d'un fichier .class exécute un algorithme complexe et coûteux en ressources et en temps d'exécution pour valider un fichier .class.
La JSR 202, reprend une technique développée pour le profile CLDC de J2ME nommée split vérification qui décompose la vérification d'un fichier .class en deux étapes :
  • la première étape réalisée lors de la création du fichier .class ajoute des attributs qui seront utilisés par la seconde étape
  • la seconde étape est réalisée à l'exécution en utilisant les attributs
Le temps de chargement du fichier .class est ainsi réduit.

Le Framework JavaBeans Activation
Le Framework JavaBeans Activation a été intégré en standard dans la plate-forme Java SE 6. Ce framework historiquement fourni séparément permet de gérer les types mimes et était généralement utilisé avec l'API JavaMail. Ce framework permet d'associer des actions à des types mimes.
La liste des nouveaux packages de Java 6 comprend :
java.text.spi
java.util.spi
javax.activation Activation Framework
javax.annotation Traitement des annotations
javax.jws Support des services web
javax.jws.soap support SOAP
javax.lang.model.*
javax.script Support des moteurs de scripting
javax.tools Accès à certains outils notamment le compilateur
javax.xml.bind.* JAXB
javax.xml.crypto.* Cryptographie avec XML
javax.xml.soap Support des messages SOAP
javax.xml.stream.* API Stax
javax.xml.ws.* API JAX-WS

Une base de données nommée JavaDB est ajoutée au JDK 6.0 : c'est une version de la base de données Apache Derby.

1.3.9.2. Java 6 update

En attendant la version 7, Sun puis Oracle ont proposé plusieurs mises à jour de la plate-forme Java SE. Ces mises à jour concernent :
  • des corrections de bugs et ou de sécurité
  • des évolutions ou des ajouts dans les outils du JDK et du JRE notamment la machine virtuelle HotSpot
Deux de ces mises à jour sont particulièrement importantes : update 10 et 14.

Java 6 update 1
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u1-142458.html

Java 6 update 2
Cette mise à jour contient des corrections de bugs et une nouvelle version de la base de données embarquée Java DB.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u2-142965.html

Java 6 update 3
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u3-137914.html

Java 6 update 4
Cette mise à jour contient des corrections de bugs et la version 10.3 de Java DB.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u4-140071.html

Java 6 update 5
Cette mise à jour contient des corrections de bugs et la possibilité d'enregistrer le JDK.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u5-135446.html
Depuis la version 6u5 de Java, le programme d'installation du JDK propose à la fin la possibilité d'enregistrer le JDK.
Il suffit de cliquer sur le bouton « Product Registration Information » pour obtenir des informations sur le processus d'enregistrement du produit.
Lors du clic sur le bouton « Finish », le processus d'enregistrement collecte les informations sur le JDK installé et sur le système hôte. Ces informations sont envoyées via une connection http sécurisée sur le serveur Sun Connection.
Le navigateur s'ouvre sur la page d'enregistrement du JDK.
Il faut utiliser son compte SDN (Sun Developer Network) pour se logger et afficher la page « Thank You ».
Il est possible d'enregistrer son JDK en ouvrant la page register.html située dans le répertoire d'installation du JDK.
En plus du JDK, plusieurs autres produits de Sun Connection peuvent être enregistrés comme GlassFish, Netbeans, ...
Sun Connection propose un service gratuit nommé Inventory Channel qui permet de gérer ses produits enregistrés.

Java 6 update 6
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u6-141234.html

Java 6 update 7
Cette mise à jour contient des corrections de bugs et l'outil Java Visual VM.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u7-136303.html
Le numéro de version interne complet est build 1.6.0_07-b06. Le numéro de version externe est 6u7.
Exemple :
C:\>java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)

Java 6 update 10
Cette mise à jour qui a porté le nom Java Update N ou Consumer JRE est très importante car elle apporte de grandes évolutions notamment pour le support des applications de type RIA.
Elle contient :
  • Un nouveau plug-in pour l'exécution des applets dans les navigateurs
  • Nimbus, un nouveau L&F pour Swing
  • Java kernel
  • Java Quick Starter (JQS)
  • des corrections de bugs
  • la version 10.4 Java DB
  • support par défaut de Direct3D 9 sous Windows.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u10-142936.html
Le plug-in pour les navigateurs a été entièrement réécrit notamment pour permettre une meilleure exécution des applets, des applications Java Web Start et des applications RIA en Java FX.

Java 6 update 11
Cette mise à jour ne contient que des corrections de bugs et des patchs de sécurité.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u11-139394.html
La version externe est Java 6u11, le numéro de build est 1.6.0_11-b03.

Java 6 update 12
Cette mise à jour contient
  • Support de Windows Server 2008
  • Amélioration des performances graphiques et de démarrage des applications Java Web Start
  • des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u12-137788.html
La version externe est Java 6u12, le numéro de build est 1.6.0_12-b04.

Java 6 update 13
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u13-142696.html
La version externe est Java 6u13, le numéro de build est 1.6.0_13-b03.
L'installeur propose par défaut l'installation de la barre d'outils de Yahoo.

Java 6 update 14
Cette mise à jour contient
  • La version 14 de la JVM HotSpot
  • G1, le nouveau ramasse miette
  • Les versions 2.1.6 de JAX-WS et 2.1.10 de JAX-B
  • La version 10.4.2.1 de Java DB
  • Des mises à jour dans Visual VM
  • Blacklist des jars signés qui contiennent une faille de sécurité
  • des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u14-137039.html
La version externe est Java 6u14, le numéro de build est 1.6.0_14-b08.

Java 6 update 15
Cette mise à jour ne contient que des corrections de bugs et patchs de sécurité.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u15-142514.html
La version externe est Java 6u15, le numéro de build est 1.6.0_15-b03.

Java 6 update 16
Cette mise à jour ne contient que des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u16-140309.html
La version externe est Java 6u16, le numéro de build est 1.6.0_16-b01.

Java 6 update 17
Cette mise à jour ne contient que des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u17-141447.html
La version externe est Java 6u17, le numéro de build est 1.6.0_17-b04.

Java 6 update 18
Cette mise à jour propose le support de Windows 7, Ubuntu 8.04 et Red Hat Enterprise Linux 5.3
Elle inclut la version 1.2 de Visual VM, la version 10.5.3.0 de Java DB, la version 16.0 de la machine virtuelle HotSpot, une mise à jour de Java Web Start.
Cette mise à jour contient aussi des corrections de bugs et une amélioration des performances.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u18-142093.html
La version externe est Java 6u18, le numéro de build est 1.6.0_18-b07.

Java 6 update 19
Cette mise à jour ne contient que des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u19-141078.html
La version externe est Java 6u19, le numéro de build est 1.6.0_19-b04.

Java 6 update 20
Cette mise à jour ne contient que des corrections de bugs.
L'attribut codebase de JNLP est obligatoire.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u20-142805.html
La version externe est Java 6u20, le numéro de build est 1.6.0_20-b02.

Java 6 update 21
Cette mise à jour propose le support de Oracle Enterprise Linux 4.8, 5.4 et 5.5, Red Hat Enterprise Linux 5.5 et 5.4.
Elle inclut la version 1.2.2 de Visual VM et la version 17.0 de la machine virtuelle HotSpot.
La propriété Compagny Name est modifié : "Sun Microsystem" est remplacé par "Oracle" dans la version 1.6.0_21_b6. Comme cette modification a posé des soucis pour le lancement d'Eclipse, la modification a été annulée dans la version 1.6.0_21_b7 pour Windows.
Cette mise à jour contient aussi des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u21-156341.html
La version externe est Java 6u21, le numéro de build est 1.6.0_21-b02.

Java 6 update 22
Cette mise à jour contient des corrections de bugs et patchs de sécurité.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u22releasenotes-176121.html
La version externe est Java 6u22, le numéro de build est 1.6.0_22-b04.

Java 6 update 23
Cette mise à jour contient aussi des corrections de bugs.
Elle inclut la version 1.3.1 de Visual VM et la version 19.0 de la machine virtuelle HotSpot.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u23releasenotes-191058.html
La version externe est Java 6u23, le numéro de build est 1.6.0_23-b05.

Java 6 update 24
Cette mise à jour contient des corrections de bugs, des patchs de sécurité, une amélioration des performances, la version 20 de la JVM HotSpot et le support pour les navigateurs IE9, Firefox 4 et Chrome 10.
La version 20 de la JVM Hotspot propose plusieurs améliorations :
l'option -XX:+TieredCompilation permet d'activer la tiered compilation dans le mode server
amélioration des informations de diagnostique
L'option -XX:+AggressiveOpts permet d'améliorer les performances de la classe BigDecimal

La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u24releasenotes-307697.html
La version externe est Java 6u24, le numéro de build est 1.6.0_24-b07.

Java 6 update 25
Cette mise à jour contient des corrections de bugs et patchs de sécurité. L'outil Java DB est mis à jour en version 10.6.2.1.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u25releasenotes-356444.html
La version externe est Java 6u25, le numéro de build est 1.6.0_25-b06.

Java 6 update 26
Cette mise à jour contient des corrections de bugs et patchs de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u26releasenotes-401875.html
La version externe est Java 6u26, le numéro de build est 1.6.0_26-b03.

Java 6 update 27
Cette mise à jour contient des corrections de bugs : cette version est certifiée pour une utilisation avec Firefox 5, Oracle Linux 5.6 et Red Hat Enterprise Linux 6.0.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u27-relnotes-444147.html
La version externe est Java 6u27, le numéro de build est 1.6.0_27-b07.

La version Java 6 update 28 n'a jamais été publiée.

Java 6 update 29
Cette mise à jour contient des corrections de bugs et patchs de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u29-relnotes-507960.html
La version externe est Java 6u29, le numéro de build est 1.6.0_29-b11.

Java 6 update 30
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u30-relnotes-1394870.html
Elle inclut le support pour Red Hat Enterprise Linux 6, la version 1.3.2 de Visual VM et l'implémentation du synthetizer open source Gervill, fournie aussi dans Java 7 qui est activable en utilisant l'option -Dsun.sound.useNewAudioEngine=true.
La version externe est Java 6u30, le numéro de build est 1.6.0_30-b12.

Java 6 update 31
Cette mise à jour contient 14 patchs de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u31-relnotes-1482342.html
La version externe est Java 6u31, le numéro de build est 1.6.0_31-b4.

Java 6 update 32
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u32-relnotes-1578471.html
La version externe est Java 6u32, le numéro de build est 1.6.0_32-b05.

Java 6 update 33
Cette mise à jour contient des corrections de bugs et des patches de sécrité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u33-relnotes-1653258.html
La version externe est Java 6u33, le numéro de build est 1.6.0_33-b04.

Java 6 update 34
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u34-relnotes-1729733.html
La version externe est Java 6u34, le numéro de build est 1.6.0_34-b04.

Java 6 update 35
Cette mise à jour contient un patch de sécurité critique (Oracle Security Alert CVE-2012-4686). La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u35-relnotes-1835788.html
La version externe est Java 6u35, le numéro de build est 1.6.0_35-b10.

Java 6 update 37
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u37-relnotes-1863283.html
La version externe est Java 6u37, le numéro de build est 1.6.0_37-b06.

Java 6 update 38
Cette mise à jour contient des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u38-relnotes-1880997.html
La version externe est Java 6u38, le numéro de build est 1.6.0_38-b05.

Java 6 update 39
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u39-relnotes-1902886.html
La version externe est Java 6u39, le numéro de build est 1.6.0_39-b04.

Java 6 update 41
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u41-relnotes-1907743.html
La version externe est Java 6u41, le numéro de build est 1.6.0_41-b02.

Java 6 update 43
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u43-relnotes-1915290.html
Cette version est certifiée pour une utilisation avec Windows Windows Server 2012 (64-bit). Cette mise à jour a été annoncée comme étant la dernière diffusée gratuitement : le support est toujours possible en souscrivant au progamme payant Java SE Support d'Oracle.
La version externe est Java 6u43, le numéro de build est 1.6.0_43-b01.

Java 6 update 45
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/6u45-relnotes-1932876.html
La valeur par défaut de la propriété java.rmi.server.useCodebaseOnly depuis cette version est à true.
Sous Windows, la manière d'analyser la commande fournie en paramètre, sous la forme d'une chaîne, à la méthode exec() de la classe Runtime a été modifier notamment si le chemin contient un espace.
La version externe est Java 6u45, le numéro de build est 1.6.0_45-b06.

1.3.10. Java SE 7

Java SE 7 est issu des travaux commencés par Sun et poursuivis par Oracle, des travaux du JCP et des travaux d'implémentation du projet open source OpenJDK.
La version 7 de Java est une version évolutive qui propose quelques  fonctionnalités intéressantes mais surtout c'est une version qui réouvre la voie aux évolutions du langage et de la plate-forme Java après plus de quatre années d'attente depuis la version 6.
Java SE 7 propose des évolutions sur toute la plate-forme :
  • Le langage Java évolue grâce au projet Coin
  • Les API du JDK
  • La JVM
Java SE 7 assure une forte compatibilité ascendante avec les versions antérieures de la plate-forme car les nouvelles fonctionnalités sont des ajouts. Ceci permet de  préserver les compétences des développeurs et les investissements qui ont pu être faits dans la technologie Java.
Il y a cependant quelques petites contraintes, dont il faut tenir compte lors d'une migration, qui sont consultables à l'url :
http://www.oracle.com/technetwork/java/javase/compatibility-417013.html
Lors de sa sortie, Java SE 7 est déjà utilisable avec les principaux IDE du marché (Netbeans 7.0, Eclipse Indigo (avec un plug-in dédié en attendant son inclusion par défaut dans l'outil à partir de la version 7.0.1) et Intellij IDEA 10.5).
Java SE 7 est la première version majeure diffusée depuis le rachat de Sun par Oracle.
La base de Java SE 7 est le projet open source OpenJDK : c'est la première fois qu'une version de Java SE repose majoritairement sur une implémentation open source et des contributions externes comme le framework fork/join.
Avant la création du projet Open JDK, certaines fonctionnalités de la plate-forme Java étaient des implémentations propriétaires voire commerciales notamment le système de rendu des polices, le système de gestion des sons, certains algorithmes d'encryptage, ... toutes ces implémentations ont dû être remplacées par des solutions open source qui soient compatibles avec la licence GPL.
Ainsi, Java SE 7 utilise un nouveau synthétiseur MIDI open source en remplacement du synthétiseur propriétaire existant : le Gervill Software Synthesizer. Ce nouveau système est beaucoup plus performant que son prédécesseur.
Java SE version 7 a été spécifié par le JCP sous la JSR 336. Cette version se focalise sur quatre thèmes :
  • Productivité : gestion automatique des ressources de type I/O, le projet Coin
  • Performance : nouvelle API de Gestion de la concurrence
  • Universalité : nouvelle instruction dans le bytecode et nouvelle API d'invocation de méthodes (invoke dymamic)
  • Intégration : NIO 2
Java SE 7 intègre plusieurs spécifications :
  • JSR 203 : More New I/O APIs for the Java Platform ("NIO.2"), API I/O asynchrone permettant aussi une utilisation avancée du système de fichiers (permissions, attributs de fichier, parcours de répertoires, événements sur un répertoire, ...)
  • JSR 292 : Invoke Dynamic qui a pour but de faciliter la mise en oeuvre dans la JVM de langages typés dynamiquement, comme Groovy, permettant une amélioration de leurs performances
  • JSR 334 : Small Enhancements to the Java Programming Language (OpenJDK Project Coin), quelques petites améliorations dans la syntaxe du langage : utilisation des strings dans l'instruction switch, gestion automatique des ressources dans l'instruction try, l'opérateur diamant, amélioration de la lisibilité des valeurs numériques, support des exceptions multiples dans une clause catch.
  • JSR 166y : Fork/Join framework est un framework qui a pour but de faciliter le découpage et l'exécution de traitements sous la forme de tâches exécutées en parallèle grâce à une utilisation de plusieurs processeurs.
Java SE 7 intègre aussi plusieurs améliorations et évolutions :
  • Support d'Unicode version 6.0
  • Support de TLS 1.2
  • Implémentation de l'algorithme Elliptic-Curve Cryptography (ECC)
  • Mise à jour de JDBC version 4.1 et RowSet version 1.1
  • Le look and feel Nimbus dans Swing
  • Le composant javax.swing.JLayer issu des travaux du composant JXLayer du projet SwingLabs
  • Mises à jour des API relatives à XML : JAXP 1.4, JAXB 2.2a et JAX-WS 2.2 correspondant à des révisions des JSR 206 (Java API for XML Processing (JAXP)) , JSR 222: (Java Architecture for XML Binding (JAXB)) et JSR 224 (Java API for XML-Based Web Services (JAX-WS))
  • Amélioration du monitoring avec des évolutions des MBeans : OperatingSystemMXBean concernant la charge CPU globale du système et celle de la JVM et GarbageCollectorMXBean pour envoyer des notifications lors de l'exécution du  ramasse miette
  • Amélioration de l'internationalisation : la classe java.util.Locale propose un support des normes IETF BCP 47 (Tags for Identifying Languages) et UTR 35 (Local Data Markup Language)
  • Ajout du support des protocoles SCTP (Stream Control Transmission Protocol) et SDP (Sockets Direct Protocol)  pour Solaris et Linux
  • Transparence et forme libre pour les fenêtres Swing
  • La méthode close() de la classe UrlClassLoader permet de libérer les ressources chargées
  • La classe Objects
  • Une nouvelle feuille de style plus moderne pour la Javadoc
  • ...
Oracle a commencé une fusion de ses JVM JRockit et HotSpot : la JVM de Java 7 possède la première version de cette fusion. Les prochaines mises à jour de Java 7 devraient fournir le travail de cette fusion qui devrait parvenir à la suppression de la PermGen et contenir des fonctionnalités de JRockit.
Plusieurs fonctionnalités initialement prévues pour Java SE 7 sont reportées dans Java SE 8 :
  • La modularité (Project Jigsaw)
  • Les closures (Project Lambda)
  • L'amélioration des annotations
  • La JSR-296 : Swing Framework
La sortie de Java SE 7 a eu lieu de 28 juillet 2011.
Lors de cette sortie, Java 7 contient un bug dans les optimisations faites par le compilateur Hotspot qui compile de façon erronée certaines boucles. Ce bug peut se traduire par un plantage de la JVM ou des résultats erronés ce qui est plus grave encore. Certains projets open source notamment Lucene et Solr sont affectés par ce bug.
Une solution de contournement de ce bug est de désactiver l'optimisation des boucles en utilisant l'option -XX:-UseLoopPredicate de la JVM.
Ce bug peut aussi survenir avec Java SE 6 dans une JVM Sun où les options  -XX:+OptimizeStringConcat ou -XX:+AggressiveOpts sont utilisées.

1.3.10.1. Les JSR de Java 7

Cette version inclut plusieurs JSR :
JSR 166y Fork / Join
JSR 203 NIO 2
JSR 292 Invoke dynamic
JSR 334 Project Coin

Elle apporte donc plusieurs améliorations :
Le projet Coin
Java 7.0 propose quelques évolutions syntaxiques :
  • Binary literal
  • Underscore dans les valeurs numériques
  • Utilisation des String dans l'instruction Switch
  • Support de plusieurs exceptions dans la clause catch
  • L'instruction try with resource pour permettre une invocation automatique de la méthode close() d'une ressource à la sortie du bloc try
  • L'opérateur diamant (type inference pour les generics)

NIO 2
Cette nouvelle version de l'API NIO apporte de nombreuses fonctionnalités :
  • l'API FileSystem : l'accès et la manipulation du système de fichiers, le support des métadonnées, les liens symboliques, le parcours des répertoires, les notifications des changements dans un répertoire, ...
  • Des mises à jour des API existantes
  • Les canaux asynchrones (Asynchronous I/O)
  • . . .

Invoke dynamic
Développé dans le projet Da Vinci, Invoke dynamic a pour but de faciliter l'exécution de code issu de langages dynamiques dans la JVM : pour cela un nouvel opérateur (invokedynamic) a été ajouté dans le bytecode et une nouvelle API permet d'utiliser le chargement d'une classe avec un AnonymousClassLoader et une nouvelle manière d'invoquer dynamiquement une méthode,

Fork / Join
Ce framework facilite la parallélisation de tâches en exploitant les capacités multi-processeurs des machines. Le principe est de diviser les traitements en tâches (fork), exécutées en parallèle et éventuellement de nouveau les diviser, puis d'agréger les résultats (join).

1.3.10.2. Java 7 update

Oracle a proposé plusieurs mises à jour de la plate-forme Java SE 7. Ces mises à jour concernent :
  • des corrections de bugs et ou de sécurité
  • des évolutions ou des ajouts dans les outils du JDK et du JRE notamment la machine virtuelle HotSpot
Oracle applique à Java sa politique Critical Patch Updates (CPU) comme mécanisme primaire de diffusion des patchs de sécurité : les dates de diffusion de ces CPU sont prédéfinies à une fréquence de quatre par an qui correspondent au mardi le plus proche du 17 des mois de janvier, avril, juillet et octobre. Des patches de sécurités peuvent être diffusé en dehors de ces dates notamment si cela concerne des Security Alerts.

Java 7 update 1 CPU
Cette mise à jour contient une vingtaine de patchs de sécurité et quelques corrections de bugs. Il contient notamment un correctif dans le compilateur JIT de HotSpot qui provoque une erreur de l'optimisation de certaines boucles.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u1-relnotes-507962.html
La liste des patchs de sécurité est consultable à l'url :
http://www.oracle.com/technetwork/topics/security/javacpuoct2011-443431.html
La version externe est Java 7u1, le numéro de build est 1.7.0_1-b08. Elle est diffusée le 18 octobre 2011.
Cette version inclut la version 1.7R3 du moteur JavaScript Rhino de la fondation Mozilla.

Java 7 update 2
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u2-relnotes-1394228.html
La version externe est Java 7u2, le numéro de build est 1.7.0_2-b13. Elle est diffusée le 12 décembre 2011.
Cette version inclut :
  • La version 22 de la machine virtuelle HotSpot
  • Le support de Solaris 11 et Firefox 5, 6, 7 et 8
  • Le SDK de JavaFX est inclu dans le JDK
  • Des mises à jour dans les processus de déploiement d'applications par le réseau
Les démos et les exemples ne sont plus fournis avec le JDK mais sont fournis séparément.

Java 7 update 3 CPU
Cette mise à jour contient des patchs de sécurité. La liste complète est consultable à l'url :
http://www.oracle.com/technetwork/java/javase/7u3-relnotes-1481928.html
La version externe est Java 7u3, le numéro de build est 1.7.0_3-b4. Elle est diffusée le 14 février 2012.

Java 7 update 4
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html
La version externe est Java 7u4, le numéro de build est 1.7.0_4-b20. Elle est diffusée le 26 avril 2012.
Cette version inclut :
  • Le support du JDK pour Mac OS X
  • La version 23 de la JVM HotSpot
  • Le support du ramasse miettes G1 (Garbage First)
  • La version 1.4.6 de JAXP qui corrige quelques bugs et améliore les performances
  • La version 10.8.2.2 de Java DB corrige quelques bugs
Java 7u4 propose une version 64 bits du JDK pour Mac OS X version Lion ou ultérieure.
La version 23 de la JVM HotSpot contient une partie des travaux de convergence avec la JVM JRockit.
Le ramasse miettes G1 (Garbage First) est supporté : il est particulièrement adapté pour les JVM utilisant un gros heap.

Java 7 update 5 CPU
Cette mise à jour contient des corrections de bugs et des patchs de sécurité.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u5-relnotes-1653274.html
La version externe est Java 7u5, le numéro de build est 1.7.0_5-b06. Elle est diffusée le 12 juin 2012.

Java 7 update 6
Cette mise à jour contient des corrections de bugs.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u6-relnotes-1729681.html
La version externe est Java 7u6, le numéro de build est 1.7.0_6-b24. Elle est diffusée le 14 aout 2012.
Cette version inclut :
  • Java FX est installé en même temps que Java SE, dans le même package et plus dans un package d'installation séparé.
  • Le JDK et le JRE sont disponibles sur Mac OS X 10.7.3 (Lion) et supérieur. Le JDK est disponible pour Linux sur processeurs ARM v6 etv7.
  • La technologie Java Access Bridge est incluse dans cette version mais désactivée par défaut.
  • Une nouvelle fonction de hachage pour les clés de type String des collections de type map permet d'améliorer les performances. Par défaut, cette nouvelle fonction est désactivée car elle peut avoir des effets de bord sur l'ordre des itérations sur les clés ou les valeurs : pour l'activer, il faut affecter une valeur différente de -1 à la propriété système jdk.map.althashing.threshold. Cette valeur correspond à la taille de la collection à partir de laquelle la nouvelle fonction de hachage est utilisée. La valeur recommandée est 512.

Java 7 update 7
Cette mise à jour contient des patchs de sécurité critiques (Oracle Security Alert CVE-2012-4681).
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u7-relnotes-1835816.html
La version externe est Java 7u7, le numéro de build est 1.7.0_7-b10 (1.7.0_7-b11 pour Windows). Elle est diffusée le 30 aout 2012.

Java 7 update 9 CPU
Cette mise à jour contient des corrections de bugs et des patchs de sécurité.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u9-relnotes-1863279.html
La version externe est Java 7u9, le numéro de build est 1.7.0_9-b05. Elle est diffusée le 16 octobre 2012.

Java 7 update 10
Cette mise à jour contient des corrections de bugs et des améliorations de sécurité.
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u10-relnotes-1880995.html
La version externe est Java 7u10, le numéro de build est 1.7.0_10-b18. Elle est diffusée le 11 décembre 2012.
Cette version ajoute MAC OS X 10.8, Windows Server 2012 (64 bits) et Winwdos 8 Desktop à la liste des plate-formes certifiées.

Java 7 update 11 CPU
Cette mise à jour contient des patchs de sécurité critiques (Oracle Security Alert CVE-2013-0422).
La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u11-relnotes-1896856.html
La version externe est Java 7u11, le numéro de build est 1.7.0_11-b21. Elle est diffusée le 13 janvier 2013.

Java 7 update 13 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u13-relnotes-1902884.html
La version externe est Java 7u13, le numéro de build est 1.7.0_43-b20. Elle est diffusée le 1er février 2013.

Java 7 update 15 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u15-relnotes-1907738.html
Attention : comme Java 6 a atteint sa fin de vie et qu'Oracle ne fournira plus d'update publique gratuit pour Java 6, cette mise à jour désinstalle automatiquement Java 6.
La version externe est Java 7u15, le numéro de build est 1.7.0_15-b03. Elle est diffusée le 19 février 2013.

Java 7 update 17
Cette mise à jour contient des patches de sécurité critiques (Oracle Security Alert CVE-2013-1493). La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u17-relnotes-1915289.html
La version externe est Java 7u17, le numéro de build est 1.7.0_17-b02. Elle est diffusée le 4 mars 2013.

Java 7 update 21 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u21-relnotes-1932873.html
La configuration de la sécurité du panneau de control Java a été modifiée : les niveaux low et custom ont été retirés.
Il est recommandé de signer toutes les applications : les applications non signées ou self-signed pourraient ne plus être supportées dans les prochaines mises à jour du JDK.
Une boîte de dialogue fournissant des informations de sécurités est affichée à l'utilisateur avant l'exécution d'une application qui utilise des composants signés et non signés.
Cette version du JDK est disponible pour Linux sur microprocesseur ARM (v6 et v7) avec certains fonctionnalités qui ne sont pas supportées : Java WebStart, Java Plug-In, le ramasse-miettes Garbage First (G1), JavaFX SDK et Runtime. Le support de Java sur ARM ne concerne que GNOME Desktop Environment version 1:2.30+7.
La valeur par défaut de la propriété java.rmi.server.useCodebaseOnly depuis cette version est à true.
Sous Windows, la manière d'analyser la commande fournie en paramètre, sous la forme d'une chaîne, à la méthode exec() de la classe Runtime a été modifier notamment si le chemin contient un espace.
La version externe est Java 7u21, le numéro de build est 1.7.0_21-b11 (1.7.0_21-b12 pour Mac OS X). Elle est diffusée le 16 avril 2013.

Java 7 update 25 CPU
Cette mise à jour contient des patches de sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u25-relnotes-1955741.html
La version externe est Java 7u25, le numéro de build est 1.7.0_25-b15 (1.7.0_25-b17 pour Windows). Elle est diffusée le 18 juin 2013.

Java 7 update 40
Cette mise à jour contient des améliorations relatives à la sécurité, le support de l'affichage Retina sur Mac OS X et des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u40-relnotes-2004172.html
La version externe est Java 7u40, le numéro de build est 1.7.0_40-b43. Elle est diffusée le 10 septembre 2013.
L'outil Java Mission Control (JMC) est fourni avec le JDK.
La version 2.2.40 de JavaFX est incluse avec cette version.

Java 7 update 45 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u45-relnotes-2016950.html
La version externe est Java 7u45, le numéro de build est 1.7.0_45-b18. Elle est diffusée le 15 octobre 2013.
La version 2.2.51 de JavaFX est incluse avec cette version.
Cette version est disponible pour Linux ARM.

Java 7 update 51
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html
La version externe est Java 7u51, le numéro de build est 1.7.0_51-b13. Elle est diffusée le 11 janvier 2014.
La version 2.2.45 de JavaFX est incluse avec cette version.

Java 7 update 55 CPU
Cette mise à jour contient des améliorations relatives à la sécurité et des corrections de bugs. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/7u55-relnotes-2177812.html
La version externe est Java 7u55, le numéro de build est 1.7.0_55-b13. Elle est diffusée le 15 avril 2014.
Il est possible de désactiver l'installation d'outils tiers sponsorisés lors de l'installation de Java 32bits sous Windows en utilisant l'option SPONSORS=0 dans la ligne de commande.
Exemple :
c:\>jre-7u55-windows-i586-iftw.exe SPONSORS=0

Cette désactivation sera maintenue lors des mises à jour suivantes.
La version 2.2.55 de JavaFX est incluse avec cette version.

1.3.11. Java SE 8

Java SE 8 est issu des travaux d'Oracle, du JCP et des travaux d'implémentation du projet open source OpenJDK.
Les spécifications de Java SE 8 sont définit dans la JSR 337.
Java SE 8 a été diffusé le 18 mars 2014.
Les travaux de développement du JDK sur les fonctionnalités de l'implémentation de référence sont organisés en JEP (Java Enhancement Proposals).
Une cinquantaine de JEP ont été incluses dans Java 8 notamment :
  • JEP 101: Generalized Target-Type Inference
  • JEP 103 : Parallel array sorting. Cette fonctionnalité ajoute des méthodes à la classe java.util.Arrays pour utiliser le framework Fork/Join pour permettre de trier un tableau en parallèle
  • JEP 104 : annotations on Java Type.
  • JEP 106 : add Javadoc to javax.tools. Cette fonctionnalité permet d'utiliser javadoc via l'API javax.tools
  • JEP 107 : Bulk data operations for collections. Cette fonctionnalité ajoute des opérations de masse sur des données à l'API Collections (filter/map/reduce). Ces opérations peuvent être mono ou multithreads
  • JEP 109 : enhance code libraries with lambda. Cette fonctionnalité utilise les lambdas dans certaines API de la bibliothèque core de Java (JSR 335)
  • JEP 114 : TLS server name indication (SNI) extension
  • JEP 118 : Language Access to Parameter Names at Runtime. Cette fonctionnalité fournit un mécanisme pour retrouver le nom des paramètres d'une méthode ou d'un constructeur à l'exécution en utilisant l'introspection
  • JEP 120 : Repeating annotations
  • JEP 122: Remove the permanent generation
  • JEP 123 : configurable secure random-number generation
  • JEP 124 : enhance the certificate revocation checking API
  • JEP 126 : Lambda Expression & Virtual Extension Methods
  • JEP 128 : BCP 47 locale matching
  • JEP 129 : NSA Suite B cryptographic algorithms
  • JEP 133 : Unicode 6.2. Cette fonctionnalité propose le support d'Unicode 6.2 dans la plate-forme
  • JEP 135 : Base 64 encoding & decoding. Cette fonctionnalité permet de définir une API standard pour l'encodage et le décodage en base 64
  • JEP 140 : Limited doPrivileged
  • JEP 150 : date & time API. Cette fonctionnalité implémente la nouvelle API de gestion des dates/heures (JSR 310)
  • JEP 153: Launch Java FX applications (direct launching of JavaFX application JARs)
  • JEP 155 : concurrency updates
  • JEP 161 : Platform compact profiles (JSR 3 MR et 160 MR). Cette fonctionnalité permet de définir des profiles de la plate-forme Java SE qui en sont un sous-ensemble de l'API Core
  • JEP 162 : prepare for modularization (JSR 173 MR et 206 MR)
  • JEP 170 : JDBC 4.2 (JSR 114 MR et 221 MR)
  • JEP 178: Statically-linked JNI libraries
  • JEP 184 : HTTP URL permissions. Cette fonctionnalité ajoute une permission pour utiliser une URL plutôt qu'une adresse IP
  • JEP 185 : restrict fetching for external XML resources (JSR 206 MR)
Les principales API ajoutées sont :
  • JSR 308 (JEP104) : Annotations on Java Types
  • JSR 310 (JEP 150) : Date and Time API
  • JSR 335 (JEP126) : le projet Lambda dont le but d'est d'intégrer les expressions lambda, appellées closure dans d'autres langages
  • JSR 223 (JEP 174) : le projet Nashorn dont le but est de proposer un moteur d'exécution Javascript. La commande jjs permet d'invoquer ce moteur en ligne de commande.
Les spécifications de certaines API ont été modifiées dans une Maintenance Release dédiée :

1.3.11.1. Les lambdas et les streams

Les expressions lambda permettent de mettre en oeuvre une forme de programmation fonctionnelle. Une expression lambda permet de passer les traitements contenus dans l'expression en paramètre d'une méthode.
Les méthodes par défaut (default method) permettent de définir des méthodes, ainsi que leur traitement) dans une interface. Ceci permet à une classe qui implémente la méthode et qui ne rédéfinit pas la méthode d'avoir le comportement de la méthode définit dans l'interface. Elles permettent donc d'ajouter de nouvelles fonctionnalités aux interfaces en maintenant la compatibilité binaire avec les classes plus anciennes qui implémentent ces interfaces. Cela permet d'avoir une forme limitée d'héritage multiple.
L'API Stream contenue dans le package java.util.stream permet de mettre en oeuvre des opérations fonctionnelles sur un stream d'éléments. Cette API est intégrée dans l'API Collections pour permettre des opérations de masse de manière séquentielle ou parallèle.

1.3.11.2. Les autres évolutions dans les API et le langages

Plusieurs améliorations ont été apportées au langage :
  • Les Repeating Annotations permettent d'utiliser plusieurs fois la même annotation sur une même entité.
  • Les Type Annotations permettent d'utiliser une annotation partout où un type est utilisé : ceci doit permet à des outils de faire plus de vérifications sur les types dans le code.
  • L'inférence de type à été amélioré.
Plusieurs améliorations ont été apportées à certaines API :
  • Support d'Unicode 6.2
  • Encodage et decodage en Base64 fournis en standard
  • Ajout de la classe java.net.URLPermission
  • l'API Reflection permet d'obtenir le nom des paramètres d'une méthode ou d'un constructeur
La version 4.2 de JDBC propose quelques fonctionnalités nouvelles et la suppression du pont JDBC-ODBC.
Plusieurs amélioration relatives à la sécurité ont été apportées notamment :
  • TLS version 1.2 est utilisé par défaut côté client
  • implémentation du mode AEAD pour algorithmes de chiffrement
  • support de la fonction de hachage SHA-224
  • support des algorithmes PBEWithSHA256AndAES_128 et PBEWithSHA512AndAES_256, des paires de clés DSA 2048 bits et des algorithmes de signature SHA224withDSA et SHA256withDSA par l'implémentation SunJCE
Plusieurs fonctionnalités ont été ajoutées pour faciliter la gestion de la concurrence :
  • la classe ConcurrentHashMap a été intégralement réécrite et une trentaine de méthodes ont été ajoutées pour permettre le support de l'API Stream et les lambdas
  • plusieurs classes (CompletableFuture<T>, ConcurrentHashMap.KeySetView<K,V>, CountedCompleter<T> et CompletionException) et interfaces (CompletableFuture.AsynchronousCompletionTask et CompletionStage<T>) ont été ajoutées dans le package java.util.concurrent
  • plusieurs classes ont été ajoutées dans le package java.util.concurrent.atomic : DoubleAccumulator, DoubleAdder, LongAccumulator et LongAdder
  • la classe java.util.concurrent.locks.StampedLock permet de poser des verrous selon trois modes pour contrôler les accès en lecture/écriture
  • la classe java.util.concurrent.ForkJoinPool propose un support pour un pool commun

1.3.11.3. Les évolutions dans la plate-forme

Plusieurs évolutions ont été apportées à la machine virtuelle HotSpot :
  • suppression de la Permanent Generation (PermGen)
  • support dans le bytecode de l'invocation des méthodes par défaut
  • support des fonctionnalités relatives à AES sur le matériel Intel en utilisant les options UseAES et UseAESIntrinsics
Le JDK 8 inclut la version 5.3 de Java Mission Control et la version 10.10 de Java DB.
Plusieurs outils ont été ajoutés ou modifiés :
  • jjs pour invoquer le moteur javascript Nashorn
  • l'outil java peut exécuter des applications JavaFX
  • jdeps
  • l'option -parameters de l'outils javac permet de demander au compilateur de stocker les informations permettant de retrouver les paramètres par leur nom en utilisant l'API Reflection.

1.3.11.4. Les profiles de Java SE

Initialement, Java 8 devrait proposer un système de gestion des modules qui devait aussi permettre de modulariser la plate-forme Java elle-même. Cependant cette fonctionnalité a été reporté à la prochaine version de Java. Pour permettre la future modularisation de la plate-forme, certaines méthodes ont été deprecated à cause leurs dépendances. Elles devraient être supprimer dans la prochaine version de Java.
En attendant, pour permettre de deployer Java sur certaines plate-formes, Java 8 introduit le concept de Java SE Profile qui est un sous-ensemble définit des API de la plate-forme Java SE.
Le but des profiles est de permettre de préparer la migration des applications écrite en utilisant le CDC de Java ME vers un profile de Java SE. La puissance des appareils mobile augmentant, ceci permet préparer la convergence du CDC vers Java SE.
Un profile respecte plusieurs contraintes :
  • un profile ne concerne pas la JVM ni les outils
  • un profile ne concerne pas le langage tel que définit dans la JLS
  • un profile est définit comme une liste de packages dont toutes les classes et interfaces doivent être celles incluses dans la package du même nom dans le Java SE (quelques exceptions existent pour des raisons de dépendances)
  • un profile peut être basé sur un autre profile : dans ce cas, le profile doit contenir tous les packages du profile de base
  • le plus petit profile doit obligatoirement contenir les packages contenant les classes et interfaces utilisées dans la JLS
L'intégralité des API de la plate-forme Java SE n'est pas considérée comme un profile.
Les Compact Profiles définissent des sous-ensembles de la plate-forme Java qui permettent d'exécuter sur des appareils possédant des ressources limitées des applications ne requiérant pas toutes les fonctionnalités.
Trois profiles sont définis par les spécifications pour la plate-forme Java SE :
  • compact1 : contient un ensemble minimum de packages plus quelques packages additionnels (java.util.logging, javax.net.ssl et javax.script). Hormi certains packages spécifiques à Java ME, son but est de remplacer le CDC 1.1 et Foundation Profile 1.1
  • compact2 : contient des packages relatifs à RMI, JDBC et XML
  • compact3 : doit permettre de développer des applications sans interfaces graphiques (AWT, Swing), services web (JAX-WS, SAAJ, JAXB) ni CORBA.
Ils ne concernent que les API utilisables mais ne concernent pas la JVM ou les outils.
Chaque profil contient les API des profils de numéro inférieur : par exemple, compact2 est un sur-ensemble de compact1 et l'API complète de Java SE est un sur-ensemble du profil de compact3. Le tableau suivant présente la composition des API de chaque ensemble :
Toutes les API Beans JNI JAX-WS
Preferences Accessibility IDL
RMI-IIOP CORBA Print Service
Sound Swing Java 2D
AWT Drag and Drop Input Methods
Image I/O    
compact3
Security JMX  
XML JAXP Management Instrumentation
compact2 JDBC RMI XML JAXP
compact1
Core (java.lang.*) Security Serialization
Networking Ref Objects Regular Expressions
Date and Time Input/Output Collections
Logging Concurrency Reflection
JAR ZIP Versioning
Internationalization JNDI Override Mechanism
Extension Mechanism Scripting  

Le tableau ci-dessous précise les packages contenus dans chaque profil.
compact1
compact2
compact3
java.io
java.rmi
java.lang.instrument
java.lang
java.rmi.activation
java.lang.management
java.lang.annotation
java.rmi.dgc
java.security.acl
java.lang.invoke
java.rmi.registry
java.util.prefs
java.lang.ref
java.rmi.server
javax.annotation.processing
java.lang.reflect
java.sql
javax.lang.model
java.math
javax.rmi.ssl
javax.lang.model.element
java.net
javax.sql
javax.lang.model.type
java.nio
javax.transaction
javax.lang.model.util
java.nio.channels
javax.transaction.xa
javax.management
java.nio.channels.spi
javax.xml
javax.management.loading
java.nio.charset
javax.xml.datatype
javax.management.modelmbean
java.nio.charset.spi
javax.xml.namespace
javax.management.monitor
java.nio.file
javax.xml.parsers
javax.management.openmbean
java.nio.file.attribute
javax.xml.stream
javax.management.relation
java.nio.file.spi
javax.xml.stream.events
javax.management.remote
java.security
javax.xml.stream.util
javax.management.remote.rmi
java.security.cert
javax.xml.transform
javax.management.timer
java.security.interfaces
javax.xml.transform.dom
javax.naming
java.security.spec
javax.xml.transform.sax
javax.naming.directory
java.text
javax.xml.transform.stax
javax.naming.event
java.text.spi
javax.xml.transform.stream
javax.naming.ldap
java.time
javax.xml.validation
javax.naming.spi
java.time.chrono
javax.xml.xpath
javax.security.auth.kerberos
java.time.format
org.w3c.dom
javax.security.sasl
java.time.temporal
org.w3c.dom.bootstrap
javax.sql.rowset
java.time.zone
org.w3c.dom.events
javax.sql.rowset.serial
java.util
org.w3c.dom.ls
javax.sql.rowset.spi
java.util.concurrent
org.xml.sax
javax.tools
java.util.concurrent.atomic
org.xml.sax.ext
javax.xml.crypto
java.util.concurrent.locks
org.xml.sax.helpers
javax.xml.crypto.dom
java.util.function
  javax.xml.crypto.dsig
java.util.jar
  javax.xml.crypto.dsig.dom
java.util.logging
  javax.xml.crypto.dsig.keyinfo
java.util.regex
  javax.xml.crypto.dsig.spec
java.util.spi
  org.ietf.jgss
java.util.stream
   
java.util.zip
   
javax.crypto
   
javax.crypto.interfaces
   
javax.crypto.spec
   
javax.net
   
javax.net.ssl
   
javax.script
   
javax.security.auth
   
javax.security.auth.callback
   
javax.security.auth.login
   
javax.security.auth.spi
   
javax.security.auth.x500
   
javax.security.cert
   

La documentation Javadoc précise à quel profile une classe ou une interface appartient.
Une implémentation des spécifications de Java n'a pas d'obligation à implémenter ses trois profiles.
L'option -profile du compilateur javac permet de demander la compilation pour le profile précisé en paramètre.

1.3.11.5. Java 8 update

Java 8 update 5 CPU
Cette mise à jour contient des améliorations relatives à la sécurité. La liste complète est consultable à l'url : http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html
La version externe est Java 8u5, le numéro de build est 1.8.0_5-b13. Elle est diffusée le 11 janvier 2014.

1.3.12. Les futures versions de Java

La prochaine version de Java (la version 8) est développée sous la JSR 337. Elle devrait être diffusée au premier semestre 2014.
Le site officiel de cette version est à l'url https://jdk8.dev.java.net/
Cette version devrait inclure :
  • JSR 335 : Lambda expression (closures)
  • Le reste du projet Coin non implémenté dans Java 7
  • JSR 296 : Swing Application Framework
  • Language support for collections
  • JSR 308 : annotations on Java type
  • JSR 310 : Date and time API
  • Suppression de la PermGen (JEP 122)
Le projet Jigsaw qui concerne la modularité est encore repoussé à une version ultérieure de Java.

1.3.13. Le résumé des différentes versions

Au fur et à mesure des nouvelles versions de Java, le nombre de packages et de classes s'accroît :
 
Java 1.0
Java 1.1
Java 1.2
J2SE 1.3
J2SE 1.4
J2SE 5.0
Java SE 6
Java SE 7
Java SE 8
Nombre de packages
8
23
59
76
135
166
202
209
217
Nombre de classes
201
503
1520
1840
2990
3280
3780
4024
4240

1.3.14. Le support des différentes versions

Chaque version de Java possède une durée de support durant laquelle Sun/Oracle propose des mises à jour de la plate-forme concernant la correction de bugs et de failles de sécurité.
La date de fin de ce support est définie par une date de fin de vie (End Of Life).
Version Date de diffusion (GA) Date de fin de vie (EOL)
J2SE 1.4
Février 2002
Octobre 2008
J2SE 5.0
Mai 2004
Octobre 2009
Java SE 6
Décembre 2006
Initialement prévue juillet 2012, repoussée à novembre 2012
Java SE 7
Juillet 2011
Avril 2015
Java SE 8
Mars 2014
Mars 2017

Il est cependant possible d'obtenir une prolongation du support en souscrivant à un support payant auprès d'Oracle.

1.3.15. Les extensions du JDK

Un certain nombre d'API supplémentaires qui ne sont pas initialement fournies en standard dans le JDK peuvent être utilisées. Ces API sont intégrées au fur et à mesure de l'évolution de Java.
Extension Description
JNDI Java Naming and Directory Interface : cette API permet d'unifier l'accès à des ressources. Elle est intégrée à Java 1.3
Java mail Cette API permet de gérer des emails. Elle est intégrée à la plate-forme J2EE.
Java 3D Cette API permet de mettre en oeuvre des graphismes en 3 dimensions
Java Media Cette API permet d'utiliser des composants multimédia
Java Servlets Cette API permet de créer des servlets (composants serveurs). Elle est intégrée à la plate-forme J2EE.
Java Help Cette API permet de créer des aides en ligne pour les applications
Jini Cette API permet d'utiliser Java avec des appareils qui ne sont pas des ordinateurs
JAXP Cette API permet le parsing et le traitement de document XML. Elle est intégrée à Java 1.4

Cette liste n'est pas exhaustive.

1.4. Un rapide tour d'horizon des API et de quelques outils

La communauté Java est très productive car elle regroupe :
  • Sun, le fondateur de Java et Oracle depuis son acquisition de Sun
  • le JCP (Java Community Process) : c'est le processus de traitement des évolutions de Java. Chaque évolution est traitée dans une JSR (Java Specification Request) par un groupe de travail constitué de différents acteurs du monde Java
  • des acteurs commerciaux dont tous les plus grands acteurs du monde informatique excepté Microsoft
  • la communauté libre qui produit un très grand nombre d'API et d'outils pour Java
  • Les JUGs
Ainsi l'ensemble des API et des outils utilisables est énorme et évolue très rapidement. Les tableaux ci-dessous tentent de recenser les principaux par thème.
J2SE 1.4
Java Bean
RMI
IO
Applet
Reflexion
Collection
Logging
AWT
Net (réseau)
Preferences
Security
JFC
Internationalisation
Exp régulière
 
Swing

Les outils du JDK de Sun/Oracle
Jar
Javadoc
Java Web Start
JWSDK

Les outils libres (les plus connus)
Jakarta Tomcat
Jakarta Ant
JBoss
Apache Axis
JUnit
Eclipse
 NetBeans
 Maven
JOnas
     

Les autres API
Données Web Entreprise XML Divers
JDBC
JDO
JPA
Servlets
JSP
JSTL
Jave Server Faces
Java Mail
JNDI
EJB
JMS
JMX
JTA
RMI-IIOP
Java IDL
JINI
JXTA
JAXP
SAX
DOM
JAXB
Stax
Services Web
JAXM
JAXR
JAX-RPC
SAAJ
JAX-WS
JAI
JAAS
JCA
JCE
Java Help
JMF
JSSE
Java speech
Java 3D

Les API de la communauté open source
Données
OJB
Castor
Hibernate
Ibatis
Web
Jakarta Struts
Webmacro
Expresso
Barracuda
Tapestry
Wicket
GWT
Entreprise
Spring
Apache Axis
Seams
XML
Apache Xerces
Apache Xalan
JDOM
DOM4J
Divers
Jakarta Log4j
Jakarta regexp

1.5. Les différences entre Java et JavaScript

Il ne faut pas confondre Java et JavaScript. JavaScript est un langage développé par Netscape Communications.
La syntaxe des deux langages est très proche car elles dérivent toutes les deux du C++.
Il existe de nombreuses différences entre les deux langages :
  Java Javascript
Auteur Développé par Sun Microsystems Développé par Netscape Communications
Format Compilé sous forme de bytecode Interprété
Stockage Applet téléchargé comme un élément de la page web Source inséré dans la page web
Utilisation Utilisable pour développer tous les types d'applications Utilisable uniquement pour "dynamiser" les pages web
Exécution Exécuté dans la JVM du navigateur Exécuté par le navigateur
POO Orienté objets Manipule des objets mais ne permet pas d'en définir
Typage Fortement typé Pas de contrôle de type
Complexité du code Code relativement complexe Code simple

1.6. L'installation du JDK

Le JDK et la documentation sont librement téléchargeables sur le site web de Sun : http://java.sun.com ou d'Oracle : http://www.oracle.com/technetwork/java/index.html

1.6.1. L'installation de la version 1.3 du JDK de Sun sous Windows 9x

Pour installer le JDK 1.3 sous Windows 9x, il suffit de télécharger et d'exécuter le programme : j2sdk1_3_0-win.exe
Le programme commence par désarchiver les composants.
installation etape 1
Le programme utilise InstallShield pour guider et réaliser l'installation.
installation etape 2
L'installation vous souhaite la bienvenue et vous donne quelques informations d'usage.
installation etape 3
L'installation vous demande ensuite de lire et d'approuver les termes de la licence d'utilisation.
installation etape 4
L'installation vous demande le répertoire dans lequel le JDK va être installé. Le répertoire proposé par défaut est pertinent car il est simple.
installation etape 5
L'installation vous demande les composants à installer :
  • Program Files est obligatoire pour une première installation
  • Les interfaces natives ne sont utiles que pour réaliser des appels de code natif dans les programmes Java
  • Les démos sont utiles car elles fournissent quelques exemples
  • les sources contiennent les sources de la plupart des classes Java écrites en Java. Attention à l'espace disque nécessaire à cet élément
installation etape 6
L'installation se poursuit par la copie des fichiers et la configuration du JRE.

1.6.2. L'installation de la documentation de Java 1.3 sous Windows

L'archive contient la documentation sous forme d'arborescence dont la racine est jdk1.3\docs.
installation etape 7
Si le répertoire par défaut a été utilisé lors de l'installation, il suffit de décompresser l'archive à la racine du disque C:\.
installation etape 8
Il peut être pratique de désarchiver le fichier dans un sous-répertoire, ce qui permet de réunir plusieurs versions de la documentation.

1.6.3. La configuration des variables système sous Windows 9x

Pour un bon fonctionnement du JDK, il est recommandé de paramétrer correctement deux variables systèmes : la variable PATH qui définit les chemins de recherche des exécutables et la variable CLASSPATH qui définit les chemins de rechercher des classes et bibliothèques Java.
Pour configurer la variable PATH, il suffit d'ajouter à la fin du fichier autoexec.bat :
Exemple :
SET PATH=%PATH%;C:\JDK1.3\BIN

Attention : si une version antérieure du JDK était déjà présente, la variable PATH doit déjà contenir un chemin vers les utilitaires du JDK. Il faut alors modifier ce chemin sinon c'est l'ancienne version qui sera utilisée. Pour vérifier la version du JDK utilisée, il suffit de saisir la commande java -version dans une fenêtre DOS.
La variable CLASSPATH est aussi définie dans le fichier autoexec.bat. Il suffit d'ajouter une ligne ou de modifier la ligne existante définissant cette variable.
Exemple :
SET CLASSPATH=C:\JAVA\DEV;

Dans un environnement de développement, il est pratique d'ajouter le . qui désigne le répertoire courant dans le CLASSPATH surtout lorsque l'on n'utilise pas d'outils de type IDE. Attention toutefois, cette pratique est fortement déconseillée dans un environnement de production pour ne pas poser de problèmes de sécurité.
Il faudra ajouter par la suite les chemins d'accès aux différents packages requis par les développements afin de les faciliter.
Pour que ces modifications prennent effet dans le système, il faut redémarrer Windows ou exécuter ces deux instructions sur une ligne de commande DOS.

1.6.4. Les éléments du JDK 1.3 sous Windows

Le répertoire dans lequel a été installé le JDK contient plusieurs répertoires. Les répertoires donnés ci-après sont ceux utilisés en ayant gardé le répertoire par défaut lors de l'installation.
Répertoire Contenu
C:\jdk1.3 Le répertoire d'installation contient deux fichiers intéressants : le fichier readme.html qui fourni quelques informations et des liens web et le fichier src.jar qui contient le source Java de nombreuses classes. Ce dernier fichier n'est présent que si l'option correspondante a été cochée lors de l'installation.
C:\jdk1.3\bin Ce répertoire contient les exécutables : le compilateur javac, l'interpréteur java, le débuggeur jdb et d'une façon générale tous les outils du JDK.
C:\jdk1.3\demo Ce répertoire n'est présent que si l'option nécessaire a été cochée lors de l'installation. Il contient des applications et des applets avec leur code source.
C:\jdk1.3\docs Ce répertoire n'est présent que si la documentation a été décompressée.
C:\jdk1.3\include et C:\jdk1.3\include-old Ces répertoires ne sont présents que si les options nécessaires ont été cochées lors de l'installation. Il contient des fichiers d'en-tête C (fichier avec l'extension .H) qui permettent de faire interagir du code Java avec du code natif
C:\jdk1.3\jre Ce répertoire contient le JRE : il regroupe le nécessaire à l'exécution des applications notamment le fichier rt.jar qui regroupe les API. Depuis la version 1.3, le JRE contient deux machines virtuelles : la JVM classique et la JVM utilisant la technologie Hot spot. Cette dernière est bien plus rapide et c'est elle qui est utilisée par défaut.
Les éléments qui composent le JRE sont séparés dans les répertoires bin et lib selon leur nature.
C:\jdk1.3\lib Ce répertoire ne contient plus que quelques bibliothèques notamment le fichier tools.jar. Avec le JDK 1.1 ce répertoire contenait le fichier de la bibliothèque standard. Ce fichier est maintenant dans le répertoire JRE.

1.6.5. L'installation de la version 1.4.2 du JDK de Sun sous Windows

Télécharger sur le site java.sun.com et exécuter le fichier j2sdk-1_4_2_03-windows-i586-p.exe.
Un assistant permet de configurer l'installation au travers de plusieurs étapes :
  • La page d'acceptation de la licence (« Licence agreement » ) s'affiche
  • Lire la licence et si vous l'acceptez, cliquer sur le bouton radio « I accept the terms in the licence agreement », puis cliquez sur le bouton « Next »
  • La page de sélection des composants à installer (« Custom setup ») s'affiche, modifiez les composants à installer si nécessaire puis cliquez sur le bouton « Next »
  • La page de sélection des plug in pour navigateur (« Browser registration ») permet de sélectionner les navigateurs pour lesquels le plug in Java sera installé, sélectionner ou non le ou les navigateurs détectés, puis cliquez sur le bouton « Install »
  • L'installation s'opère en fonction des informations fournies précédemment
  • La page de fin s'affiche, cliquez sur le bouton « Finish »
Même si ce n'est pas obligatoire pour fonctionner, il est particulièrement utile de configurer deux variables systèmes : PATH et CLASSPATH.
Dans la variable PATH, il est pratique de rajouter le chemin du répertoire bin du JDK installé pour éviter à chaque appel des commandes du JDK d'avoir à saisir leur chemin absolu.
Dans la variable CLASSPATH, il est pratique de rajouter les répertoires et les fichiers .jar qui peuvent être nécessaires lors des phases de compilation ou d'exécution, pour éviter d'avoir à les préciser à chaque fois.

1.6.6. L'installation de la version 1.5 du JDK de Sun sous Windows

Il faut télécharger sur le site de Sun et exécuter le fichier j2sdk-1_5_0-windows-i586.exe
Un assistant guide l'utilisateur pour l'installation de l'outil.
  • Sur la page « Licence Agreement », il faut lire la licence et si vous l'acceptez, cochez le bouton radio « I accept the terms in the licence agreement » et cliquez sur le bouton « Next »
  • Sur la page « Custom Setup », il est possible de sélectionner/désélectionner les éléments à installer. Cliquez simplement sur le bouton « Next ».
  • La page « Browser registration » permet de sélectionner les plugins des navigateurs qui seront installés. Cliquez sur le bouton « Install »
  • Les fichiers sont copiés.
  • La page « InstallShield Wizard Completed » s'affichage à la fin de l'installation. Cliquez sur « Finish ».
Pour faciliter l'utilisation des outils du J2SE SDK, il faut ajouter le chemin du répertoire bin contenant ces outils dans la variable Path du système.
Il est aussi utile de définir la variable d'environnement JAVA_HOME avec comme valeur le chemin d'installation du SDK.

1.6.7. Installation JDK 1.4.2 sous Linux Mandrake 10

La première chose est de décompresser le fichier téléchargé sur le site de Sun en exécutant le fichier dans un shell.
Exemple :
[java@localhost tmp]$ sh j2sdk-1_4_2_06-linux-i586-rpm.bin
              Sun Microsystems, Inc.
          Binary Code License Agreement
                   for the

JAVATM 2 SOFTWARE DEVELOPMENT KIT (J2SDK), STANDARD
EDITION, VERSION 1.4.2_X

SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE
SOFTWARE IDENTIFIED BELOW TO YOU ONLY UPON THE CONDITION
THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS BINARY
CODE LICENSE AGREEMENT AND SUPPLEMENTAL LICENSE TERMS
(COLLECTIVELY "AGREEMENT"). PLEASE READ THE AGREEMENT
...

Do you agree to the above license terms? [yes or no]
yes
Unpacking...
Checksumming...
0
0
Extracting...
UnZipSFX 5.40 of 28 November 1998, by Info-ZIP (Zip-Bugs@lists.wku.edu).
  inflating: j2sdk-1_4_2_06-linux-i586.rpm
Done.
[java@localhost tmp]$

La décompression crée un fichier j2sdk-1_4_2_06-linux-i586.rpm. Pour installer ce package, il est nécessaire d'être root sinon son installation est impossible.
Exemple :
[java@localhost eclipse3]$ rpm -ivh j2sdk-1_4_2_06-linux-i586.rpm
erreur: cannot open lock file ///var/lib/rpm/RPMLOCK in exclusive mode
erreur: impossible d'ouvrir la base de données Package dans /var/lib/rpm

[java@localhost eclipse3]$ su root
Password:
[root@localhost eclipse3]# rpm -ivh j2sdk-1_4_2_06-linux-i586.rpm
Préparation...              ########################################### [100%]
   1:j2sdk                  ########################################### [100%]
[root@localhost eclipse3]#

Le JDK a été installé dans le répertoire /usr/java/j2sdk1.4.2_06
Pour permettre l'utilisation par tous les utilisateurs du système, le plus simple est de créer un fichier de configuration dans le répertoire /etc/profile.d
Créez un fichier java.sh
Exemple : le contenu du fichier java.sh
[root@localhost root]# cat java.sh
export JAVA_HOME="/usr/java/j2sdk1.4.2_06"
export PATH=$PATH:$JAVA_HOME/bin

Modifiez ses droits pour permettre son exécution
Exemple :
[root@localhost root]# chmod 777 java.sh
[root@localhost root]# source java.sh

Si kaffe est déjà installé sur le système il est préférable de mettre le chemin vers le JDK en tête de la variable PATH
Exemple :
[root@localhost root]# java
usage: kaffe [-options] class
Options are:
        -help                   Print this message
        -version                Print version number
        -fullversion            Print verbose version info
        -ss <size>              Maximum native stack size
[root@localhost root]# cat java.sh
export JAVA_HOME="/usr/java/j2sdk1.4.2_06"
export PATH=$JAVA_HOME/bin:$PATH

Pour rendre cette modification permanente, il faut copier le fichier java.sh dans le répertoire /etc/profile.d
Exemple :
[root@localhost root]# cp java.sh /etc/profile.d

Ainsi tous les utilisateurs qui ouvriront une nouvelle console Bash auront ces variables d'environnements positionnées pour utiliser les outils du JDK.
Exemple :
[java@localhost java]$ echo $JAVA_HOME
/usr/java/j2sdk1.4.2_06
[java@localhost java]$ java -version
java version "1.4.2_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_06-b03)
Java HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode)
[java@localhost java]$

L'installation de la documentation se fait en décompressant l'archive dans un répertoire du système par exemple /usr/java.
Exemple :
[root@localhost local]# mv j2sdk-1_4_2-doc.zip /usr/java
[root@localhost java]# ll
total 33636
drwxr-xr-x  8 root root     4096 oct 16 22:18 j2sdk1.4.2_06/
-rwxr--r--  1 root root 34397778 oct 18 23:39 j2sdk-1_4_2-doc.zip*
[root@localhost java]# unzip -q j2sdk-1_4_2-doc.zip
[root@localhost java]# ll
total 33640
drwxrwxr-x  8 root root     4096 aoû 15  2003 docs/
drwxr-xr-x  8 root root     4096 oct 16 22:18 j2sdk1.4.2_06/
-rwxr--r--  1 root root 34397778 oct 18 23:39 j2sdk-1_4_2-doc.zip*
[root@localhost java]# rm j2sdk-1_4_2-doc.zip
rm: détruire fichier régulier `j2sdk-1_4_2-doc.zip'? o
[root@localhost java]# ll
total 8
drwxrwxr-x  8 root root 4096 aoû 15  2003 docs/
drwxr-xr-x  8 root root 4096 oct 16 22:18 j2sdk1.4.2_06/
[root@localhost java]#

Il est possible pour un utilisateur de créer un raccourci sur le bureau KDE en utilisant le menu contextuel créer un « nouveau/fichier/lien vers une url ... »
Un double-clic sur la nouvelle icône permet d'ouvrir directement Konqueror avec l'aide en ligne de l'API.

1.6.8. L'installation de la version 1.8 du JDK d'Oracle sous Windows

Télécharger le fichier jdk-8u5-windows-i586.exe à l'url http://www.oracle.com/technetwork/java/javase/downloads/..

stop Attention : Windows XP n'est plus supporté par Java 8. Le programme d'installation échoue en erreur lors de son exécution sous Windows XP.

Java 8 peut être utilisé sous Windows XP mais le programme d'installation n'est pas utilisable sur cette version du système d'exploitation qui n'est plus supportée par Microsoft. Il est cependant possible de l'installer manuellement.
Il faut utiliser l'option 7-zip/extraire les fichiers sur le fichier jdk-8u5-windows-i586.exe
Le répertoire décompressé jdk-8u5-windows-i586 contient le fichier tools.zip. Il suffit d'extraire les fichiers de l'archive tools.zip dans un nouveau répertoire par exemple C:\Program Files\Java\jdk1.8.0_5\.
Exemple :
C:\Program Files\Java\jdk1.8.0_5\jre\lib>echo %PATH%
C:\Program Files\Java\jdk1.8.0_5\bin;C:\java\apache-maven-3.1.1\bin;C:\WINDOWS\system32;
  C:\WINDOWS
C:\Program Files\Java\jdk1.8.0_5\jre\lib>echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_5
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r charsets.pack 
  charsets.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r deploy.pack deploy.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r jsse.pack jsse.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r plugin.pack plugin.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>"%JAVA_HOME%\bin\unpack200" -r rt.packrt.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib>java -version
  java version "1.8.0_05"
  Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
  Java HotSpot(TM) Client VM (build 25.5-b02, mixed mode)
C:\Program Files\Java\jdk1.8.0_5\jre\lib>cd ext
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>"%JAVA_HOME%\bin\unpack200" -r jfxrt.pack 
  jfxrt.jar
C:\Documents and Settings\admin>cd "C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext"
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>dir *.pack
  Le volume dans le lecteur C n'a pas de nom.
  Le numéro de série du volume est 1C28-9F3C
  Répertoire de C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext
  18/03/2014  03:15         4 926 375 jfxrt.pack
  18/03/2014  03:15         1 339 473 localedata.pack
  2 fichier(s)        6 265 848 octets
  0 Rép(s)  24 532 004 864 octets libres
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>"%JAVA_HOME%\bin\unpack200" -r jfxrt.pack 
  jfxrt.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>"%JAVA_HOME%\bin\unpack200" -r localedata.pack
  localedata.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>cd "C:\Program Files\Java\jdk1.8.0_5\lib"
C:\Program Files\Java\jdk1.8.0_5\lib>"%JAVA_HOME%\bin\unpack200" -r tools.pack tools.jar
C:\Program Files\Java\jdk1.8.0_5\jre\lib\ext>cd "C:\Program Files\Java\jdk1.8.0_5\lib"
C:\Program Files\Java\jdk1.8.0_5\lib>"%JAVA_HOME%\bin\unpack200" -r tools.pack tools.jar

Pour utiliser certains outils comme Netbeans 8.0, il est nécessaire de convertir les autre fichiers, notamment jfxrt.pack et tools.pack,en fichier jar.
Attention : cette solution installe le JDK mais n'installe pas les plugins dans les navigateurs.


 







Aucun commentaire:

Enregistrer un commentaire