Tips&Tricks I trucchi del mestiere




Come effettuare il merging delle proprietα


Capita spesso di dover configurare delle proprietα della Java Virtual Machine affinchΘ le nostre applicazioni girino in maniera appropriata: ad esempio jdbc.drivers (per specificare la classe del driver JDBC da utilizzare, ad esempio "sun.jdbc.odbc.JdbcOdbcDriver") oppure parametri tipici della nostra applicazione, come la stringa JDBC per effettuare la connessione (ad esempio "jdbc:odbc:miodb"). Tipicamente, questo compito viene assolto in due modi:
Tip fornito dal sig. G.Guarnieri.
1) Specificando i valori direttamente nel codice, usando ad esempio
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

ci≥ comporta lo svantaggio che per modificare il valore del parametro occorre ricompilare, con effetti negativi sulla manutenibilitα e riusabilitα del codice;

2) Passare il parametro sulla riga di comando come in:

java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver MiaClasse

In questo modo per≥ si obbliga l'utente a dover ricordare una stringa molto lunga e poco intuitiva per il lancio dell'applicazione oppure si Φ tenuti a costruire degli script di shell (dipendenti quindi dal sistema operativo) per far partire il programma.
Un modo pi∙ "pulito" per risolvere ambedue i problemi pu≥ essere quello di spostare la definizione delle proprietα in un file ".properties", in modo da poterlo facilmente editare con qualunque editor di testo, e mescolare queste proprietα a quelle di sistema durante l'avvio della nostra applicazione. Ecco un metodo che effettua proprio l'operazione di merging delle proprietα:


private static void mergeProperties(String propFile) {
    Properties p = new Properties(System.getProperties());

    try {
        p.load(MiaClasse.class.getResourceAsStream(propFile));
        System.setProperties(p);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

in cui:

public static void main(String[] argv) {
   MiaClasse.mergeProperties("NomeDelFileDiProprieta.properties");
   ...
}



Un po' di Reflection all'opera.


Due classi che dato il nome di una classe, passato come argomento completo di package (per esempio provate la java.lang.String), mostrano gli attributi, i costruttori e i metodi da questa contenuta, oltre al package di appartenenza, eventuali interfacce implementate e classe estesa. Le due classi si differenziano nel fatto che la seconda estrae la lista dei parametri dei metodi e dei costruttori, e non si limita a visualizzarne la dichiarazione (cosa che fa la prima classe).
Trovate l'applicazione completa su: www.itportal.it/ioProg70/Tips o sul supporto CD-Rom allegato alla rivista.
Tips Tip fornito dal sig. M.Catena