WO2007006697A1 - Class loader tree traced on directory tree - Google Patents

Class loader tree traced on directory tree Download PDF

Info

Publication number
WO2007006697A1
WO2007006697A1 PCT/EP2006/063877 EP2006063877W WO2007006697A1 WO 2007006697 A1 WO2007006697 A1 WO 2007006697A1 EP 2006063877 W EP2006063877 W EP 2006063877W WO 2007006697 A1 WO2007006697 A1 WO 2007006697A1
Authority
WO
WIPO (PCT)
Prior art keywords
class
classes
tree
node
loader
Prior art date
Application number
PCT/EP2006/063877
Other languages
French (fr)
Inventor
Laurent Jutard
Christophe Foesser
Original Assignee
Gemplus
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Gemplus filed Critical Gemplus
Publication of WO2007006697A1 publication Critical patent/WO2007006697A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

The invention concerns the field of bytecode (pseudocode) loading in software environments. The invention concerns a method of dynamic class loading into a virtual machine of a computer system comprising a tree-like system for storing operating system data, characterized in that it includes: a step of recording class files in the tree-like storage system, a step of scanning the tree of the storage system, for at least one node of said tree, the node comprising at least one class file, a step of creating a class loader referencing the classes of the node and the classes of the parent node, a step of loading in said virtual machine the class loader.

Description

