AgileFrance | PhilippeBlayo | DernieresNouvelles | Preferences | AideEnLigne
Garbage collector
Changer pour des full gc qui se déclenchent plus souvent et durent moins longtemps que celui par défaut : "-XX Use:+ConcMarkSweepGC"
jmap / --help
ehcache
- Pour que les éléments dont la durée a expiré soient retirés, LFU n'est pas suffisant (avec l'algorithme d'éviction LFU, un élément du cache peut expirer mais n'est pas retiré du cache si aucun autre élément ne vient le remplacer)
- defaultCache ne positionne pas cette durée
Pour corriger, choisir LRU, en positionnant les durées :
<cache name="TreeCatalog?"
maxElementsInMemory?="100"
timeToIdleSeconds?="60"
timeToLiveSeconds?="60"
eternal="false"
memoryStoreEvictionPolicy?="LRU"/>
Google Guava
- Preconditions.checkState(state == State.PLAYABLE, "Can't play movie; state is %s", state);
- Joiner.on("|").skipNulls().appendTo(sb, attrs);
- Splitter.on(',') .trimResults() .omitEmptyStrings?() .split(" foo, ,bar, quux,")
Quick start avec maven 2
Initialisation de l'environnement Linux
Ajouter au .bashrc ou equivalent :
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun/
export PATH=$JAVA_HOME/bin:$PATH
export JDK_HOME=$JAVA_HOME
Initialisation du projet
- mvn archetype:generate => valeur par défaut
- mvn eclipse:eclipse
Puis dans eclipse :
- edit properties du projet (Alt-return) > java build path > new variable
- nom : M2_REPO
- path : /home/blayo/.m2/repository
Todo maven : regarder si il y a moyen de patcher le plugin eclipse pour renseigner M2_REPO dans .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs
où on trouve
org.eclipse.jdt.core.classpathVariable.M2_REPO=/home/blayo/.m2/repository
Java en Vrac
- [jboss] Pour vérifier absence de jboss : telnet localhost 1099
- [jboss] Ajouter le jar pour instancier jboss : même chemin que pour changer la JRE mais add eXternal jar
- AOP et aspectJ (à éviter si possible) : http://www.aspectprogrammer.org/blogs/adrian/
- Tests de base de donnée sous MySQL : http://dev.mysql.com/doc/refman/5.0/en/connector-mxj.html
- apache CXF (doc apache) : http://cwiki.apache.org/CXF20DOC/index.html
- jaxB 2 (tutorial) : http://www.linking4u.com/2008/11/rapide-tutorial-jaxb20/
- Tester qu'une chaine est vide : StringUtil.isEmpty()
- Convertir Set en array : new TreeSet?<String>() . toArray(new String[tables.size()]); / Dans l'autre sens : Arrays.asList()
Archives
jar
Hello world jar
java -cp C:/dojo/code/hello/hello.jar Hello
Plusieurs jar sans manifest.mf
java -cp dist\jar\appli-1.0.jar;lib\log4j.jar; fr.command.Main
(il faut préciser le Main et tous les jar dans le classpath, y compris celui de l'appli)
si -jar, -cp est ignoré
java -cp lib/lib.jar -jar main_sans_classpath_dans_manifest.jar
Unable to access jarfile main_sans_classpath_dans_manifest.jar
Le manifeste avec le classpath qui permet d'accéder aux bibliothèques malgré -jar
Manifest-Version: 1.0
Main-Class: Main
Class-Path: lib/lib.jar
Design : différence entre Factory et Builder
- Factory : on ne connait pas le type retourné
- Builder : on connait le type retourné
Références
- Tutoriel tapestry : http://www.devshed.com/c/a/Apache/Preparing-the-Workspace-for-Apache-Tapestry/
- Veille techno, des interviews : http://lescastcodeurs.com/
- Un blog sur des pratiques java : http://codemonkeyism.com/
Découvertes ACJP Certification
- Integer est un nom valide de template (List<Integer>)
- On peut mettre plusieurs classes (top-level) dans un fichier
- On peut définir une classe dans une interface
Autre
Outils java
Autres