Instrumentation et réflexivité en Java 5.0 et 6.0



Documents pareils
Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Derrière toi Une machine virtuelle!

Annexe : La Programmation Informatique

IFT785 Approches Orientées Objets. FINAL Été Remise : Jeudi 19 août 2002 à 9h00 am

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Remise à niveau d un programme JAVA du domaine public

Traduction des Langages : Le Compilateur Micro Java

TP1 : Initiation à Java et Eclipse

Évaluation et implémentation des langages

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation Objet Java Correction

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Mise en œuvre des serveurs d application

Chapitre VI- La validation de la composition.

Programmer en JAVA. par Tama

La carte à puce. Jean-Philippe Babau

Programmation Orientée Objet

Vulgarisation Java EE Java EE, c est quoi?

as Architecture des Systèmes d Information

La technologie Java Card TM

INITIATION AU LANGAGE JAVA

Remote Method Invocation (RMI)

Auto-évaluation Aperçu de l architecture Java EE

Projet Active Object

Initiation à JAVA et à la programmation objet.

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

La plate-forme DIMA. Master 1 IMA COLI23 - Université de La Rochelle

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Chapitre 2. Classes et objets

Utiliser Java sans BlueJ

TP1. Outils Java Eléments de correction

TP1 : Initiation à Java et Eclipse

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours 1: Java et les objets

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Généralités sur le Langage Java et éléments syntaxiques.

JOnAS Day 5.1. Clustering

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Chapitre I Notions de base et outils de travail

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Héritage presque multiple en Java (1/2)

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Bases Java - Eclipse / Netbeans

Java 7 Les fondamentaux du langage Java

Télécom Nancy Année

Projet de développement

Java DataBaseConnectivity

Générer du code à partir d une description de haut niveau

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Bien architecturer une application REST

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Tp 1 correction. Structures de données (IF2)

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Java au cœur de la base de données Oracle

Environnements de développement (intégrés)

Compte Rendu d intégration d application

Cahier des charges (CDC)

Java Licence professionnelle CISII,

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Projet de Veille Technologique

Auto-évaluation Programmation en Java

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

Instrumentation de code Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Programmation par composants (1/3) Programmation par composants (2/3)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Intégration de l interface graphique de Ptidej dans Eclipse

F. Barthélemy. 17 mai 2005

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Projet gestion d'objets dupliqués

Objets et Programmation. origine des langages orientés-objet

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Java 1.5 : principales nouveautés

Poker. A rendre pour le 25 avril

Magento. Pratique du e-commerce avec Magento. Christophe Le Bot avec la contribution technique de Bruno Sebarte

Meta Object Facility. Plan

Vérifier la qualité de vos applications logicielle de manière continue

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

Élaborer une production dans un contexte collaboratif. Michel Futtersack, Faculté de Droit, Université Paris Descartes, Sorbonne Paris Cité

Architecture et Extensions d ArcGIS Server

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Alfstore workflow framework Spécification technique

GOL502 Industries de services

SGDN. Projet: JAVASEC

Remote Method Invocation Les classes implémentant Serializable

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Annexe 10 - Procédure pour créer un Jar

Programmation en Java IUT GEII (MC-II1) 1

TD n o 8 - Domain Name System (DNS)

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Transcription:

Java Instrumentation et réflexivité en Java et 6.0 UPMC November 9, 2006 (UPMC) Instrumentation November 9, 2006 1 / 28

Java Petit Plan Plan de ce cour 1 Présentation de l Instrumentation 2 Présentation de la nouvelle API 3 Partie Instrumentation 4 Partie Instrumentation 5 Théoriques 6 Pratiques 7 8 Présentation des changements en 6.0 9 s 10 Questions (UPMC) Instrumentation November 9, 2006 2 / 28

Instrumentation : Définition Java Instrumentation Définition : Est considéré comme instrumentation toute opération visant à modifier un programme pour en suivre le comportement. Exemples : debug, monitoring, couverture de code, profiling. (UPMC) Instrumentation November 9, 2006 3 / 28

Instrumentation : Avant Java Java API précédentes Il est à noter qu avant l API, il n y avait pas de mécanismes dédiés à l instrumentation de code. Les problèmes d instrumentation était traités par catégories: Le débug par Java Platform Debugger Architecture [Sun04a]. Le monitoring par certaines classes dédiées. La couverture de code n était pas gérée du tout. Le profiling n était pas gérer du tout. (UPMC) Instrumentation November 9, 2006 4 / 28

Instrumentation : Avant Java Java Pour conclure, en Java comme dans tous les autres langages il fallait écrire sois même les programmes visant à ajouter du code d instrumentation dans les sources afin d obtenir un compilé instrumenté. Ou creer un programme d instrumentation exterieur via JPDA [Sun04a], ce qui peut se révéler beaucoup plus élégant. (UPMC) Instrumentation November 9, 2006 5 / 28