ARBORESCENCE DE CHARGEURS DE CLASSES CALQUEE SUR L ' ARBORESCENCE DE REPERTOIRESARBORESCENCE OF CLASS CHARGERS CLOSED ON THE ARBORESCENCE OF DIRECTORIES
La présente invention se rapporte au domaine du chargement de bytecodes (pseudo-codes) dans des environnements logiciels interprétés.The present invention relates to the field of loading bytecodes (pseudo-codes) in interpreted software environments.
La présente invention concerne plus particulièrement un procédé et une architecture pour le chargement de tels bytecodes, par exemple des classes, offrant la possibilité, sur une même machine virtuelle et en même temps, d'exécuter différentes implémentations d'une même classe et d'en faciliter la gestion.The present invention more particularly relates to a method and an architecture for loading such bytecodes, for example classes, offering the possibility, on the same virtual machine and at the same time, to execute different implementations of the same class and of to facilitate management.
Dans les environnements de langage de programmation, l'exécution de programmes de type Java requiert que le code source du programme soit compilé en pseudo-codes (bytecodes) Java, lesquels sont interprétés par un ordinateur virtuel, appelé Machine Virtuelle. Les codes sources Java sont constitués généralement de classes stockées dans des fichiers de classes sous le format de bytecode, par exemple des fichiers JAR [Java ARchive) pour le langage Java (nom commercial) . Une classe est un ensemble de variables et de méthodes qui modélisent le comportement d'un objet. Ces classes sont chargées dans la mémoire de la machine virtuelle à l'aide d'un chargeur de classe (class loader) pour ensuite être interprétées par la machine virtuelle. Afin d'optimiser la gestion de la mémoire utilisée par la machine virtuelle, le chargement des classes peut être réalisé de façon dynamique lors de l'exécution du programme sur la machine virtuelle, comme dans l'exemple de réalisation décrit plus en détail dans le brevet US 6 470 494 ou dans la demande de brevet US 2004 / 261 069. Le chargement dynamique offre la possibilité de ne charger en mémoire les classes ou versions de classe que lorsque celles-ci sont utilisées, permettant d'économiser de la sorte les ressources de la machine virtuelle lors de l'exécution du code source.In programming language environments, running Java programs requires that the source code of the program be compiled into Java pseudo-codes (bytecodes), which are interpreted by a virtual machine called Virtual Machine. Java source codes typically consist of classes stored in class files in the bytecode format, for example, Java Archive (JAR) files for Java (Business Name). A class is a set of variables and methods that model the behavior of an object. These classes are loaded into the virtual machine's memory using a class loader and then interpreted by the virtual machine. In order to optimize the management of the memory used by the virtual machine, the loading of the classes can be carried out dynamically during the execution of the program on the virtual machine, as in the embodiment described in more detail in FIG. US Pat. No. 6,470,494 or in US Patent Application 2004 / 261,069. dynamic loading provides the ability to only load classes or class versions in memory when they are used, thereby saving the resources of the virtual machine when executing the source code.
On connaît déjà des solutions logicielles de chargement dynamique de classes, telles que Eclipse d'IBM (noms commerciaux). Dans cette dernière, l'intégralité des fichiers de classes d'un même dossier est chargée en utilisant un unique chargeur de classe.Dynamic class loader software solutions such as IBM's Eclipse (trade names) are already known. In the latter, all of the class files in the same folder are loaded using a single class loader.
Cependant il peut être souhaitable d'exécuter sur une même machine virtuelle VM, plusieurs configurations sensiblement proches, c'est-à-dire plusieurs implémentations d'une même classe.However it may be desirable to run on the same virtual machine VM, several configurations substantially similar, that is to say, several implementations of the same class.
Dans les solutions courantes, une variable appelée ClassPath (chemin de classe) permet de localiser le fichier de classes à partir du nom de la classe. En fonctionnement traditionnel, si deux classes portent le même nom, la seconde est ignorée. Il n'est donc pas possible d'avoir deux implémentations d'une même classe portant le même nom.In common solutions, a variable called ClassPath (classpath) is used to locate the class file from the class name. In traditional operation, if two classes have the same name, the second is ignored. It is therefore not possible to have two implementations of the same class with the same name.
Pour permettre toutefois la présence de deux implémentations d'une même classe, il est possible de dupliquer la classe en lui attribuant un autre nom, ou de produire des classes d'extension d'une même classe (concept d'héritage en langage orienté objet) . Lors du chargement, un chargeur de classe spécifique est employé pour chacune des deux classes (ou des deux classes étendues) que l'on désire implémenter . Cette solution présente certains inconvénients, notamment :However, to allow the presence of two implementations of the same class, it is possible to duplicate the class by giving it another name, or to produce extension classes of the same class (concept of inheritance in object-oriented language ). When loading, a specific class loader is used for each of the two classes (or the two extended classes) that you want to implement. This solution has certain disadvantages, in particular:
— la difficulté de maintenir une compatibilité ascendante : comment s'assurer que la modification d'une classe mère n'altère pas le bon fonctionnement des classes filles ?,- the difficulty of maintaining backward compatibility: how to ensure that the modification of a mother class does not affect the proper functioning of the girls classes?
— l'architecture est figée pour une implémentation,- the architecture is fixed for an implementation,
— la maintenance est rendue difficile : si l'on souhaite modifier un élément commun à l'ensemble, il faut modifier l'ensemble des classes et mettre à jour le ClassPath,- the maintenance is made difficult: if one wishes to modify an element common to all, it is necessary to modify all the classes and to update the ClassPath,
— l'impossibilité de décharger une implémentation de classes sans avoir à décharger la machine virtuelle dans sa totalité,- the impossibility of unloading a class implementation without having to unload the virtual machine in its entirety,
— la difficulté à identifier les parties communes qui pourraient être réutilisées pour un éventuel partage de ces classes avec d'autres modules.- the difficulty in identifying the common parts that could be reused for a possible sharing of these classes with other modules.
II existe donc un besoin de solution pour le chargement de classes offrant la possibilité, sur une même machine virtuelle et en même temps, d'exécuter différentes implémentations d'une même classe, portant éventuellement le même nom, et d'en faciliter la gestion.There is therefore a need for a solution for loading classes offering the possibility, on the same virtual machine and at the same time, to execute different implementations of the same class, possibly bearing the same name, and to facilitate management thereof. .
L'invention propose de résoudre les inconvénients de l'art antérieur en organisant et stockant les bytecodes ou classes dans une arborescence de stockage de données, par exemple une arborescence de répertoires, et en affectant un chargeur de bytecodes à chacun des nœuds de l'arborescence. Notamment, cette arborescence permet de conserver l'héritage de classes en organisant les classes mères dans le répertoire parent des classes filles. Ainsi, les chargeurs de classes sont mappés sur l'arborescence de répertoires dans laquelle sont stockés les fichiers de classes : le lien de parenté entre un classloader (chargeur de classes) affilié à un répertoire et un classloader affilié au répertoire parent est le même que celui entre un répertoire et le répertoire parent. L'invention offre les avantages suivants :The invention proposes to solve the disadvantages of the prior art by organizing and storing the bytecodes or classes in a data storage tree, for example a directory tree, and assigning a bytecode loader to each of the nodes of the tree. In particular, this tree makes it possible to preserve the class inheritance by organizing the parent classes in the parent directory of the child classes. Class loaders are mapped to the directory tree in which the class files are stored: the relationship between a classloader (class loader) affiliated with a directory and a classloader affiliated with the parent directory is the same as the one between a directory and the parent directory. The invention offers the following advantages:
- différentes implémentations d'une même classe indépendamment de leur nom, en même temps et sur un même VM, sont possibles ; en effet, deux classloaders sont créés pour deux classes stockées dans deux répertoires séparés,- different implementations of the same class independently of their name, at the same time and on the same VM, are possible; indeed, two classloaders are created for two classes stored in two separate directories,
- la factorisation des classes en utilisant l'arborescence des répertoires pour conserver le mécanisme classique de l'héritage en plaçant les classes mères dans un répertoire parent. Cette factorisation fournit alors une organisation modulaire des classes, permettant un chargement plus rapide dans la machine virtuelle et un déchargement possible et ciblé sans arrêter l'exécution de la machine virtuelle (la gestion de la mémoire en est alors fortement simplifiée) , - un cycle de vie spécifique pour chacune des implémentations de la classe permettant une gestion et une maintenance (évolution propre des propriétés, chargement ou déchargement indépendant) de l' implémentation indépendamment des autres : toute modification sur une implémentation de classe n'affecte pas les autres classes.- class factorization using the directory tree to preserve the classical mechanism of inheritance by placing the parent classes in a parent directory. This factorization then provides a modular organization of classes, allowing a faster loading into the virtual machine and a possible and targeted unloading without stopping the execution of the virtual machine (the management of the memory is then greatly simplified), - a cycle specific life for each of the implementations of the class allowing management and maintenance (own evolution of the properties, independent loading or unloading) of the implementation independently of the others: any modification on a class implementation does not affect the other classes.
L'invention s'applique particulièrement aux IHM (Interface Homme-Machine) mettant en œuvre des objets similaires avec des spécificités ou fonctionnalités différentes. Par exemple, un logiciel de programmation pour carte à puce qui doit présenter, sur une même interface de programmation API, des fonctionnements identiques de cartes alors même que ces cartes ont des spécificités de ressources matérielles différentes de l'une à l'autre. Dans cette optique, l'invention permet de créer des ensembles de classes communes (classes mères) à toutes les configurations de cartes et des parties plus spécifiques (classes filles) dans des sous-répertoires propres à chacune des cartes. À cet effet, l'invention concerne, dans son acception la plus générale, un procédé de chargement dynamique de classes dans une machine virtuelle d'un système informatique comportant un système arborescent de stockage de données du système d'exploitation, caractérisé en ce qu'il comprend :The invention applies particularly to HMIs (Human Machine Interface) implementing similar objects with different specificities or functionalities. For example, a smart card programming software that must present, on the same API programming interface, identical card operations even though these cards have different hardware resource specificities from one to the other. In this respect, the invention makes it possible to create sets of common classes (parent classes) to all the card configurations and more specific parts (daughter classes) in subdirectories specific to each of the cards. To this end, the invention relates, in its most general sense, to a dynamic class loading method in a virtual machine of a computer system comprising a tree system for storing data of the operating system, characterized in that 'He understands :
- une étape d'enregistrement de fichiers de classes dans les nœuds de l'arborescence du système de stockage,a step of registering class files in the nodes of the storage system tree,
- une étape de balayage de l'arborescence,a step of scanning the tree,
- pour au moins un nœud de ladite arborescence, le nœud comprenant au moins un fichier de classes, : o une étape de création d'un chargeur de classes référençant les classes du nœud et les classes du nœud parent, o une étape de chargement dans ladite machine virtuelle du chargeur de classes.for at least one node of said tree, the node comprising at least one class file, a step of creating a class loader referencing the classes of the node and the classes of the parent node, a step of loading in said class loader virtual machine.
Dans un mode de réalisation approprié pour conserver l'héritage de classes (par exemple l'héritage de classes), ledit chargeur de classes créé référence les classes du chargeur de classes dudit nœud parent.In an appropriate embodiment for maintaining class inheritance (eg, class inheritance), said created class loader references classes of the class loader of said parent node.
Particulièrement, le chargeur de classes du nœud racine référence uniquement les classes du nœud racine. Cela permet d' initier le chargement pour le nœud le plus en amont . Dans un autre mode de réalisation, le chargeur de classes du nœud racine référence les classes du nœud racine et des classes par défaut.In particular, the class loader of the root node only references the classes of the root node. This initiates loading for the most upstream node. In another embodiment, the class loader of the root node references classes of the root node and default classes.
Dans un mode de réalisation particulier, ladite arborescence respecte l'héritage entre classes.In a particular embodiment, said tree respects inheritance between classes.
L'invention concerne également une architecture pour le chargement dynamique de classes dans une machine virtuelle d'un système informatique comportant un système de stockage de données en arborescence, caractérisée en ce qu'elle comprend une pluralité de fichiers de classes organisés dans les nœuds de l'arborescence du système de stockage et une pluralité de chargeurs de classes correspondant chacun à un nœud contenant au moins un fichier de classes, lesdits chargeurs de classes référençant les classes du nœud correspondant et les classes du nœud parent.The invention also relates to an architecture for the dynamic loading of classes in a virtual machine of a computer system comprising a system for storing data in a tree structure, characterized in that it comprises a plurality of class files organized in the nodes of the storage system tree and a plurality of class loaders each corresponding to a node containing at least one class file, said class loaders referencing the classes of the storage system. corresponding node and the classes of the parent node.
Dans un mode de réalisation, lesdits chargeurs de classes créés référencent chacun les classes du chargeur de classes de leur nœud parent.In one embodiment, said created class loaders each reference classes of the class loader of their parent node.
Dans un autre mode de réalisation, lesdits chargeurs de classes sont organisés selon une arborescence mappée sur ladite arborescence des nœuds du système de stockage.In another embodiment, said class loaders are organized according to a tree structure mapped to said tree of storage system nodes.
Dans un mode de réalisation particulier, l'architecture comporte au moins deux classes portant le même nom dans deux nœuds différents ayant un même nœud parent .In a particular embodiment, the architecture comprises at least two classes bearing the same name in two different nodes having the same parent node.
Particulièrement, ladite arborescence respecte l'héritage entre classes.In particular, said tree respects inheritance between classes.
On comprendra mieux l'invention à l'aide de la description, faite ci-après à titre purement explicatif, d'un mode de réalisation de l'invention, en référence à la figure 1 annexée qui illustre le mapping des chargeurs de classes sur l'arborescence des répertoires.The invention will be better understood using the description, given below purely for explanatory purposes, of an embodiment of the invention, with reference to the appended FIG. 1 which illustrates the mapping of class loaders on the directory tree.
Le mode de réalisation pour la description qui suit aborde l'invention dans le contexte d'un logiciel de programmation pour cartes à puce, comme précédemment introduit, lequel doit prendre en compte différents profils ou configurations matérielles de cartes. Pour chaque profil, un ensemble de classes est développé pour gérer une carte spécifique. Un tel logiciel permet de programmer des actions à réaliser (le code programme est en Java) sur une carte Java en faisant appel à des classes. Pour simplifier la gestion du nombre croissant de cartes différentes, il est intéressant de pouvoir gérer les différentes cartes en utilisant différentes versions ou implémentations d'une même classe, les implémentations portant le même nom et chacune d' entre-elles reflétant les particularités matérielles des cartes. Dans l'exemple de la figure 1, on utilise deux configurations différentes de carte : GXXv3.2 et GX3Gv2.2. On entend par implémentation le développement d'un nouveau code source, ici le code Java de définition et description des classes.The embodiment for the description which follows addresses the invention in the context of a programming software for smart cards, as previously introduced, which must take into account different profiles or hardware configurations of cards. For each profile, a set of classes is developed to manage a specific card. Such software makes it possible to program actions to be performed (the program code is in Java) on a map Java by calling classes. To simplify the management of the increasing number of different cards, it is interesting to be able to manage the different cards by using different versions or implementations of the same class, the implementations bearing the same name and each one of them reflecting the material particularities of the cards. cards. In the example of FIG. 1, two different card configurations are used: GXXv3.2 and GX3Gv2.2. By implementation is meant the development of a new source code, here the Java code for defining and describing classes.
Également à des fins de simplicité, nous n'utiliserons, dans l'exemple qui suit, qu'un seul fichier de classes par répertoire et une seule classe par fichier alors que l'invention peut être mise en œuvre avec plusieurs fichiers JAR dans le même répertoire et plusieurs classes au sein d'un même fichier d'archivé, que ces classes aient ou non une classe mère dans le (s) fichier (s) d'archivé du répertoire parent. II est bien entendu que, même si le langage Java a été évoqué précédemment, l'invention peut s'appliquer à de nombreux langages de programmation pouvant générer un bytecode interprétable, par exemple les langages orientés objets C++ ou encore C# utilisé dans le « framework .Net » (plateforme logicielle de développement Microsoft - nom commercial) .Also for the sake of simplicity, we will use, in the following example, only one class file per directory and one class per file, whereas the invention can be implemented with several JAR files in the file. same directory and several classes within the same archive file, whether or not these classes have a parent class in the archived file (s) of the parent directory. It is understood that, even if the Java language has been mentioned above, the invention can be applied to many programming languages that can generate an interpretable bytecode, for example the object-oriented languages C ++ or C # used in the "framework" .Net "(Microsoft Software Development Platform - Business Name).
*** L'arborescence des classes ****** The class tree ***
En référence à la figure 1, des fichiers JAR (Java ARchive pour Java2) de classes, par exemple « corecommands . jar », sont enregistrés dans les répertoires du système de fichiers du système d'exploitation, par exemple le dossier « GXXv3.2 ». Les répertoires de tous les niveaux de l'arborescence sont susceptibles de recevoir un ou des fichiers d'archivé JAR. On entend par arborescence du système de fichiers, la structure hiérarchique d'organisation des dossiers et sous-dossiers (ou répertoires) dont la forme rappelle celle d'un arbre.Referring to Figure 1, jar files (Java ARchive for Java2) classes, for example "corecommands. jar ", are registered in the operating system file system directories, for example the folder" GXXv3.2 ". Directories from all levels of the tree are likely to receive a or archived JAR files. The file system tree is the hierarchical organization structure of folders and subfolders (or directories) whose shape is similar to that of a tree.
Le répertoire parent « Lib » contient un fichier d'archivé « commandframework. jar » qui contient la définition de la classe « SendAPDU. class ».The parent directory "Lib" contains an archived file "commandframework. jar "which contains the definition of the class" SendAPDU. class ".
Le répertoire fils « GXXv3.2 » contient également un fichier d'archivé « corecommands . jar » contenant la définition de la classe « Create. class » dont la classe « SendAPDU. class » est une classe mère au sens de l'héritage des classes dans les langages orientés objets.The child directory "GXXv3.2" also contains an archived file "corecommands. jar "containing the definition of the class" Create. class "whose class" SendAPDU. class "is a parent class in the sense of class inheritance in object-oriented languages.
Un autre répertoire fils « GX3Gv2.2 » du répertoire « Lib » contient également un fichier d'archivé du même nom « corecommands . jar » et/ou contenant une autre définition de la même classe « Create. class » dont la classe « SendAPDU. class » est une classe mère au sens de l'héritage des classes. Cet autre fichier « corecommands . jar » contient une implémentation de la classe « Create. class » différente de celle du premier fichier pour satisfaire aux spécificités matérielles de la carte à puce associée au type GX3Gv2.2.Another "GX3Gv2.2" child directory in the "Lib" directory also contains an archived file of the same name "corecommands. jar "and / or containing another definition of the same class" Create. class "whose class" SendAPDU. class "is a parent class in the sense of class inheritance. This other file "corecommands. jar "contains an implementation of the class" Create. class "different from that of the first file to satisfy the hardware specificities of the smart card associated with the type GX3Gv2.2.
Les deux classes « Create. class » définissent une même classe (d'où le même nom) pour des configurations différentes : la configuration GXXv3.2 pour la première, GX3Gv2.2 pour la seconde. Leur définition diffère au niveau du code informatique enregistré dans les fichiers de classes JAR.The two classes "Create. class "define the same class (hence the same name) for different configurations: the GXXv3.2 configuration for the first, GX3Gv2.2 for the second. Their definition differs in terms of the computer code registered in the JAR class files.
*** Les ClassLoaders ****** ClassLoaders ***
Lorsque l'on désire exécuter, sur la machine virtuelle, le programme faisant appel à ces classes, un parcours (scan) de l'arborescence des répertoires est réalisé depuis la racine jusqu'aux répertoires de niveau le plus profond. Lors de ce scan de l'arborescence, tous les fichiers d'archivé JAR sont identifiés ainsi que leurs répertoires . Dans le répertoire racine, « Lib » dans l'exemple de la figure 1, le fichier JAR « commandframework. jar » est détecté. Toujours en référence à la figure 1, un chargeur de classes « LibClassLoader » est alors créé, charge la classe « SendAPDU. class » et la référence afin que la machine virtuelle puisse y avoir accès. En langage Java, cette opération peut être réalisée par la fonction suivante :When one wishes to execute, on the virtual machine, the program making use of these classes, a scan of the directory tree is from the root to the deepest level directories. During this scan of the tree, all archived JAR files are identified as well as their directories. In the root directory, "Lib" in the example of Figure 1, the JAR file "commandframework. jar "is detected. Still referring to Figure 1, a class loader "LibClassLoader" is then created, loads the class "SendAPDU. class "and the reference so that the virtual machine can access it. In Java language, this operation can be performed by the following function:
URLClassLoader LibClassLoader = new URLClassLoader (URLU "/Lib/")URLClassLoader LibClassLoader = new URLClassLoader (URLU "/ Lib /")
Le chargement de classes référence également les classes précédemment chargées dans la machine virtuelle, par exemple les classes par défaut chargées par le ClassPath statique au lancement de la machine virtuelle.Class loading also references previously loaded classes in the virtual machine, for example the default classes loaded by the static ClassPath when the virtual machine is launched.
Les classes par défaut ainsi que la classe « SendAPDU. class » peuvent être instanciées dans la machine virtuelle par le chargeur de classes « LibClassLoader ».The default classes as well as the class "SendAPDU. class "can be instantiated in the virtual machine by the" LibClassLoader "class loader.
Lors du parcours de l'arborescence, le répertoire fils « GXXv3.2 » est détecté comme contenant un fichier archive de classe « corecommands . jar ». Un chargeur de classes « GXXv32ClassLoader » est alors créé en référençant les classes contenues dans son répertoire « GXXv3.2 », à savoir « Create. class » et les classes contenues dans le répertoire parent « Lib », à savoir « SendAPDU. class ». Cette opération peut être réalisée par la fonction Java :When browsing the tree, the child directory "GXXv3.2" is detected as containing a class archive file "corecommands." jar ". A class loader "GXXv32ClassLoader" is then created by referencing the classes contained in its "GXXv3.2" directory, namely "Create. class "and the classes contained in the parent directory" Lib ", namely" SendAPDU. class ". This operation can be performed by the Java function:
URLClassLoader GXXv32ClassLoader = new URLClassLoader (URLU 7Lib/GXXv3.21", LibClassLoader)URLClassLoader GXXv32ClassLoader = new URLClassLoader (URLU 7Lib / GXXv3.21 ", LibClassLoader)
Dans cette fonction, on passe en paramètre le chemin "/Lib/GXXv3.2/" du répertoire permettant de charger les classes de tous les fichiers JAR présents dans le répertoire, ici le seul fichier « corecommands . jar ». Dans la fonction, on passe également en paramètre le chargeur de classes parent (ici « LibClassLoader ») . « LibClassLoader » a déjà chargé les classes du répertoire « Lib » et on transmet ces classes au nouveau chargeur de classes créé, un chargeur de classes fils de « LibClassLoader ». Par cette fonction, le chargeur « GXXv32ClassLoader » référence non seulement « Create.class » et « SendAPDU. class » mais également les autres classes que référence « LibClassLoader », à savoir dans cet exemple les classes de Java par défaut. Ainsi toutes ces classes (« Create.class », « SendAPDU. class » et les classes par défaut) peuvent être instanciées par ce chargeur de classes.In this function, we pass in parameter the path "/Lib/GXXv3.2/" of the directory to load the classes of all the JAR files present in the directory, here the only file "corecommands. jar ". In the function, we also pass the parent class loader parameter (here "LibClassLoader"). "LibClassLoader" has already loaded the classes of the "Lib" directory and these classes are passed to the newly created class loader, a "LibClassLoader" class loader. By this function, the "GXXv32ClassLoader" loader references not only "Create.class" and "SendAPDU. class "but also the other classes that reference" LibClassLoader ", ie in this example the default Java classes. Thus all these classes ("Create.class", "SendAPDU class" and the default classes) can be instantiated by this class loader.
Il est à noter qu'avec une arborescence profonde (plusieurs niveaux) , les classes chargées dans un chargeur de classes sont toutes celles des répertoires parents : répertoire parent de niveau 1, de niveau 2, ..., et les classes par défaut.It should be noted that with a deep tree (several levels), the classes loaded in a class loader are all those of the parent directories: level 1 parent directory, level 2, ..., and the default classes.
De même, lors du parcours de l'arborescence, l'autre répertoire fils « GX3Gv2.2 » est détecté et le fichier de classes « corecommands . jar » associé également. Un chargeur de classes « GX3Gv22ClassLoader » est alors créé en référençant les classes contenues dans son répertoire « GX3Gv2.2 », à savoir « Create.class » et les classes contenues dans le répertoire parent « Lib », à savoir « SendAPDU. class ». Cette opération peut être réalisée par la fonction Java :Similarly, when browsing the tree, the other child directory "GX3Gv2.2" is detected and the class file "corecommands. jar "associate also. A "GX3Gv22ClassLoader" class loader is then created by referencing the classes contained in its "GX3Gv2.2" directory, namely "Create.class" and the classes contained in the "Lib" parent directory, namely "SendAPDU. class ". This operation can be performed by the Java function:
URLClassLoader GX3Gv22ClassLoader = new URLClassLoader (URLt] 7Lib/GX3Gv2.2/", LibClassLoader)URLClassLoader GX3Gv22ClassLoader = new URLClassLoader (URLt] 7Lib / GX3Gv2.2 / ", LibClassLoader)
Par cette fonction, le chargeur « GX3Gv22ClassLoader » référence non seulement « Create.class » et « SendAPDU. class » mais également les autres classes que référence « LibClassLoader », à savoir dans cet exemple les classes de Java par défaut. Ainsi toutes ces classes (« Create.class », « SendAPDU. class » et les classes par défaut) peuvent être instanciées par ce chargeur de classes « GX3Gv22ClassLoader ».By this function, the "GX3Gv22ClassLoader" loader references not only "Create.class" and "SendAPDU. class "but also the other classes that reference" LibClassLoader ", namely in this example the Java classes by default. Thus all these classes ("Create.class", "SendAPDU. Class" and the default classes) can be instantiated by this class loader "GX3Gv22ClassLoader".
Dans cette configuration, deux définitions/implémentations d'une même classe sous le même nom coexistent, dans des répertoires « frères » (répertoires ayant le même répertoire parent) . Les deux fichiers JAR sont distincts et les implémentations de classes sont totalement séparées dans la machine virtuelle lors de l'exécution du programme grâce à la séparation des chargeurs de classes, même si les classes portent le même nom. L'utilisation d'une telle arborescence est avantageuse pour accéder à la fois à des configurations différentes (les deux classes « Create.class ») et à des configurations communes (la classe « SendAPDU. class ») , par exemple pour les cartes à puce dont le fonctionnement général est identique mais dont certaines configurations matérielles peuvent différer.In this configuration, two definitions / implementations of the same class under the same name coexist in "brother" directories (directories with the same parent directory). The two JAR files are separate and the class implementations are completely separated in the virtual machine when running the program through the separation of the class loaders, even if the classes have the same name. The use of such a tree is advantageous for accessing both different configurations (the two classes "Create.class") and common configurations (the class "SendAPDU.class"), for example for chip whose general operation is identical but some hardware configurations may differ.
Les chargeurs de classes « GXXv32ClassLoader » et « GX3Gv22ClassLoader » ont donc comme chargeur de classes parents « LibClassLoader ». Le lien de parenté entre un chargeur de classes associé à un répertoire et un chargeur de classes associé au répertoire parent est identique à celui qui lie les deux répertoires ; on dit alors que les chargeurs de classes sont mappés sur l'arborescence des répertoires : il apparaît clairement que, par la présente invention, l'arborescence des chargeurs de classes peut être créée dynamiquement et mappée sur l'arborescence des répertoires .The class loaders "GXXv32ClassLoader" and "GX3Gv22ClassLoader" have therefore as parent class loader "LibClassLoader". The relationship between a class loader associated with a directory and a class loader associated with the parent directory is the same as the link between the two directories; class loaders are then mapped to the directory tree: it is clear that, by the present invention, the class loader tree can be dynamically created and mapped to the directory tree.
Il est bien sûr prévu de ne pas se limiter à deux niveaux d'arborescence et de dépasser l'exemple présenté. Par exemple, si la configuration matérielle de la carte à puce « GX3Gv2.2 » se trouve divisée en deux sous- configurations, on peut créer deux sous-répertoires fils du répertoire « GX3Gv2.2 » comportant chacun une classe de même nom mais spécifique à chacune des deux sous-configurations. Les chargeurs de classes associés aux deux sous-répertoires fils référencent alors leur propre classe ainsi que les classes mères du chargeur « GX3Gv22ClassLoader ».It is of course planned not to be limited to two levels of tree and to exceed the example presented. For example, if the hardware configuration of the smart card "GX3Gv2.2" is divided into two sub-configurations, we can create two child sub-directories of the "GX3Gv2.2" directory, each with a class of the same name but specific to each of the two sub-configurations. The class loaders associated with the two child subdirectories then reference their own class as well as the mother classes of the "GX3Gv22ClassLoader" loader.
Ainsi, le logiciel de programmation peut utiliser selon ses besoins le chargeur « GX3Gv22ClassLoader » ou le chargeur « GXXv32ClassLoader » pour créer l'instance de la classe « Create.class ».Thus, the programming software can use the "GX3Gv22ClassLoader" loader or the "GXXv32ClassLoader" loader to create the instance of the "Create.class" class.
*** Modification d'une classe ****** Modification of a class ***
Lors d'opération de maintenance, on peut être amené à modifier/mettre à jour une implémentation de classe, par exemple l' implémentation « GX3Gv2.2 » de la classe « Create.class ». Le code source de la classe « Create.class » est alors modifié dans le fichier de classes « corecommands . jar » du dossier « GX3Gv2.2 ». Cette modification n'a aucun impact sur le fichier « corecommands . jar » du répertoire « GXXv3.2 » et sur le comportement à l'exécution de la classe « Create.class » de 1' implémentation « GXXv3.2 » puisque le chargeur « GXXv32ClassLoader » ne charge pas le fichier de classe du dossier « GX3Gv2.2 ».During a maintenance operation, one may have to modify / update a class implementation, for example the "GX3Gv2.2" implementation of the "Create.class" class. The source code of the "Create.class" class is then modified in the "corecommands" class file. jar "from the folder" GX3Gv2.2 ". This change has no impact on the file "corecommands. jar "from the directory" GXXv3.2 "and the run-time behavior of the" Create.class "class of the" GXXv3.2 "implementation since the" GXXv32ClassLoader "loader does not load the file class file" GX3Gv2.2 ".
L'organisation modulaire permet ainsi de modifier une classe indépendamment des autres implémentations de la même classe : chaque implémentation d'une classe a un cycle de vie qui lui est propre.The modular organization allows to modify a class independently of other implementations of the same class: each implementation of a class has a life cycle of its own.
De même, puisque la classe « SendAPDU. class » est partagée pour les deux implémentations « GXXv3.2 » et « GX3Gv2.2 », une modification des propriétés de la classe « SendAPDU. class » est prise en compte par les deux chargeurs de classes « GXXv32ClassLoader » et « GX3Gv22ClassLoader ». L'invention permet donc de factoriser le code source commun (une classe par exemple) à plusieurs implémentations afin d'en faciliter la maintenance : un seul chargeur est utilisé par les différentes implémentations pour charger les parties communes de code.Similarly, since the class "SendAPDU. class "is shared for both" GXXv3.2 "implementations and "GX3Gv2.2", a modification of the properties of the class "SendAPDU. class "is taken into account by the two class loaders" GXXv32ClassLoader "and" GX3Gv22ClassLoader ". The invention thus makes it possible to factorize the common source code (a class for example) with several implementations in order to facilitate maintenance: a single loader is used by the different implementations to load the common parts of code.
*** Déchargement d'une classe ****** Unloading a class ***
De nombreuses recherches ont été effectuées pour optimiser la gestion de la mémoire dans les machines virtuelles . À cette fin, la présente invention permet à la machine virtuelle de récupérer une partie de la mémoire sans avoir à arrêter l'exécution de cette machine virtuelle. Ceci est possible en réalisant le déchargement de classes chargeur par chargeur. On peut alors détruire un chargeur de classes et la machine virtuelle récupère la mémoire affectée lorsque le Garbage collector (routine de récupération de la mémoire inutilisée dans le cadre Java) est déclenché. Pour mettre en œuvre ce déchargement, on peut modifier la référence du chargeur de classes en la mettant à la valeur NULL dans le code de gestion. La conséquence de cette modification est la perte des références vers les classes chargées, et donc la récupération, lors du passage du garbage collector, de l'espace mémoire qui leur était attribué. A lot of research has been done to optimize the management of memory in virtual machines. To this end, the present invention allows the virtual machine to recover a portion of the memory without having to stop the execution of this virtual machine. This is possible by performing loader class unloading. A class loader can then be destroyed and the virtual machine recovers the affected memory when the garbage collector is triggered. To implement this unloading, you can modify the class loader reference by setting it to NULL in the management code. The consequence of this modification is the loss of the references to the loaded classes, and thus the recovery, during the passage of the garbage collector, of the memory space which was allocated to them.

