5 janvier 2010
Je viens d’installer Eclipse 3.5, plus connu sous le nom de Galileo, et le plugin m2eclipse permettant de gérer des projets Maven. Lors de la création d’un nouveau projet Maven, il m’était impossible de sélectionner un archétype car la liste “Nexus Indexer” était vide.
Heureusement, il existe une solution à ce problème. Allez dans le menu “Window” et cliquez sur “Show view > Other…”. Ensuite sélectionnez “Maven > Maven Indexes” et cliquez sur “OK”. Une nouvelle vue “Maven Indexes” s’affiche. Elle doit alors contenir deux dépôts : workspace et local. Faites un click-droit sur cette vue et cliquez sur “Add Index”. Mettez la valeur http://repo1.maven.org/maven2/ pour le champ “Repository URL” et central pour “Display name (optional)”. Enfin, cliquez sur “OK”. Eclipse va alors lancer le traitement “Updating indexes”. Une fois ce traitement terminé, vous pourrez créer un nouveau projet Maven et sélectionner un archétype puisque la liste “Nexus Indexer” ne sera plus vide.
Vous pouvez continuer à vous amuser avec Maven sur Eclipse !
eclipse java maven
Publié dans J2EE | Aucun commentaire »
12 mars 2009
Eclipse est un excellent IDE. Cependant, il lui arrive parfois de perdre les pédales. Par exemple, il se peut que l’autocomplétion, appelée également “Content Assist”, ne fonctionne plus dans les fenêtres d’édition de code Java. Cela se traduit par le fait qu’Eclipse ne propose plus automatiquement l’autocomplétion. Et même si vous faites le raccourci clavier CTRL+SPACE, vous aurez en plus le message d’erreur : “No completions available.”.
Cette erreur vient du fait que les proposals de l’éditeur d’Eclipse ont été désactivés. Pour les réactiver, il suffit de procéder ainsi :
- Dans Eclipse, sélectionner “Preferences” dans le menu “Window”.
- Etendre le noeud “Java” dans l’arbre d’exploration, puis “Editor”, ensuite “Content Assist” et sélectionner “Advanced”.
- Cliquer sur le bouton “Restore Defaults”. Cela va sélectionner les proposals par défaut dans Eclipse.
Vous pouvez à nouveau être fainéant et ne plus taper entièrement tous les noms des classes, méthodes, variables et autres… 
eclipse java
Publié dans J2EE | 7 commentaires »
30 janvier 2009
En utilisant CVS avec Eclipse, il se peut que l’on applique un tag de version CVS qui s’avère être erroné. Or il n’existe aucune fonction dans Eclipse pour renommer ou supprimer un tag CVS.
Tout d’abord, CVS ne permet pas de renommer un tag. En revanche, il est possible de copier un tag sous un nouveau nom puis de supprimer l’ancien tag. Voici donc les commandes CVS pour réaliser l’équivalent d’un renommage de tag :
cvs rtag -r mon_mauvais_tag mon_tag_correct tc
cvs rtag -d mon_mauvais_tag tc
A partir de là, pourquoi ne pas faire la même chose sous Eclipse ? Même si Eclipse ne propose pas de fonction pour copier un tag, il est facile de mettre un nouveau tag à une version récupérée à partir d’un autre tag (vous me suivez toujours ?
). Cepandant, pour d’obscures raisons de sécurité (cf. Bug 73032), Eclipse ne permet pas de supprimer un tag. Heureusement pour nous, Frank a créé un petit plugin pour Eclipse 3.4 qui permet de supprimer un tag CVS : Remove Tag Tool (nouveau lien).
Ce plugin fonctionne très bien. Il faut juste penser à mettre à jour le cache d’Eclipse pour les tags car dans le cas contraire Eclipse affichera toujours ce tag de version même s’il existe plus sous CVS.
Maintenant, vous pouvez enfin effacer tous les tags ratés (faute de frappe, erreur de numéro ou date, etc…). Veuillez cependant à ne pas trop abuser de cette nouvelle fonctionnalité ! 
cvs eclipse
Publié dans J2EE | 2 commentaires »
1 juillet 2008
Cela fait bien longtemps que je n’ai pas annoncé la sortie d’une nouvelle version d’Eclipse. Il me semble que la dernière, c’était pour la sortie d’Eclipse 3.2, il y a deux ans !
Et bien, voilà ! Le projet Eclipse avance toujours et a annoncé la semaine dernière (le 25 juin 2008 pour être exact) la sortie de la version 3.4. Comme à l’accoutumée, la liste des nouvelles fonctionnalités est disponible. Cette publication regroupe pas moins de 24 projets différents ! On peut noter l’intégration de Subversive dans l’IDE pour utiliser SVN. De plus, le système de mise à jour a été complètement revu et se nomme P2 (Provisioning Platform).
Cet IDE est disponible en téléchargement sur le site officiel.
Pour ceux d’entre vous qui souhaiteraient obtenir plus d’information, Xavlours a réalisé une synthèse pour présenter les principales nouveautés par projet que propose Ganymede.
eclipse
Publié dans J2EE | Aucun commentaire »
6 juin 2008
Vous travaillez sous Eclipse ? Vous utilisez un serveur d’applications intégrant Tomcat tel que JOnAS ou JBoss ? Et l’accès aux données est fait via Hibernate (même encapsulé dans la couche EJB3) ? Et pour finir, votre application contient un module web ?
Si vous avez répondu par l’affirmative à la majorité de ces questions, vous devez bien connaitre le message suivant :
PermGen space
Ceci se produit après quelques déploiements à chaud de votre application et provoque le blocage de votre serveur d’application. Après une telle erreur, il ne reste plus qu’à tuer le processus du serveur (le script d’arrêt ne fonctionnant plus) puis à le relancer.
Après avoir investigué sur le sujet, il semble que l’utilisation de bibliothèques externes qui font du chargement dynamique de classe ne soit pas compatible avec le redéploiement car l’URLClassLoader de Tomcat garde des références sur des objets dont les classes ont été chargées dynamiquement lors de l’exécution. Ce qui empèche le garbage collector de faire correctement son travail.
Or Hibernate utilise la bibliothèque CGLIB pour le chargement dynamique de classe (lazy=false).
Spécifique à la JVM Sun, le PermGen space est une zone mémoire qui contient tout ce qui n’est pas géré par le garbage collector; tout ce qui est relatif au classes (leur structure: méthodes, champs, annotations…), les champs static, les chaines littérales… On spécifie le PermGen space avec les propriétés -XX:PermSize=256m et -XX:MaxPermSize=256m par exemple. Plus on a de classes différentes plus il faut augmenter la taille de cette zone mémoire.
Pour résoudre le problème, enfin pour le repousser devrais-je dire, il est possible d’ajouter le paramètre suivant lors du lancement de votre serveur d’application : -XX:MaxPermSize=256m. La taille étant à définir selon votre utilisation. Par contre, il faut éviter de mettre le paramètre -noclassgc qui empêche le garbage collector de nettoyer l’espace du PermGen.
L’autre solution est d’utiliser la JVM d’IBM ou JRockit de BEA. Mais on ne fait pas de polémique ici. 
eclipse hibernate j2ee jboss jonas
Publié dans Hibernate | 2 commentaires »
27 juillet 2006
En utilisant WTP 1.5 et Eclipse 3.2, lors du déploiement de modules EJBs dans JOnAS, il arrive de rencontrer cette erreur dans la console JOnAS :
2006-07-26 09:46:10,105 :
Server.start :
Le serveur JOnAS 'jonas' est démarré sur rmi/jrmp 2006-07-26 09:47:03,589 :
EarServiceImpl.unDeployEarMBean :
Error when trying to get the canonical file from C:/JONAS_4_7_5/apps/autoload/myproject-ear.earSyntaxe du nom de fichier, de répertoire ou de volume incorrecte C:/JONAS_4_7_5/apps/autoload/myproject-ear.ear is using DTDs, WsGen needs Schema only : META-INF/jonas-ejb-jar.xml use a DTD. Only XML Schema are accepted for J2EE 1.4 webservices 2006-07-26 09:47:05,261 :
EJBServiceImpl.checkGenIC :
JOnAS version was not found in the '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar' manifest file. Auto-generating container classes...
GenIC for JOnAS 4.7.5: 'MyService' generation ... No javac command was found at 'C:Program FilesJavajre1.5.0_07..binjavac'. Check that you are using a JDK and not a JRE. 2006-07-26 09:47:06,402 :
Cmd.run :
exception java.io.IOException:
CreateProcess: "C:/Program Files/Java/jre1.5.0_07/../bin/javac" -classpath C:/DOCUME~1/MYUSERLOCALS~1/Temp/genic6738.tmp;/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar;;C:/JONAS_4_7_5/conf;C:/JONAS_4_7_4/conf;C:/JONAS_4_7_5/lib/commons/j2ee/connector-1_5.jar;C:/JONAS_4_7_5/lib/commons/j2eeejb-2_1-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/emb-jsr86-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/gnu-jaf.jar;C:/JONAS_4_7_5/lib/commons/j2ee/gnu-mail.jar;C:/JONAS_4_7_5/lib/commons/j2ee/gnu-providers.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jacc-1_0.jar;C:/JONAS_4_7_5/lib/commons/j2ee/javax77.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jaxr-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jaxrpc.jar;C:/JONAS_4_7_5/lib/commons/j2eejms.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jsp-2_0.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jsr88-api.jar;C:/JONAS_4_7_5/lib/commons/j2ee/jta-spec1_0_1.jar;C:/JONAS_4_7_5/lib/commons/j2ee/saaj.jar;C:/JONAS_4_7_5/lib/commons/j2ee/servlet-2_4.jar;C:/JONAS_4_7_5/lib/commons/j2ee/wsdl4j.jar;C:/JONA”
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at org.objectweb.common.Cmd.run(Cmd.java:147)
at org.objectweb.jonas_ejb.genic.GenIC.compilClasses(GenIC.java:887)
at org.objectweb.jonas_ejb.genic.GenIC.main(GenIC.java:425)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.objectweb.jonas_ejb.genic.wrapper.GenicServiceWrapper.callGenic(GenicServiceWrapper.java:68)
at org.objectweb.jonas.server.J2EEServerMBean.callGenic(J2EEServerMBean.java:450)
at org.objectweb.jonas.server.J2EEServerMBean.deployLocalFile(J2EEServerMBean.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:454)
at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(Unknown Source)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
at org.objectweb.jonas.container.EJBServiceImpl.checkGenIC(EJBServiceImpl.java:1771)
at org.objectweb.jonas.ear.EarServiceImpl.deployEar(EarServiceImpl.java:803)
at org.objectweb.jonas.ear.EarServiceImpl.deployEarMBean(EarServiceImpl.java:1219)
at org.objectweb.jonas.adm.Adm.addEar(Adm.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
GenIC fatal error: Failed when compiling the generated classes via java compiler 2006-07-26 09:47:06,418 :
J2EEServerMBean.deployLocalFile :
Cannot generate classes for this application : '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar. Problems when invoking main method from GenIC:
java.lang.RuntimeException:
Failed when compiling the generated classes via java compiler'. 2006-07-26 09:47:06,496 :
JFactory.checkJonasVersion : failed to find class org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home java.lang.ClassNotFoundException: org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.objectweb.jonas_ejb.container.JFactory.checkJonasVersion(JFactory.java:981)
at org.objectweb.jonas_ejb.container.JFactory.init(JFactory.java:191)
at org.objectweb.jonas_ejb.container.JFactory.<init>(JFactory.java:168)
at org.objectweb.jonas_ejb.container.JSessionFactory.<init>(JSessionFactory.java:83)
at org.objectweb.jonas_ejb.container.JStatelessFactory.<init>(JStatelessFactory.java:83)
at org.objectweb.jonas_ejb.container.JContainer.addBean(JContainer.java:237)
at org.objectweb.jonas.container.EJBServiceImpl.createContainer(EJBServiceImpl.java:815)
at org.objectweb.jonas.container.EJBServiceImpl.deployJars(EJBServiceImpl.java:1477)
at org.objectweb.jonas.ear.EarServiceImpl.deployEar(EarServiceImpl.java:929)
at org.objectweb.jonas.ear.EarServiceImpl.deployEarMBean(EarServiceImpl.java:1219)
at org.objectweb.jonas.adm.Adm.addEar(Adm.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2006-07-26 09:47:06,496 :
EJBServiceImpl.deployJars : Error when deploying '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar' javax.ejb.EJBException: MyService Cannot load org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home
at org.objectweb.jonas_ejb.container.JSessionFactory.<init>(JSessionFactory.java:98)
at org.objectweb.jonas_ejb.container.JStatelessFactory.<init>(JStatelessFactory.java:83)
at org.objectweb.jonas_ejb.container.JContainer.addBean(JContainer.java:237)
at org.objectweb.jonas.container.EJBServiceImpl.createContainer(EJBServiceImpl.java:815)
at org.objectweb.jonas.container.EJBServiceImpl.deployJars(EJBServiceImpl.java:1477)
at org.objectweb.jonas.ear.EarServiceImpl.deployEar(EarServiceImpl.java:929)
at org.objectweb.jonas.ear.EarServiceImpl.deployEarMBean(EarServiceImpl.java:1219)
at org.objectweb.jonas.adm.Adm.addEar(Adm.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source) Caused by:
java.lang.ClassNotFoundException: org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.objectweb.jonas_ejb.container.JSessionFactory.<init>(JSessionFactory.java:96)
... 19 more 2006-07-26 09:47:06,496 :
EJBServiceImpl.deployJars : Undeploy ejb-jar of the ear application 2006-07-26 09:47:06,496 : EJBServiceImpl.deployJars : Cannot remove the non-existant container '/C:/JONAS_4_7_5/work/apps/jonas/myproject-ear_2006.07.26-09.47.04/myproject-ejb.jar' 2006-07-26 09:47:06,496 : EarServiceImpl.deployEar :
Error during the deployment of the jars files of the Ear file C:/JONAS_4_7_5/apps/autoload/myproject-ear.ear':
Error during the deployment: javax.ejb.EJBException: MyService Cannot load org.objectweb.jonas_gen.com.mycompany.myproject.JOnASMyService_491313683Home 2006-07-26 09:47:06,496 : EarServiceImpl.deployEarMBean : Cannot deploy file 'C:/JONAS_4_7_5/apps/autoload/myproject-ear.ear'
Comme l’explique à juste titre le message d’erreur, la tâche Ant qui génère les EJBs est lancée par le JRE au lieu du JDK[1]. Et c’est pourquoi l’outil GenIC ne trouve pas le programme javac.
Le problème peut être résolu en lancant votre serveur d’applications[2] avec le JDK au lieu du JRE Pour celà, il faut procéder ainsi :
- Vérifier la configuration du JDK dans Eclipse
- Aller dans Windows -> Preferences… -> Java -> Installed JREs
- S’il n’y a aucun JDK dans la liste des Installed JRE, en ajouter un soit avec Add… soit avec Search…
- Configurer le serveur d’applications JOnAS avec WTP
- Aller dans Windows -> Preferences… -> Server -> Installed Runtimes
- Sélectionner le serveur d’applications utilisé[3] et cliquer sur Edit…
- Modifier le JRE en sélectionnant un JDK, puis cliquer sur Finish et enfin sur OK
Pour que la modification soit effective, il faut redémarrer le serveur d’application bien entendu. Maintenant vos petits EJBs peuvent être déployés !
Notes
[1] Il semble que ce soit un bug de Ant !?
[2] Ici JOnAS.
[3] Dans mon cas, c’est JOnAS v4.
eclipse ejb jonas
Publié dans J2EE | 2 commentaires »
13 janvier 2005
En utilisant Ant avec Eclipse, il arrive souvent de rencontrer ce genre d’erreur :
Buildfile: D:eclipseworkspaceMyProjectbuild.xml
javadoc:
[javadoc] Generating Javadoc
[javadoc] Javadoc execution
BUILD FAILED: D:eclipseworkspaceMyProjectbuild.xml:96:
Javadoc failed: java.io.IOException: CreateProcess: javadoc.exe
-d "D:eclipseworkspaceMyProjectbuild.xmldoc" -package -doctitle "MyProject 1.0.0" -classpath
"D:eclipseworkspaceMyProjectlibcommons-beanutils.jar;
D:eclipseworkspaceMyProjectlibcommons-beanutils-bean-collections.jar;
D:eclipseworkspaceMyProjectlibcommons-beanutils-core.jar;
D:eclipseworkspaceMyProjectlibcommons-digester.jar;
D:eclipseworkspaceMyProjectlibcommons-logging.jar;
D:eclipseworkspaceMyProjectlibcommons-logging-api.jar;
D:eclipseworkspaceMyProjectlibcommons-pool-1.2.jar;
D:eclipseworkspaceMyProjectliblog4j-1.2.8.jar"
-version -author -tag "todo:a:To Do:" @C:DOCUME~1Tempjavadoc1318803750 error=2
Total time: 1 second
Cette erreur n’est qu’
un problème de path.
Lire le reste de cet article »
ant eclipse java
Publié dans J2EE | Aucun commentaire »
3 décembre 2004
En utilisant Ant avec Eclipse, il arrive souvent de rencontrer ce genre d’erreur :
Buildfile: D:eclipseworkspaceMyProjectbuild.xml
build:
[javac] Compiling 1 source file to D:eclipseworkspaceMyProjectdist
[javac] BUILD FAILED: file:D:/eclipse/workspace/MyProject/build.xml:11:
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
Total time: 400 milliseconds
Ou bien :
Buildfile: D:eclipseworkspaceMyProjectbuild.xml
dist-with-classpath:
[rmic] RMI Compiling 1 class to D:eclipseworkspaceMyProjectdist
[rmic] BUILD FAILED: file:D:/eclipse/workspace/MyProject/build.xml:53: Cannot use SUN rmic,
as it is not available.
A common solution is to set the environment variable JAVA_HOME or CLASSPATH.
Total time: 2 seconds
Ces erreurs ne sont que
des problèmes de classpath.
Lire le reste de cet article »
ant eclipse java
Publié dans J2EE | 5 commentaires »