IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Sources JavaConsultez toutes les sources

Nombre d'auteurs : 29, nombre de sources : 134, création le 13 avril 2013 

 
OuvrirSommaireDivers

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 :

 
Sélectionnez
// créer le sémaphore
Object o = new Object();
// prendre le sémaphore et attendre si necessaire
synchronized(o){

// rendre le sémaphore
}
 
Sélectionnez
// 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();
Créé le 6 août 2004  par xavlours

Téléchargez le zip

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 :

 
Sélectionnez
ClearScreen.clear();
Créé le 16 septembre 2004  par Ioan Calapodescu

Téléchargez le zip

Cet exemple met en évidence l'utilisation de JNI (Java Native Interface) en combinaison avec du code Delphi.
Exemple d'utilisation :

 
Sélectionnez
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));    
    } 
Créé le 16 septembre 2004  par Ioan Calapodescu

Téléchargez le zip

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.

Créé le 16 août 2004  par Clément Cunin

Téléchargez le zip

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 !

Créé le 15 janvier 2005  par Julien CHABLE

Téléchargez le zip

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.

Créé le 16 septembre 2004  par Michel Deriaz

Téléchargez le zip

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.

 
Sélectionnez

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(); }
    }
}
Créé le 15 janvier 2005  par divxdede

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 ...

Créé le 15 janvier 2005  par Julien CHABLE

Téléchargez le zip

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.

Créé le 15 février 2005  par Michel Deriaz

Téléchargez le zip

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 !!!!
@+

Créé le 15 janvier 2005  par Julien CHABLE

Téléchargez le zip

Ce code vous demande de saisir un nom d'objet et il affiche tous les constructeur, méthodes, champs et parent de cet objet.

Créé le 15 janvier 2005  par Julien CHABLE

Téléchargez le zip

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.

Créé le 11 juin 2005  par divxdede

Téléchargez le zip

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-2005 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.