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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[HSQLDB / Bukkit] Chargement driver et classpath


Sujet :

JDBC Java

  1. #21
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    S'il s'agit d'un plugin, je ne perdrais pas mon temps sur des solutions provisoires, de toutes façons, il faudra que tu mettes HSQLDB dans le jar de ton plugin.

    donc Dézippe hsqldb.jar dans le dossier racine de ton projet Eclipse en respectant l'arbo des packages, et intègre tout ça dans ton jar

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Je vais tenter ça mais le "problème" c'est que HSQLDB fais 1.3 MO et que je vais en avoir besoin dans une tripoté de plugin (peut etre 10, 15 voire plus). Du coup est ce que c'est la meilleure solution ?

    Je fais ce que tu me dis et je te donne le resultat.

  3. #23
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    je ne suis pas spécialiste Craftbukkit, mais il n'y a pas déjà un dossier où il suffit de déposer les jar pour qu'ils soient directement dans le classpath ?

    le dossier plugins par exemple, mais il y en a peut-être d'autres non ?

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Tout à fait, le dossier plugin sert a charger les jar au format "plugin bukkit", je te mets la classs principale de mon plugin si tu veux voir comment ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package org.kapital.PermissionBlock;
     
    import java.util.logging.Logger;
     
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class PermissionBlock extends JavaPlugin {
    		 public static PermissionBlock plugin;
    		 public final Logger logger = Logger.getLogger("Minecraft");
    		 public final PermissionBlockEvent BlockListener = new PermissionBlockEvent(this);
     
    		  public void onDisable()
    		  {
    		    PluginDescriptionFile pdffile = getDescription();
    		    this.logger.info(pdffile.getName() + " is now disabled.");
    		  }
     
    		  public void onEnable() {
    		    PluginManager pm = getServer().getPluginManager();
    		    pm.registerEvents(this.BlockListener, this);
    		    PluginDescriptionFile pdffile = getDescription();
    		    String consoleMsg = pdffile.getName() + " version " + pdffile.getVersion() + " is working.";
    		    this.logger.info(consoleMsg);
     
    		  }
     
    }
    Si ton jar n'est pas de cette forme cela soulève des erreurs.

    En ce qui concerne l'importation je suis sur de ne pas faire ce qu'il faut car j'ai des packages avec des erreurs, je suppose donc qu'ils ont besoins d'autres packages pour fonctionner ?

    C'est un véritable enfer, normalement il y a juste a ajouter le driver en external jar. Il fut que j'y arrive par cette solution car plus le temps passe plus les solutions sont compliquées.

    Je te met un screen shot de ce que j'ai fais:


  5. #25
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    pas dans le dossier src, dans la racine du projet pour le dézippage

    Et tu peux laisser le buildpath faisant référence à hsqldb.jar dans Eclipse

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Alors en premier lieu j'ai relu un topic que j'ai lu il y a 20 heures : http://forums.bukkit.org/threads/ext...-errors.74043/

    Va savoir pourquoi j'ai pas tilté. Je suis entrain d’essayer la solution d'ajouter:
    -Djava.ext.dirs=lib
    Mais maintenant je ne peux plus me connecter à mon serveur. Je vais tenter l'import dans le root du projet.

  7. #27
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    oui, et je te l'ai donnée dans l'un des premiers messages cette solution...
    Citation Envoyé par kox2ee Voir le message
    ou alors tu peux définir le class-path à l'exécution, avec l'option -Djava.ext.dirs=folderToLibs pour un jar dans un fichier batch (pas terrible)...

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Oui c'est juste mais je n'avais pas essayé car tu avait dit "pas terrible" ! Du coup j'ai pas fais attention que c'était la même... de toute façon ça marche pas.

    Alors:
    - importer les sources en tant que système de fichier ça ne marche pas
    - importer l'archive jar et supprimer le META-INF, ça me donne un NullPointerException

    - importer l'archive sans supprimer le meta-inf c'est pareil -> NullPointerException

    Dans tous les cas, j'ai une erreur avant de voir la liste des drivers chargés.

    Pour le Djava ext dir, c'est très clairement expliqué ici que c'est définitivement mort : https://bukkit.atlassian.net/browse/BUKKIT-2070

    En revanche je n'ai pas compris le pourquoi du comment...

  9. #29
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Je reviens sur une solution avec jar hsqldb en externe :

    tu peux aussi ajouter un jar dans le classpath à l'exécution en créant une classe de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public class LoadLib {
     
    	private static final Class[] parameters = new Class[] { URL.class };
     
    	public static void addFile(String s) throws IOException {
    		File f = new File(s);
    		addFile(f);
    	}
     
    	public static void addFile(File f) throws IOException {
    		addURL(f.toURI().toURL());
    	}
     
    	public static void addURL(URL u) throws IOException {
     
    		URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
    		Class sysclass = URLClassLoader.class;
     
    		try {
    			Method method = sysclass.getDeclaredMethod("addURL", parameters);
    			method.setAccessible(true);
    			method.invoke(sysloader, new Object[] { u });
    		} catch (Throwable t) {
    			t.printStackTrace();
    			throw new IOException("Impossible d'ajouter l'url au classloader");
    		}
     
    	}
    }
    tu peux essayer de voir si ça passe avant le chargement du driver en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LoadLib.addFile("c:\\cheminVersLeJar\\hsqldb.jar");
    L'avantage étant que ça te permet de faire la référence à la lib hsqldb (ou une autre) dans un fichier de configuration. On est peut-être un peu plus dans l'esprit plugin...

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Merci ! Le driver est chargé grâce à ton script !

    Maintenant j'ai toujours un probleme de NullPointerException mais je n'ai pas vraiment plus d'infos sur à quoi il correspond donc ça va encore etre une partie de plaisir de débuguer.

    Je vais vérifier mes url/login/mdp en premier lieu.

    Donc du coup la class que tu m'a donnée je dois la créer dans chaque plugin ?

    EDIT: Le problème viendrait de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Statement stat = conn.createStatement();
    Puisque j'ai l'erreur qui me renvoie:
    Caused by: java.lang.NullPointerException at......... PermissionBlockEvent.java:62
    EDIT 2:
    De mieux en mieux, j'arrive à avoir une exception SQL ! Dans mon cas c'est un bonheur ! J'ai supprimé l'enregistrement de la classe dans ma classe HsqlConnection pour ne garder que ta façon de chargé le jar ce qui à l'air de fonctionner.

  11. #31
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par prisonier Voir le message
    Donc du coup la class que tu m'a donnée je dois la créer dans chaque plugin ?
    Disons que tu vas la réutiliser, oui, si tu restes sur cette solution

    Citation Envoyé par prisonier Voir le message
    De mieux en mieux, j'arrive à avoir une exception SQL !! Dans mon cas c'est un bonheur ! J'ai supprimé l'enregistrement de la classe dans ma classe HsqlConnection pour ne garder que ta façon de chargé le jar ce qui à l'air de fonctionner !
    cool

  12. #32
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Je me demande bien pourquoi tu fermes ta connexion systématiquement dans ton code, après chaque manip sur un bloc c'est ça ?

    Tu ne peux pas l'ouvrir au chargement, et la fermer sur stop du server ?
    même si c'est beaucoup moins lourd avec HSQLDB, puisque la base est en mémoire, et plus accessible via un serveur.

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    On m'a appris à toujours fermer une ressource une fois que l'utilisation est terminée.

    Pour HSQL je sais pas mais pour MySql en PHP par exemple je peux avoir plusieurs connexions simultanées donc il faut impérativement bien fermer tes connexions pour ne pas bloquer les autres. Bon l'exemple est pas top car PHP ferme automatiquement toutes les connexions à la fin d'un script mais bon...

    Mais je suis pas du tout fermé sur l'idée de faire évoluer mes pratiques! Je suis encore un jeune lionceau dans la jungle de la programmation !

  14. #34
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    C'est un autre sujet, mais une bonne pratique, pour des connexions multiples à une base de données, consiste à utiliser un POOL de connexions.
    Pour faire très rapide : l'ouverture/fermeture peut être coûteuse...
    Le principe du POOL est le suivant :
    • Quand une connexion ouverte n'est plus utilisée, on la range dans le POOL plutôt que de la fermer (Collection de connexions disponibles)
    • Quand une connexion est sollicitée, s'il en existe une disponible dans le POOL, on utilise celle là, sinon, on en créée une nouvelle
    • A la fermeture de l'appli, toutes les connexions du pool sont fermées


    Pour en revenir au sujet,
    Tu as donc résolu tous tes problèmes de classPath ?

  15. #35
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    Presque terminé encore deux trois trucs à vérifier puis je le passe en résolu.

    Je comprends bien le principe du POOL, on m'avait aussi parlé du principe de jobs SQL, je sais pas si c'est la même chose.

    Le second avantage est par exemple pour les procedures stockées (j'utilise beaucoup), vu que les requetes sont compilées à chaque connexion, on gagne encore du temps vu qu'on garde les connexions c'est ça ?

    Tu penses donc que je devrais passer la connexion au lancement du plugin ?

  16. #36
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Non, job et pool, ça n'est pas la même chose.

    Pour ce qui est de ta connexion, j'ai cru comprendre que tu en ouvrais une à chaque manipulation, j'ai juste trouvé ça étonnant.

    Mais je ne connais pas bien le contexte de ton plugin

    Si tu veux avoir plus de réponses sur ce sujet, ouvre un nouveau topic

  17. #37
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 14
    Points
    14
    Par défaut
    C'est ce que je vais faire merci du conseil
    Je passe le topic en résolu, mon problème actuel est inhérent à la BDD et son utilisation.

    En résumé, le problème à été résolu en chargeant le jar du driver via une classe LoadLib.
    Pour plus d'info sur HSQLDB et son utilisation => http://baptiste-wicht.developpez.com.../java/db/hsql/

    Le problème venait du fait que je travaille sur un plugin Minecraft (jeu vidéo) qui utilise une API Java pour faire un serveur multijoueurs (Bukkit) avec un classpath bien défini. Beaucoup d'utilisateurs utilisent Maven pour créer un jar avec ses dépendances mais je souhaitais une solution moins lourde que placer le driver HSQLDB dans chacun de mes plugins pour le jeu et de plus automatique que devoir changer le MANIFEST.MF du META-INF à chaque nouvelle dépendance de plugin.

    Merci encore pour ta précieuse aide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Erreur chargement driver SQL
    Par CrashBC dans le forum Bases de données
    Réponses: 15
    Dernier message: 12/01/2013, 12h28
  2. [HSQLDB] Erreur de chargement du driver
    Par ouachani1 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 17/08/2011, 19h28
  3. Probleme de chargement Driver DBDC
    Par safiy dans le forum JDBC
    Réponses: 13
    Dernier message: 12/03/2008, 20h14
  4. [debutant] probleme chargement driver (jdbc, mysql)
    Par ADSL[fx] dans le forum JDBC
    Réponses: 9
    Dernier message: 12/03/2006, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo