java:techno_java

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 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 ,…).

Maven

L'ancetre de Maven, mais toujours puissant et utile pour les projets Weblogic.

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.

Standard, car utilisé dans de nombreux Serveurs d'application et de framework.

Log4J

Tests Unitaires en Java

  • JUnit
  • Cactus
  • dbUnit

Tests de performance

jvmstat

java.sun.com

jvmstat est un outil qui permet de surveiller le fonctionnement d'une machine virtuelle sans impacter les performances.

Exportation

//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;
    }

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
@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 :

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

Java & Base de données

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.

Best Practice Java

Tips

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

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 de code proxy

  • java/techno_java.txt
  • Dernière modification: 2018/10/13 14:59
  • (modification externe)