Claims

REVENDICATIONS
1. Procédé de chargement dynamique de classes dans une machine virtuelle d'un système informatique comportant un système arborescent de stockage de données du système d'exploitation, caractérisé en ce qu'il comprend :A method of dynamically loading classes in a virtual machine of a computer system comprising a tree system for storing data of the operating system, characterized in that it comprises:
- une étape d'enregistrement de fichiers de classes dans les nœuds de l'arborescence du système de stockage,a step of registering class files in the nodes of the storage system tree,
- une étape de balayage de l'arborescence, - pour au moins un nœud de ladite arborescence, le nœud comprenant au moins un fichier de classes, : o une étape de création d'un chargeur de classes référençant les classes du nœud et les classes du nœud parent, o une étape de chargement dans ladite machine virtuelle du chargeur de classes.a step of scanning the tree, for at least one node of said tree, the node comprising at least one class file, a step of creating a class loader referencing the classes of the node and the classes of the parent node, o a loading step in said class loader virtual machine.
2. Procédé selon la revendication précédente, caractérisé en ce que ledit chargeur de classes créé référence les classes du chargeur de classes dudit nœud parent .2. Method according to the preceding claim, characterized in that said created class loader references the class loader classes of said parent node.
3. Procédé selon la revendication précédente, caractérisé en ce que le chargeur de classes du nœud racine référence uniquement les classes du nœud racine.3. Method according to the preceding claim, characterized in that the class loader of the root node references only the classes of the root node.
4. Procédé selon la revendication 2, caractérisé en ce que le chargeur de classes du nœud racine référence les classes du nœud racine et des classes par défaut.4. Method according to claim 2, characterized in that the class loader of the root node references the classes of the root node and the default classes.
5. Procédé selon la revendication 1, caractérisé en ce que ladite arborescence respecte l'héritage entre classes. 5. Method according to claim 1, characterized in that said tree respects inheritance between classes.
6. Architecture pour le chargement dynamique de classes dans une machine virtuelle d'un système informatique comportant un système de stockage de données en arborescence, caractérisée en ce qu'elle comprend une pluralité de fichiers de classes organisés dans les nœuds de l'arborescence du système de stockage et une pluralité de chargeurs de classes correspondant chacun à un nœud contenant au moins un fichier de classes, lesdits chargeurs de classes référençant les classes du nœud correspondant et les classes du nœud parent.An architecture for dynamically loading classes into a virtual machine of a computer system having a tree-based data storage system, characterized in that it comprises a plurality of class files organized in the nodes of the tree structure. storage system and a plurality of class loaders each corresponding to a node containing at least one class file, said class loaders referencing classes of the corresponding node and classes of the parent node.
7. Architecture selon la revendication précédente, caractérisée en ce que lesdits chargeurs de classes créés référencent chacun les classes du chargeur de classes de leur nœud parent.7. Architecture according to the preceding claim, characterized in that said class loaders created refer each classes of the class loader of their parent node.
8. Architecture selon la revendication précédente, caractérisée en ce que lesdits chargeurs de classes sont organisés selon une arborescence mappée sur ladite arborescence des nœuds du système de stockage.8. Architecture according to the preceding claim, characterized in that said class loaders are organized according to a tree structure mapped on said tree of the nodes of the storage system.
9. Architecture selon la revendication 6, caractérisée en ce qu'elle comporte au moins deux classes portant le même nom dans deux nœuds différents ayant un même nœud parent.9. Architecture according to claim 6, characterized in that it comprises at least two classes bearing the same name in two different nodes having the same parent node.
10. Architecture selon la revendication 6, caractérisée en ce que ladite arborescence respecte l'héritage entre classes. 10. Architecture according to claim 6, characterized in that said tree respects inheritance between classes.
PCT/EP2006/063877 2005-07-08 2006-07-04 Class loader tree traced on directory tree WO2007006697A1 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0552104A FR2888351A1 (en) 2005-07-08 2005-07-08 ARBORESCENCE OF CLASS CHARGERS MAPPED ON THE TREE OF DIRECTORIES
FR05/52104 2005-07-08

