[JAVA] Gros problème
Résolu/Fermé
Mycki
Messages postés
113
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
17 décembre 2007
-
14 déc. 2007 à 11:39
Mycki Messages postés 113 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 17 décembre 2007 - 14 déc. 2007 à 18:18
Mycki Messages postés 113 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 17 décembre 2007 - 14 déc. 2007 à 18:18
A voir également:
- [JAVA] Gros problème
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Jeux java itel 5360 ✓ - Forum Mobile
- Télécharger jeux java gameloft gratuit - Forum Mobile
3 réponses
Vedlen
Messages postés
360
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009
40
14 déc. 2007 à 11:43
14 déc. 2007 à 11:43
Et si tu posais ton problème directement..?
Mycki
Messages postés
113
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
17 décembre 2007
46
14 déc. 2007 à 14:31
14 déc. 2007 à 14:31
Ok j'y vais... accrochez vous !
J'ai créé des tests unitaires sur un logiciel. Ce dernier est composé de plusieurs niveaux, chaque niveau ayant un role. J'ai donc pour le moment, créé des tests unitaires sur un niveau en particulier : l'accès à une base de données.
En gros, ce niveau, c'est en fait plusieurs classes java qui reproduisent la base de données (une classe = une table).
Pour lancer automatiquement mes tests, sans passer par Eclipse (ne pas lancer la classe Java directement), on m'a demandé (eh oui, c'est mon boulot) d'intégrer mes tests dans un fichier build.xml. C'est un fichier Ant particulier qui appelle ma classe java, la compile en .class, et ensuite, la VM m'interprete le code .class (normal).
Mes tests unitaires font en réalité parti d'un projet, qui évolue en parallèle au projet sur lequel il faut effectuer les tests. Mais le fichier build.xml est lui dans le projet initial, que l'on appelera P1. Mon projet P2, possède un build.xml lui aussi, et quand je le lance, pas de problèmes. Or, quand j'intègre mon build au fichier build.xml du P1, ca ne veut pas se lancer correctement.
Je m'explique :
J'ai un fichier de propriétés que je relie à mon P2 grâce à une classe java DbProperties.java, qui m'appelle mon fichier de propriété et me renvoi les valeurs associées à chaque clé. Jusque là, pas de souci. Quand j'exécute mon build.xml du P2, aucun problème ne se pose, mais quand je fais la même chose dans le P1, il ne retrouve pas le fichier DbProperties.java, et ne peut donc pas me lancer mes tests ni même me connecter à la base de données, puisque les identifiants, et les paramètres de connexion sont dans le fichier properties.
Donc question : pourquoi je n'atteint pas le fichier DbProperties quand mon build.xml est dans le P1, alors que je peux le faire quand il est dans le P2 !?
Je vous joint ici ma classe DbProperties, et une classe qui l'appelle :
DbProperties.java :
Et une autre classe qui appelle cette dernière :
MysqlDump :
Je n'espère pas grand chose, car même les développeurs avec qui je travaille (développeurs beaucoup plus expérimentés que moi) n'ont pas trouvé d'où venait le problème...
Merci quand même :p
J'ai créé des tests unitaires sur un logiciel. Ce dernier est composé de plusieurs niveaux, chaque niveau ayant un role. J'ai donc pour le moment, créé des tests unitaires sur un niveau en particulier : l'accès à une base de données.
En gros, ce niveau, c'est en fait plusieurs classes java qui reproduisent la base de données (une classe = une table).
Pour lancer automatiquement mes tests, sans passer par Eclipse (ne pas lancer la classe Java directement), on m'a demandé (eh oui, c'est mon boulot) d'intégrer mes tests dans un fichier build.xml. C'est un fichier Ant particulier qui appelle ma classe java, la compile en .class, et ensuite, la VM m'interprete le code .class (normal).
Mes tests unitaires font en réalité parti d'un projet, qui évolue en parallèle au projet sur lequel il faut effectuer les tests. Mais le fichier build.xml est lui dans le projet initial, que l'on appelera P1. Mon projet P2, possède un build.xml lui aussi, et quand je le lance, pas de problèmes. Or, quand j'intègre mon build au fichier build.xml du P1, ca ne veut pas se lancer correctement.
Je m'explique :
J'ai un fichier de propriétés que je relie à mon P2 grâce à une classe java DbProperties.java, qui m'appelle mon fichier de propriété et me renvoi les valeurs associées à chaque clé. Jusque là, pas de souci. Quand j'exécute mon build.xml du P2, aucun problème ne se pose, mais quand je fais la même chose dans le P1, il ne retrouve pas le fichier DbProperties.java, et ne peut donc pas me lancer mes tests ni même me connecter à la base de données, puisque les identifiants, et les paramètres de connexion sont dans le fichier properties.
Donc question : pourquoi je n'atteint pas le fichier DbProperties quand mon build.xml est dans le P1, alors que je peux le faire quand il est dans le P2 !?
Je vous joint ici ma classe DbProperties, et une classe qui l'appelle :
DbProperties.java :
package database; import java.io.FileInputStream; import java.util.Properties; /** * Public class initializing the connection to the property file * * @author Mickael. Creation : 29/10/07 */ public class DbProperties { private static Properties m_property = null; /** * Connection to the property file. */ public DbProperties() { m_property = new Properties(); try { FileInputStream in = new FileInputStream( "DbTest.properties" ); // System.out.println( "File descriptor : " + in.getFD().toString() ); // System.out.println( "True if the path is valid, false if it isn't : " + in.getFD().valid() ); m_property.load( in ); in.close(); }catch( Exception e ) { } } /** * Defining property key and values. * * @param sPropertyKey * Property key in the DbTest.properties file. * @return Returns a string that is the property key. */ public String getProperty( String sPropertyKey ) { return m_property.getProperty( sPropertyKey ); } }
Et une autre classe qui appelle cette dernière :
MysqlDump :
package database; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * Create a new environment of test with a new Database from a existing schema * * @author Mickael Steinberg Creation: 8/10/07 * @version : v 1.3 */ public class MysqlDump { private static DbProperties s_dbProp; boolean m_bFailure = false; private static final String s_sDRIVER_CONNECTION; private static final String s_sURL; private static final String s_sUSER; private static final String s_sPASSWORD; private static final String s_sHOST; private static final String s_sDATABASE; /** * Init bloc */ static { s_dbProp = new DbProperties(); s_sDRIVER_CONNECTION = s_dbProp.getProperty( "sDriverConnection" ); s_sURL = s_dbProp.getProperty( "sURL" ); s_sUSER = s_dbProp.getProperty( "sUser" ); s_sPASSWORD = s_dbProp.getProperty( "sPassword" ); s_sHOST = s_dbProp.getProperty( "sHost" ); s_sDATABASE = s_dbProp.getProperty( "sDatabase" ); } /** * Creation of a SQL file using a mysqldump */ public void DatabaseToDump() { try { StringBuffer sbCommand = new StringBuffer(); sbCommand.append( "mysqldump -u " ); sbCommand.append( s_sUSER ); sbCommand.append( " -p" ); sbCommand.append( s_sPASSWORD ); sbCommand.append( " -h " ); sbCommand.append( s_sHOST ); sbCommand.append( " -r dump.sql " ); sbCommand.append( s_sDATABASE ); String sCommand = sbCommand.toString(); Process pChild = Runtime.getRuntime().exec( sCommand ); System.out.println( "Dump : initiated." ); pChild.waitFor(); System.out.println( "SQL File : created." ); }catch( java.io.IOException jIOE ) { System.err.println( "Writting error on the file : " + jIOE.getMessage() ); jIOE.printStackTrace(); m_bFailure = true; }catch( InterruptedException InE ) { System.err.println( "Execution error of the file : " + InE.getMessage() ); InE.printStackTrace(); m_bFailure = true; } } /** * If a database doesn't exist, creation of a new schema */ public void SchemaCreation() { try { Class.forName( s_sDRIVER_CONNECTION ); try { Connection con = DriverManager.getConnection( s_sURL + s_sHOST + "/", s_sUSER, s_sPASSWORD ); Statement stmt = con.createStatement(); String sDROP = "DROP SCHEMA IF EXISTS " + s_sDATABASE + "_Test"; stmt.execute( sDROP ); String sSQL = "CREATE SCHEMA IF NOT EXISTS " + s_sDATABASE + "_Test"; stmt.execute( sSQL ); System.out.println( "Database : initialization." ); stmt.close(); con.close(); }catch( SQLException SQLe ) { System.err.println( "Creation of schema '" + s_sDATABASE + "' didn't work : " + SQLe.getMessage() ); m_bFailure = true; } }catch( Exception e ) { System.err.println( "Error on connection or on driver load : " + e.getMessage() + " " + e ); e.printStackTrace(); System.err.println( s_sDRIVER_CONNECTION ); m_bFailure = true; } } /** * Using the SQL file, we fill the schema created above with the dump file data */ public void DumpToDatabase() { try { StringBuffer sbCommand = new StringBuffer(); sbCommand.append( "mysql -u " ); sbCommand.append( s_sUSER ); sbCommand.append( " -p" ); sbCommand.append( s_sPASSWORD ); sbCommand.append( " -h " ); sbCommand.append( s_sHOST ); sbCommand.append( " -e \"source dump.sql\" " ); sbCommand.append( s_sDATABASE ); sbCommand.append( "_Test" ); String sCommand = sbCommand.toString(); Process pChild = Runtime.getRuntime().exec( sCommand ); System.out.println( "Currently writting the Dump in the new database." ); pChild.waitFor(); System.out.println( "Database creation : success." ); }catch( java.io.IOException jIOE ) { System.out.println( "Dump write in database didn't work : " + jIOE.getMessage() ); jIOE.printStackTrace(); m_bFailure = true; }catch( InterruptedException InE ) { System.out.println( "Error while execution : " + InE.getMessage() ); InE.printStackTrace(); m_bFailure = true; } } /** * When new environment created, delete the dump file */ public void DumpDelete() { try { File dump = new File( "dump.sql" ); dump.delete(); System.out.println( "Dump file : delete." ); }catch( Exception e ) { System.out.println( "Dump file couldn't be delete : " + e.getMessage() ); m_bFailure = true; } } public static void main( String args[] ) { MysqlDump mySqlDump = new MysqlDump(); mySqlDump.DatabaseToDump(); if( !mySqlDump.m_bFailure ) { mySqlDump.SchemaCreation(); if( !mySqlDump.m_bFailure ) { mySqlDump.DumpToDatabase(); if( !mySqlDump.m_bFailure ) { mySqlDump.DumpDelete(); System.out.println( "Generation of new database : Complete." ); } } } } }
Je n'espère pas grand chose, car même les développeurs avec qui je travaille (développeurs beaucoup plus expérimentés que moi) n'ont pas trouvé d'où venait le problème...
Merci quand même :p
Mycki
Messages postés
113
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
17 décembre 2007
46
14 déc. 2007 à 18:18
14 déc. 2007 à 18:18
Je me doutais bien que pas grand monde pourrait répondre à mon problème...
En tout cas, problème résolu, j'ai réussi à faire ce que je voulais.
Merci quand même à tous !
En tout cas, problème résolu, j'ai réussi à faire ce que je voulais.
Merci quand même à tous !