IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Sommaire > Divers
        Thread : Priority Inversion Safe Binary Semaphore
        JNI : vider la console (C)
        JNI : Récuperer le types des disques (Delphi)
        Exemple de pile LIFO utilisant LinkedList
        Pile/File pour les débutants
        Modification dynamique du classpath
        Mécanisme de plugins au sein d'une application Java
        Requêtes multiples avec JDBC et JSP
        Connexion à une base de données quelconque
        Ordonnanceur : mini-OS
        Analyser les capacités d'une classe
        IndexedMap

        


Auteur : xavlours
Version : 06/08/2004
Téléchargez le zip
Thread : Priority Inversion Safe Binary Semaphore
Synchroniser des threads de priorites différentes.
Le mot cle synchronized utilise un sémaphore binaire qui n'empêche pas l'inversion de priorités, celui ci si, en utilisant le mécanisme d'héritage des priorités.
De plus sa file d'attente est prioritaire : le thread de plus haute priorité passe en premier.

Et pour l'utiliser, voici le parallele avec l'utilisation de synchronized :

// créer le sémaphore Object o = new Object(); // prendre le sémaphore et attendre si necessaire synchronized(o){ // rendre le sémaphore }
// créer le sémaphore PISBSem sem = new PISBSem(); // prendre le sémaphore et attendre si necessaire sem.take(); // rendre le sémaphore sem.give();

Auteur : Vedaer
Version : 16/09/2004
Téléchargez le zip
JNI : vider la console (C)
Cet exemple met en évidence l'utilisation de JNI (Java Native Interface). Il permet de vider la console. Le code C utilisé est théoriquement "portable", il suffira de le recompiler selon la plateforme utilisée. Il suffit d'appeler :

ClearScreen.clear();

Auteur : Vedaer
Version : 16/09/2004
Téléchargez le zip
JNI : Récuperer le types des disques (Delphi)
Cet exemple met en évidence l'utilisation de JNI (Java Native Interface) en combinaison avec du code Delphi.
Exemple d'utilisation :

String drive = "c:\\"; int type = DriveInfo.getDriveType(drive); switch(type){ case DriveInfo.FIXED : System.out.println("c:\\ est un disque dur"); break; default:break; } boolean amovible = DriveInfo.isRemovable(drive); System.out.println("c:\\ amovible : "+amovible); File[] roots = File.listRoots(); for(int i = 0; i < roots.length; i++){ File root = roots[i]; String name = root.getPath(); System.out.println(name+" : "+DriveInfo.getDriveInfo(name)); }

Auteur : Clément Cunin
Version : 16/08/2004
Téléchargez le zip
Exemple de pile LIFO utilisant LinkedList
Le but n'est pas de réinventer la roue, mais juste d'utiliser une classe qui porte le nom 'Stack' ou 'Pile' pour plus de clarté dans le code source sans plomber les performances avec la classe Stack de Java 1.
L'implémentation proposée ici est basée sur le modèle des collections de Java2, elle utilise une interface Stack et une classe concrète LinkedStack.


Auteur : Julien CHABLE
Version : 15/01/2005
Téléchargez le zip
Pile/File pour les débutants
Voici un petit prog qui présente le principe de la pile et de la file avec une pointe de polymorphisme (naturel en java). Ce code est surtout destiné aux étudiants BAC+2 puisque c'est une architecture que l'on étudie en cours. Donc rien de bien extraordinaire mais au moins il marche très bien !


Auteur : Michel Deriaz
Version : 16/09/2004
Téléchargez le zip
Modification dynamique du classpath
Bien qu'il ne soit pas possible de modifier dynamiquement le classpath, cette classe permet de contourner le problème en appelant directement la méthode protégée "addURL" du ClassLoader. Utilisant l'introspection, cette classe permet également d'appeler toutes les méthodes privées et protégées de n'importe quel objet.


Auteur : divxdede
Version : 15/01/2005
Mécanisme de plugins au sein d'une application Java
Cet outil permet de lister une catègorie de plugins disponible.
Il permet l'abstraction de l'emplacement physiques des plugins.
Ceux-ci peuvent être dans plusieurs JAR, des repertoires etc.

La recherche des plugins se fait sur 3 critères :

  • Accessiblent par le classpath de l'application
  • Doivent se trouver dans un package determiné (sous-packages inclus)
  • Doivent hériter d'une classe mère de plugin (definit par vos soin)

