[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
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
A voir également:

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
Et si tu posais ton problème directement..?
0
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
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 :
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
0
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
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 !
0