Quelques aspects avancés du langage
Cette partie du présente essentiellement les éléments nouveaux du langage. Elle insiste sur les points les plus intéressants mais aussi les plus complexes, à savoir les types génériques et les annotations.
- Les inner classes.
- Les classes anonymes.
- La redéfinition covariante des méthodes (jdk1.5).
- Les nouvelles boucles for (jdk1.5).
- Les import static (jdk1.5).
- Les varargs (jdk1.5).
- L'auto-boxing, auto-unboxing (jdk1.5).
- Les types énumérés (jdk1.5). L'utilisation et la définition.
- Les types génériques (jdk1.5). L'utilisation et la définition de types génériques simples. La généricité et la relation de sous-typage : le type ? Le mécanisme d'effacement et ses conséquences : les types génériques à l'exécution, les types génériques et l'instanciation, les types génériques et les tableaux. Les méthodes génériques. L'utilisation simultanée des types génériques et non génériques.
- Les annotations (jdk1.5). Les objectifs et les principes. Les annotations prédéfinies (@override, @deprecated, @suppress§Warnings). La définition de nouvelles annotations. Les méta-annotations (@Retention, @Target, @Documented, @Inherited). L'utilisation réflexive des annotations à l'exécution.
_ Travaux pratiques : Utilisation des types génériques et des annotations.
La programmation concurrente
- La programmation concurrente est un aspect important du langage : elle offre une solution élégante et efficace à de nombreux problèmes difficiles à résoudre autrement (en particulier la construction de serveurs performants). Cette forme de programmation comporte cependant des pièges. On étudie le plus courant d'entre eux : l'interblocage.
- Définitions relatives à la programmation concurrente : les threads. La création/destruction des threads. Ordonnancement des threads
- La synchronisation des threads. Le verrouillage des méthodes et des instructions (synchronized). Les moniteurs.
- Principes méthodologiques pour la conception d'applications multithreadées.
- Les problèmes posés par la programmation multithread. Le problème de l'interblocage (caractérisation, évitement, prévention, détection). Le problème de la famine.
- La librairie concurrente de JDK1.5. Les nouvelles collections. Les nouveaux outils de synchronisation : les verrous partagés/exclusifs, les sémaphores, les barrières cycliques, ....
_ Travaux pratiques : Construction d'une application concurrente avec synchronisation et résolution d'interblocage.
La programmation des communications distantes
- Le langage propose de nombreuses librairies de communication. On présente les plus utilisées et représentatives en insistant sur leurs particularités et leurs domaines d'application.
- La communication par socket
- Rappels sur les principaux concepts réseaux.
- La programmation en mode non connecté (par datagram). Le modèle peer to peer
- La communication en mode connecté (par stream). Le modèle client/serveur. Serveur séquentiel vs serveur concurrent. Utilisation de la sérialisation.
- La librairie nio. Les buffers, channels. Les sélecteurs et leur utilisation.
- La communication par invocation de méthode distante : RMI
- Les principes généraux.
- Les classes de base.
- Le service de nommage.
- Le processus de développement du client et du serveur.
- Les contraintes de sécurité et de chargement de classes.
- La communication par messages : JMS
- Les principes généraux de la communication par messages.
- Les concepts de JMS, les interfaces et les classes correspondantes.
- Les différentes formes de messages.
- La communication en mode point à point.
- La communication en mode publish/subscribe.
L'administration et la supervision
- L'administration et la supervision des applications prennent une importance de plus en plus grande. JMX est le standard qui semble s'imposer aujourd'hui dans le monde Java, en particulier grâce à son modèle simple mais puissant mais aussi grâce à sa nature peu intrusive.
- Présentation de JMX (Java Management Extension)
- La distinction entre l'application à administrer et l'application d'administration.
- Les concepts de JMX : MBean, MBeanServer, Agent, Connector.
- Les API JMX.
- La mise en oeuvre des différentes catégories de Mbeans (standard, dynamiques, model).
- L'utilisation des adaptateurs et des connecteurs.
- Les consoles d'administration.
- La programmation réflexive
La sécurité et le chargement de classes
On aborde ici des aspects avancés et moins connus de la JVM.
- Les mécanismes liés à la JVM pour assurer la sécurité. Le modèle de sécurité de Jdk1.2 : les permissions, les politiques, les domaines de sécurité. Le gestionnaire de sécurité et le contrôleur d'accès.
- Les mécanismes de chargement de classes.
- Le développement de chargeurs de classes spécifiques.