Cette classe à pour rôle de vous aider a réaliser un mécanisme de plugins au sein d'une application JAVA.

package org.XXXXXXXX; import java.util.*; import java.util.zip.*; import java.io.*; import java.net.*; /** * PluginInspector * Ce module s'occupe de dresser une liste des "plugins" disponibles au sein d'une application JAVA * Ce code n'est qu'a titre d'exemple sur comment faire un outils permettant d'ajouter des plugins. * * L'idée de cet inspecteur est d'imposer un package pour les plugins et d'utiliser le classLoader afin * de determiner toutes les classes. * Il est ainsi possible de rajouter par la suite un fichier JAR contenant de nouveaux plugins et qu'ils * soient automatiquement pris en comptes par l'application (pour peu que le fichier JAR soit rajouté correctement au classpath) * * Un "PluginInspector" s'appuie sur deux elements pour identifier les plugins * - Le package de recherche (ainsi que tous les sous-packages) * - La classe mère des plugins afin de s'assurer qu'une classe est effectivement un plugin * * Il est possible d'avoir plusieurs "PluginInspector" pour gérer differentes natures de plugins * * Exemple : * - les plugins sont installés dans le package org.myApplic.plugins * - La classe mère des plugins est org.myApplic.util.Plugin * * Récuperation des plugins de l'application : * Iterator plugins = new PluginInspector("org.myApplic.plugins",org.myApplic.util.Plugin.class).plugins(); * while( plugins.hasNext() ) * { Class plugin = (Class)plugins.next(); * System.out.println("Plugin Loaded : " + plugin); * } * * Remarque : le PluginInspector charge les classes lors de l'examen, ce qui n'est pas un mauvais choix pour * un mécanisme de plugins, mais ce mécanisme pourait être assez pénalisant pour un usage detourné * * @author André Sébastien */ public class PluginInspector { /** Nom du package des plugins **/ private String pluginPackage = null; /** Classe mere de tous les plugins **/ private Class pluginHomeClass = null; /** Repertoire (en terme de resource) des plugins **/ private String pluginResourceName = null; /** Repertoire (en terme de fileSystem) des plugins **/ private String pluginFileName = null; /** Liste des plugins **/ private List plugins = new ArrayList(); /** Filtre utilisé lors d'un examen de repertoire physique **/ private static final FileFilter filter = new FileFilter() { public boolean accept(File pathname) { if(pathname.isDirectory() ) return true; if(!pathname.isFile() ) return false; String path = pathname.getAbsolutePath(); if( ! path.endsWith(".class") ) return false; if( path.indexOf('$') >= 0 ) return false; return true; } }; /** Constructeur * @param packageName Package dont doivent faire partie les plugins (sous-packages compris) * @param pluginHomeClass Class mére de tous les plugins, si null alors, il sera considéré Object.class comme class mère de tous les plugins **/ public PluginInspector(String packageName , Class pluginHomeClass ) { /** Initialisation **/ this.pluginPackage = packageName; this.pluginHomeClass = pluginHomeClass; if( this.pluginHomeClass == null ) this.pluginHomeClass = Object.class; /** On calcul le repertoire d'acces aux repertoires **/ this.pluginResourceName = this.pluginPackage.replace('.','/'); this.pluginFileName = this.pluginPackage.replace('.', File.separatorChar ); /** Lance l'examen de l'application **/ this.examine(); } /** Retourne la liste des plugins accessiblent (objets "Class") **/ public Iterator plugins() { return this.plugins.iterator(); } /** Examine l'application pour determiner les plugins accessibles **/ private void examine() { try { Enumeration e = this.getClass().getClassLoader().getResources( this.pluginResourceName ); while( e.hasMoreElements() ) { URL url = (URL)e.nextElement(); String protocol = url.getProtocol(); if( protocol.equals("file") ) this.examineFromDirectory( new File(url.getFile() ) ); else if( protocol.equals("jar")) this.examineFromJar(url); } } catch(Exception e){ e.printStackTrace(); } } /** Examine les plugins à partir d'un repertoire physique **/ private void examineFromDirectory(File directory) { if( ! directory.isDirectory() ) return; try { File[] files = directory.listFiles( this.filter ); for(int i = 0 ; i < files.length ; i++) { File file = files[i]; if( file.isDirectory() ) { this.examineFromDirectory( file ); continue; } /** Transformer le chemin en package **/ String name = file.getAbsolutePath(); int pos = name.indexOf( this.pluginFileName ); if( pos == -1 ) continue; name = name.substring( pos , name.length() - 6 ).replace( File.separatorChar , '.'); /** Charger le plugin **/ Class plugin = this.getClass().forName(name); if( ! this.pluginHomeClass.isAssignableFrom( plugin ) ) continue; if( this.plugins.contains( plugin ) ) continue; this.plugins.add(plugin); } } catch(Exception e){ e.printStackTrace(); } } /** Examine les plugins à partir d'un JAR **/ private void examineFromJar(URL url) { String jarName = url.getFile(); jarName = jarName.substring( jarName.indexOf(':') ); jarName = jarName.substring(0 , jarName.indexOf('!' ) ); jarName = jarName.replace('/', File.separatorChar ); try { ZipFile zipFile = new ZipFile(jarName); Enumeration e = zipFile.entries(); while( e.hasMoreElements() ) { ZipEntry entry = (ZipEntry)e.nextElement(); String name = entry.getName(); if( ! name.endsWith(".class") ) continue; if( ! name.startsWith( this.pluginResourceName ) ) continue; if( name.indexOf('$') >= 0 ) continue; /** suppression du .class et remise sous forme de package **/ name = name.substring(0, name.length() - 6 ); name = name.replace('/','.'); /** Charger le plugin **/ Class plugin = this.getClass().forName(name); if( ! this.pluginHomeClass.isAssignableFrom( plugin ) ) continue; if( this.plugins.contains( plugin ) ) continue; this.plugins.add(plugin); } zipFile.close(); } catch(Exception e){ e.printStackTrace(); } } }

