====== Framework de gestion de projet ====== Ces logiciels permettent d'automatiser la compilation et l'installation de programmes au travers des règles de dépendance. Ces règles font surtout appel au compilateur mais également à des ordres systèmes pour la manipulation des fichiers : renommage, copie, suppression .... Ces outils systèmes ne portent pas les mêmes noms suivant les plates-formes : cp pour Unix, copy pour MSDOS. Ceci conduit donc à une mauvaise portabilité de l'ensemble et à la réécriture du Makefile selon l'environnement. Les systèmes comme ant ou maven sont une réponse à ce problème. ===== Maven ===== Maven est un outil permettant d'automatiser, de gerer et d'uniformiser le cycle de developpement applicatif. Elle reprend les même principes que Ant en y rajoutant des fonctionnalités supplémentaires. Son architecture ouverte permet l'adjonction de plugin pour étendre son domaine d'application à toute sorte de projet applicatif (site web,ejb ,web-services ,web-tiers ,...). [[framework:maven|Maven]] ===== ANT===== L'ancetre de Maven, mais toujours puissant et utile pour les projets Weblogic. [[framework:ant|Ant]] ====== LOG ====== Pour tracer les événements d'une application, en choisisant le niveau de sortie: info, debug, severe, fatal... On peut utiliser la sortie standard, un fichier texte journalier à taille maximun prédéfinie, ou autre. A utiliser depuis le début du développement, et sur tout le cycle de vie du logiciel. Très utile en mode Debug, car évite la gestion des systemes.out pendant le developpement, et permet de vérifier le comportement de l'application sans avoir à rentrer dans le code. Conseils: * Baliser chaque fichier indépendament pour avoir une trace fine des modifications; * Utiliser les balises: INFO, DEBUG, WARN, FATAL, pour éviter d'avoir des messages inutiles; * Afficher les variables sensibles en mode DEBUG; * En Mode Débug, mettre un tag avant l'entrée de chaque fonction critique; * Mettre les messages des exceptions en WARN, ou FATAL, et sauvegarder la trace dans le fichier de log. ====log4J==== Standard, car utilisé dans de nombreux Serveurs d'application et de framework. [[framework:log4j|Log4J]] ====== Tests Unitaires en Java====== *JUnit *Cactus *dbUnit ====== Tests de performance====== ===jvmstat=== [[http://java.sun.com/performance/jvmstat/|java.sun.com]] //jvmstat// est un outil qui permet de surveiller le fonctionnement d'une machine virtuelle sans impacter les performances. ====== Exportation ====== ====Excel==== //bibliotheque jxl-2.5.1.jar protected static java.io.File ExportExel(String chemin, java.util.List listExport ) { java.io.File theReportFile = new java.io.File(chemin); try { jxl.write.WritableWorkbook workbook = jxl.Workbook.createWorkbook(theReportFile); jxl.write.WritableSheet sheet = workbook.createSheet("Premier classeur", 0); jxl.write.WritableFont arial10font = new jxl.write.WritableFont(jxl.write.WritableFont.ARIAL, 15, jxl.write.WritableFont.BOLD, true, jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLUE, jxl.format.ScriptStyle.NORMAL_SCRIPT); jxl.write.WritableCellFormat arial10format = new jxl.write.WritableCellFormat(arial10font); sheet.addCell(new jxl.write.Label(5, 0, "Mon export", arial10format)); String[] champ = { "id", "actor", "name", "createDate", "removeDate" }; for (int i = 0; i < champ.length; i++) { jxl.write.Label label = new jxl.write.Label(i, 3, champ[i], arial10format); sheet.addCell(label); } if (!listExport.isEmpty()) { for (int i = 0; i < listExport.size(); i++) { int k = i + 4; String[] Champ = { ... , ... }; for (int j = 0; j < Champ.length; j++) { sheet.addCell(new jxl.write.Label(j, k, Champ[j])); } } } workbook.write(); workbook.close(); } catch (jxl.write.biff.RowsExceededException e1) { log.warn("ActionExportFiles => RowsExceededException"); e1.printStackTrace(); } catch (jxl.write.WriteException e1) { log.warn("ActionExportFiles => WriteException"); e1.printStackTrace(); } catch (java.io.IOException e) { log.warn("ActionExportFiles => IOException"); e.printStackTrace(); } finally { log.info("exportFile=> Le fichier à été généré correctement."); } return theReportFile; } ====== Date ====== Pour faire un parsing de String vers un format de type Date public static Date stringToDate(java.lang.String dateS) throws Exception { Date date; String format1 = "yyyy-MM-dd KK:mm:ss.SSS"; SimpleDateFormat bartDateFormat = new SimpleDateFormat(format1, Locale.ENGLISH); try { ParsePosition pos = new ParsePosition(0); date = bartDateFormat.parse(dateS, pos); } catch (Exception ex) { log.fatal("Probleme de parsing de date"); System.out.println(ex.getMessage()); throw ex; } return date; } ===== Executer une commande java avec tous les jar ===== ==== Avec Autosys ou Windows 2000 ==== Nous allons utiliser 3 fichiers: Fichier main.cmd @echo off call build_class_path.cmd .\lib Echo ************ The Classpath definition is %CLASSPATH% echo ************ JAVA_HOME Directory ************ echo. set JAVA_HOME=C:\...\Java\jdk1.5.0 @echo %JAVA_HOME% echo. @echo ************ CURRENT DIRECTORY ************ echo. ECHO %CD% echo. @echo ************ LOG4J_XMl_FILE ************ echo. set LOG4J_XMl_FILE=%CD%\log4j.xml @echo %LOG4J_XMl_FILE% echo. %JAVA_HOME%\bin\java -Xms256m -Xmx768M -cp %CLASSPATH% -Dlog4j.configuration=file:%LOG4J_XMl_FILE% gwadanina.net.test.Main pause Fichier build_class_path.cmd set _CLASSPATH=%CLASSPATH% set CLASSPATH=%1 for %%i in ( %1\*.jar ) do call build_class_path_append.cmd %%~fsi if "%_CLASSPATH%" == "" goto END set CLASSPATH=%_CLASSPATH%;%CLASSPATH% :END Fichier build_class_path_append.cmd set CLASSPATH=%CLASSPATH%;%1 ==== Avec Windows XP ==== @echo off setlocal ENABLEDELAYEDEXPANSION if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;.) else (set CLASSPATH=.) FOR /R .\lib %%L IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%L Echo The Classpath definition is %CLASSPATH% echo ************ JAVA_HOME Directory ************ echo. set JAVA_HOME=C:\...\Java\jdk1.5.0 @echo %JAVA_HOME% echo. @echo ************ CURRENT DIRECTORY ************ echo. ECHO %CD% echo. @echo ************ LOG4J_XMl_FILE ************ echo. set LOG4J_XMl_FILE=%CD%\log4j.xml @echo %LOG4J_XMl_FILE% echo. %JAVA_HOME%\bin\java -Xms256m -Xmx768M -cp %CLASSPATH% -Dlog4j.configuration=file:%LOG4J_XMl_FILE% gwadanina.net.test.Main ====== Java 5 ====== L'apprentissage des technologies n'est pas le but de ce Wiki. Pour ce faire nous ne saurions vous conseillez l'excellent site communautaire www.developpez.com et la documentation ad hoc de Lionel Roux sur Tiger : [[http://lroux.developpez.com/article/java/tiger/|lroux.developpez.com]] Nouveautés notable Java 5.0 : *Boucle for *type enum *I/O Scanner *Scanner *Api concurrence *Map atomique *Inclusion de JMX (java management) *Méthaprogrammation par annotation *Facilite de developpement *Réduction du volume de code *Simplification et rationalisation des programmes *Vérification à la compilation des tags ======L'introspection en Java====== [[introspection]] ======Java & Base de données====== [[base_de_donnees|Java & Base de données]] ====Utilisation d'une DataSource==== [[serveurweb:gestion_de_data_source]] ====== Règles de programmation Java ====== Les règles de programmation Java, les règles de présentation de code Java et les règles de nommage. [[bestpracticejava|Best Practice Java]] ====== Tips ====== ==== Ramasse-miettes ==== Si les processus java prennent 100% du temps CPU, cela est peut-être dû à une surutilisation du ramasse-miettes. Pour mettre en évidence ce problème, tu peux utiliser les options suivantes pour afficher des informations sur son activité : ^ sur les JVM Sun|-Xverbose:gc, -XX:+PrintGCDetails | ^ sur les JVM IBM|-Xverbose:gc | ==== Connection à travers un Proxy en utilisant un programme Java==== Il faut mettre les constantes Systeme du proxy : System.getProperties().put("proxySet", "true"); System.getProperties().put("http.proxyHost", proxyServer); System.getProperties().put("http.proxyPort", proxyPort); Pour s'authentifier sur le proxy faire un appel à : Authenticator.setDefault(new MyAuthenticator()); class MyAuthenticator extends Authenticator{ protected PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication("login", "password".toCharArray()); } } [[.:exemple:proxyetauthentification|Exemple de code proxy]]