de Java Java API L API de Java [Sun04b] apporte un nouveau package : java.lang.intrument qui contient deux services. Un service d instrumentation statique, ClassFileTransformer Un service dynamique, la redéfinition de classe. Ces deux services secouent le principe de simplicité de Java car ils demandent de savoir manipuler le code octet des classes. (UPMC) Instrumentation November 9, 2006 6 / 28

Instrumentation statique: Class File Transformer Java API Un Class File Transformer est une classe qui implante : byte[] transform(classloader loader, String classname, Class<?> ClassBeingRedefined, byte[] classbuffer) Cette classe vient se greffer à tout les chargeurs de classes pour en modifier le code octet chargé. Cette méthode permet d accéder au code octet et à la réification des classes, avant de les modifier. (UPMC) Instrumentation November 9, 2006 7 / 28

Instrumentation statique: Class File Transformer Java Mise en place Le paquet : java.lang.intrument permet l ajout ou le retrait des Class File Transformer : void addtransformer( ClassFileTransformer transformer) boolean removetransformer( ClassFileTransformer transformer) La partie statique du paquet instrumentation sert donc au chargement et au déchargement des instrumenteurs. (UPMC) Instrumentation November 9, 2006 8 / 28

Instrumentation statique: Class File Transformer Java Mise en place Cependant certains services utiles ne sont pas fournis par cette API, il n est pas possible: de connaître quels sont les instrumenteurs couramment en services (sauf en essayant de les enlever). de savoir quelle classe à été modifié par quel instrumenteur. (UPMC) Instrumentation November 9, 2006 9 / 28

Instrumentation statique: Class File Transformer Java Mise en place Autre problème, sachant que les instrumenteurs sont attachés aux chargeurs de classes par l appelle à addtransformer. Même si cette commande est la première instruction du main de vôtre application, elle sera presque sans effet. Les chargeurs de classes ne vont pas attendre le dernier moment pour charger les classes d une application en mémoire. La plus part des classes du programme seront déjà résidente dans la JVM qui pré-charge un grand nombre de classes, elles ne passeront donc pas par l instrumenteur. (UPMC) Instrumentation November 9, 2006 10 / 28

Instrumentation statique: Class File Transformer Java Solution Utiliser les agents Java. Un Agent java est un Jar précisé à la ligne de commande de lancement d une application. Ce Jar contiens un certains nombre de classes, avec un premain qui est exécuté avant le démarrage de la JVM, permettant de charger les instrumenteurs avant le chargement des classes à instumenter. (UPMC) Instrumentation November 9, 2006 11 / 28

Instrumentation statique: Java une implémentation périlleuse Apport d un moyen d instrumenter du code, au niveau du code octet. Pas de réflexion de l entité Class (toujours lisible, mais pas modifiable). Avec des problèmes d implémentation et de visibilité. Méthode classique chez les implémenteurs de langages, si c est dur a implémenter alors que l utilisateur le fasses. Il vaut mieux que ça soit le programme de l utilisateur qui plante, plutôt que la machine virtuelle. (UPMC) Instrumentation November 9, 2006 12 / 28

Instrumentation dynamique: Redéfinition de classe Java API le paquet java.lang.instrument propose une méthode pour redéfinir un lot de classes : void redefineclasses(classdefinition[] definitions) Sachant qu une ClassDefinition est un couple (class,byte[]). Ici encore on doit pouvoir fournir du code octet valide représentant une classe. (UPMC) Instrumentation November 9, 2006 13 / 28

Java Instrumentation dynamique: Redéfinition de classe Réflexion comportemental A la vue de cette nouvelle fonctionnalité, les anciens de smalltalk 80, réveillent leurs instincts profonds et pense pouvoir reprendre leurs anciennes activités étranges : ajouter des champs à une classe, enlever des champs à une classe, ajouter des méthodes, les retirer, changer l arbre d héritage, les interfaces implémentés, dériver les mécanismes internes du langage. Et bien non, tout ceci n est pas possible avec la version de la machine virtuelle. (UPMC) Instrumentation November 9, 2006 14 / 28

Instrumentation dynamique: Redéfinition de classe Java Réflexion comportemental: un espoir Les spécifications pour cette méthode sont strictes, rien n a été changé dans la JVM, les seuls opérations permises sont la redéfinition du code des méthodes et des valeurs des éléments constants, sous peine de faire planter la JVM. Il est donc possible d utiliser de la réflexion comportementale au moins au niveau des méthodes. Remarque: les restrictions sur les modifications des classes pourrait être levés dans les futurs versions de la JVM... (UPMC) Instrumentation November 9, 2006 15 / 28

