[JAVA] Gros problème
Résolu
Mycki
Messages postés
113
Date d'inscription
Statut
Membre
Dernière intervention
-
Mycki Messages postés 113 Date d'inscription Statut Membre Dernière intervention -
Mycki Messages postés 113 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un gros souci en Java, ou plutot devrais-je dire, en ANT. J'espère qu'il y a du monde qui s'y connait en ANT, qu'on utilise grâce à du XML...
Si quelqu'un s'y connait, qu'il se manifeste, afin que je lui expose mon problème.
Merci beaucoup
J'ai un gros souci en Java, ou plutot devrais-je dire, en ANT. J'espère qu'il y a du monde qui s'y connait en ANT, qu'on utilise grâce à du XML...
Si quelqu'un s'y connait, qu'il se manifeste, afin que je lui expose mon problème.
Merci beaucoup
A voir également:
- [JAVA] Gros problème
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
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