Publications (1)

Publication Number Publication Date
WO2007006697A1 true WO2007006697A1 (en) 2007-01-18

Family

ID=36143680

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/EP2006/063877 WO2007006697A1 (en) 2005-07-08 2006-07-04 Class loader tree traced on directory tree

Country Status (2)

Country Link
FR (1) FR2888351A1 (en)
WO (1) WO2007006697A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105589715A (en) * 2014-11-10 2016-05-18 日本电气株式会社 Information processing device, library loading method, and computer readable medium

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0969361A1 (en) * 1998-06-30 2000-01-05 Sun Microsystems, Inc. Class loader
US20020144256A1 (en) * 2001-03-30 2002-10-03 Navin Budhiraja Method of deployment for concurrent execution of multiple versions of an integration model on an integration server
US20020184226A1 (en) * 2001-06-01 2002-12-05 International Business Machines Corporation Independent class loader for dynamic class loading
US20030121031A1 (en) * 2001-12-21 2003-06-26 International Business Machines Corporation Delegation-based class loading of cyclically dependent components
US20030167349A1 (en) * 2001-04-23 2003-09-04 Petri Krohn Handling different service versions in a server

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7039923B2 (en) * 2002-04-19 2006-05-02 Sun Microsystems, Inc. Class dependency graph-based class loading and reloading

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0969361A1 (en) * 1998-06-30 2000-01-05 Sun Microsystems, Inc. Class loader
US20020144256A1 (en) * 2001-03-30 2002-10-03 Navin Budhiraja Method of deployment for concurrent execution of multiple versions of an integration model on an integration server
US20030167349A1 (en) * 2001-04-23 2003-09-04 Petri Krohn Handling different service versions in a server
US20020184226A1 (en) * 2001-06-01 2002-12-05 International Business Machines Corporation Independent class loader for dynamic class loading
US20030121031A1 (en) * 2001-12-21 2003-06-26 International Business Machines Corporation Delegation-based class loading of cyclically dependent components

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
KURZYNIEC D ET AL: "FLEXIBLE CLASS LOADER FRAMEWORK: SHARING JAVA RESOURCES IN HARNESS SYSTEM", LECTURE NOTES IN COMPUTER SCIENCE, SPRINGER VERLAG, NEW YORK, NY, US, vol. 2073, 30 May 2001 (2001-05-30), pages 375 - 384, XP009029939, ISSN: 0302-9743 *
PAAL S ET AL: "Customizable deployment, composition, and hosting of distributed Java applications", ON THE MOVE TO MEANINGFUL INTERNET SYSTEMS 2002. COOPIS, DOA, AND ODBASE. CONFEDERATED INTERNATIONAL CONFERENCES COOPIS, DOA, AND ODBASE 2002 PROCEEDINGS (LECTURE NOTES IN COMPUTER SCIENCE VOL.2519) SPRINGER-VERLAG BERLIN, GERMANY, 2002, pages 845 - 865, XP002377641, ISBN: 3-540-00106-9 *
RICHARD S. HALL: "A Policy-Driven Class Loader to Support Deployment in Extensible Frameworks", COMPONENT DEPLOYMENT. SECOND INTERNATIONAL WORKING CONFERENCE, CD 2004. PROCEEDINGS. (LECTURE NOTES IN COMPUT. SCI. VOL.3083), May 2004 (2004-05-01), pages 81 - 96, XP019006706 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105589715A (en) * 2014-11-10 2016-05-18 日本电气株式会社 Information processing device, library loading method, and computer readable medium
CN105589715B (en) * 2014-11-10 2019-11-05 日本电气株式会社 Information processing equipment, library loading method and computer-readable medium