Instrumentation dynamique: Redéfinition de classe Java Réflexion comportemental: Clash des méthodes Comme pour la méthode statique, cette méthode pose des problèmes d implémentation. Le Problème viens du fait que la redéfinition de classe n a pas accès au code courant chargé des classes en mémoire. Il serrai toujours possible d aller chercher le code dans les.class via le ClassPath, mais si les classes ont été modifiés par un instrumenteur, l opération devient très complexe en connaissance des lacunes précédemment énoncées. (UPMC) Instrumentation November 9, 2006 16 / 28

Instrumentation dynamique: Redéfinition de classe Java Réflexion comportemental: Clash des méthodes De plus une classe redéfinies passent par les instrumenteurs de classes! Il faudra donc être vigilant si l on ne veut pas provoquer des effets indésirables. En particulier si l on comptait utiliser ce mécanisme pour désintrumenter une classe. (UPMC) Instrumentation November 9, 2006 17 / 28

Java Inchangé Java Méthode statique L ajout de la possibilité de redéfinir les classes au chargement n apporte rien de plus à l expressivité du langage. Il était possible de le faire en modifiant les.class avant de les charger. (UPMC) Instrumentation November 9, 2006 18 / 28

Java Inchangé Java Méthode dynamique Même sanction pour la redéfinition dynamique. La méthode ne permettant que de changer le corps des méthodes, et le pool d attributs statiques, son action peut être simulé avec le pattern façade. (UPMC) Instrumentation November 9, 2006 19 / 28

Java Inchangé Java Méthode dynamique et statiques combinés La sanction s applique aussi à la combinaison des deux méthodes, car la restriction qui s applique à la redéfinition des classes s applique aussi aux modifieurs de classes qui agissent dynamiquement, si ils modifient des champs non prévu par le mécanisme il feront cracher la JVM. (UPMC) Instrumentation November 9, 2006 20 / 28

Java Méthode statique Autant au niveau théorique, ces ajouts n apportent rien au langage, pour ce qui est de la il n en n est pas de même. En effet les instrumenteurs de classes peuvent lire le code octet avant leur chargement dans la JVM et cet fonctionnalité peut être détourné. Méthode dynamique La méthode dynamique apporte la possibilité de redéfinir les méthodes d une classe au niveau du code octet ce qui ouvre de nouvelles portes pour l optimisation. (UPMC) Instrumentation November 9, 2006 21 / 28

Exemples d applications Java Exemple : sécurité Le fait de pouvoir accéder au code octet et de décider si il est valide permet : Faire du chargement sécurisé avec un protocole de signature des classes (avec les annotations) Instrumenter du code pour les frameworks anti-hack. Exemple : optimisation Recompilation de méthodes optimisées pour un usage. Mise à jours et Debug à la volé. (UPMC) Instrumentation November 9, 2006 22 / 28

Exemples d applications Java Exemple : JPDA Remarque : Toutes ces opérations sont réalisables avec un programme utilisant JPDA. Mais c est très inefficace. (UPMC) Instrumentation November 9, 2006 23 / 28

Sun Corrige les problèmes rencontrés en Java Amélioration du système statique Sun a corriger beaucoup des problèmes de la version dans [Sun06]. 1 La méthode a accès à la politique de sécurité (class loader). 2 Création de deux types d instrumenteurs : Ceux qui supporte la redéfinition de classe. Ceux qui ne le supporte pas. (UPMC) Instrumentation November 9, 2006 24 / 28

Sun Corrige les problèmes rencontrés en Java Amélioration du système dynamique Sun a corriger tout les problèmes techniques de la partie dynamique. 1 On ne passes plus de tableau de classes. 2 Ajouts de choses technique pour les méthodes natives. 3 L utilisation de redefineclass est déconseillé (deprecated?). 4 Ajout de la méthode retransformclass, qui relance les instrumenteurs, qui eux ont accès au code octet! (UPMC) Instrumentation November 9, 2006 25 / 28

Java Réflexion comportementale La réflexion comportementale au niveau des méthodes est apportée par les API de Java depuis. C est pas nouveau Oui mais c était déjà réalisable avec JPDA! [Mou06] (UPMC) Instrumentation November 9, 2006 26 / 28

Java Bibliographie.. Instrumentation et instrospection dans java et 6.0. 2006. SunMicrosystems. Java Platform Debugger Architecture. Sun, 2004. SunMicrosystems. Java 2 Platform Standard Ed.. Sun, 2004. SunMicrosystems. Java Platform, Standard Edition 6 API Specification DRAFT beta2-b86, 2006. (UPMC) Instrumentation November 9, 2006 27 / 28

Questions Java Posez moi la question 1 Pourquoi est ce que tout ça était faisable en JPDA? 2... (UPMC) Instrumentation November 9, 2006 28 / 28