Auteur : Julien CHABLE
Version : 15/01/2005
Téléchargez le zip
Requêtes multiples avec JDBC et JSP
Voici un exemple qui va vous permettre d'envoyer un ensemble de requêtes simultanément à une base de données, les réponses de chaque requête s'afficheront dans des tableaux dans la page JSP ... un exemple du résultat (la capture d'écran quoi !) se trouve dans le fichier ZIP au format PDF. Attention : ce code n'est pas un exemple à prendre pour de la bonne prog, c'est un peu bourrin ... c'est un truc que j'avais fait rapidement en cours ...


Auteur : Michel Deriaz
Version : 15/02/2005
Téléchargez le zip
Connexion à une base de données quelconque
La classe SQLService permet de se connecter à une base de donnée quelconque et d'effectuer des requêtes SQL transmises sous forme d'une chaîne de caractères. Les réponses sont également fournies sous forme de chaînes de caractères. Le programme SQLInterface est une interface graphique mettant en oeuvre la classe SQLService en proposant deux exemples: une connexion à une base MySQL et une connexion à un fichier Microsoft Access.


Auteur : Julien CHABLE
Version : 15/01/2005
Téléchargez le zip
Ordonnanceur : mini-OS
Voici le résultat d'un exercice d'un cours de temps réel : un ordonnanceur non temps réel !!!! Le programme suivant présente la structure d'un mini système d'exploitation (ordonnanceur principalement !), la structure du programme n'est pas celle réellement d'un vrai système d'exploitation notamment à du passage d'objet en paramètres et le manque d'interruptions et de boîtes aux lettres mais au moins cela montre les ordonnanceurs (priorité, aléatoire, réparti)!!!
J'y ai joint un petit document (mon compte rendu de TP) afin que vous compreniez ce qu'est un ordonnanceur pour ceux qui ne savent pas ... et c'est à l'intérieur que vous aurez l'ensemble des commandes ainsi que les paramètres !!!!
Un petit fichier d'aide vous montre comment procéder !!! LISEZ LE !!!!
@+


Auteur : Julien CHABLE
Version : 15/01/2005
Téléchargez le zip
Analyser les capacités d'une classe
Ce code vous demande de saisir un nom d'objet et il affiche tous les constructeur, méthodes, champs et parent de cet objet.


Auteur : divxdede
Version : 11/06/2005
Téléchargez le zip
IndexedMap
Implémentation d'une Map gérant en interne une "List" afin de pouvoir ordonner et récuperer les éléments de la Map a travers des "index". cf la javadoc de la classe pour plus de details.


        

Tous les codes sources fournis gratuitement ici sont soumis à la licence GNU LGPL traduite en français ici. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2004 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.