Also Published As

Publication number Publication date
FR2888351A1 (en) 2007-01-12

Similar Documents

Publication Publication Date Title
CA2192049C (en) Process for manipulating data models used in software engineering
EP2649522B1 (en) Method for providing an application as a library in a virtual machine
CN101430644B (en) System and method of executing a dynamic program in a structured environment
Bergel et al. Deep Into Pharo
EP1782191B1 (en) Method for loading software with an intermediate object oriented language in a portable device
EP1096394A1 (en) System and procedure utilizing an LDAP directory service for administrating the persistence of EJB components
JPH10275077A (en) Meta-data container and meta-data store
KR20050039547A (en) Programming interface for a computer platform
WO2001014958A2 (en) Management protocol, method for verifying and transforming a downloaded programme fragment and corresponding systems
US20040068678A1 (en) Undo/redo algorithm for a computer program
CN102221998A (en) Method for extending EJB container in component running support platform
EP2588953A1 (en) Selective compiling method, device, and corresponding computer program product
EP1960934B1 (en) Method for making secure execution of an intermediate language software code in a portable appliance
WO2001097026A1 (en) Modular computer system and related method
CN111399821B (en) SysML framework and Web system engineering modeling platform based on TypeScript
WO2007006697A1 (en) Class loader tree traced on directory tree
Atkinson et al. Foundational MDA Patterns for Service-Oriented Computing.
EP1054332B1 (en) System and method for managing attributes in an object-oriented environment
FR2864650A1 (en) METHOD FOR UPDATING APPLICATIONS FOR A CHIP CARD
WO2006117467A1 (en) Method of creating customisable applications
EP1262867A1 (en) Method of implementing a plurality of object interfaces
US20050010934A1 (en) Native code isolation in a multi-tasking java virtual machine
Sowders et al. Mobile process resumption in java without bytecode rewriting
US7770186B2 (en) Framework for database transactions
Crandall et al. CMaize: Simplifying inter-package modularity from the build up

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application
NENP Non-entry into the national phase

Ref country code: DE

WWW Wipo information: withdrawn in national office

Country of ref document: DE

122 Ep: pct application non-entry in european phase

Ref document number: 06777570

Country of ref document: EP

Kind code of ref document: A1