mercredi 24 août 2011

The content of element type must match

Problem :

J'ai eu l'erreur suivante :
The content of element type "filter" must match  "(icon?,filter-name,display-name?,description?,filter-class,init-param*)".

Voici un extrait du fichier web.xml :
<filter> 
    <display-name>RichFaces Filter</display-name>
    <filter-name>richfaces</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 


Solution :

En faite, la solution est dans le message.On doit déclarer les balises de  filter-mappings dans un certain ordre.
Il faut mettre en premier filter-name puis url-pattern ou servlet name.
So you have to correct like that :

<filter> 
    <filter-name>richfaces</filter-name>
    <display-name>RichFaces Filter</display-name>   
    <filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 

Une remarque importante :

Cette erreur est apparue car j'avais mis dans le fichier web.xml la dtd 2.3 :

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

Cependant, il ne s'agit pas de la dernière dtd. Apparement, pour corriger l'erreur, il faut écrire le début de son web.xml comme ceci :


<?xml version="1.0"?>
<web-app version="2.5" 
     xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

vendredi 19 août 2011

GWT et Eclipse : Unable to find a module

Problème :

Lors du lancement de mon application, j'ai l'erreur suivante :


Loading modules
   de.toolforge.googlechartwrapper.googlechartwrapper
      [ERROR] Unable to find 'de/toolforge/googlechartwrapper/googlechartwrapper.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?
[ERROR] shell failed in doStartup method

Cependant, je n'ai aucune référence à ce module dans mon code (C'est un module que j'ai effacé).

Solution :

Run -> Run Configurations
Puis il faut aller dans votre application google dans l'onglet Arguments.

Il faut ensuite effacer le module qui pose problème.Dans mon cas :   de.toolforge.googlechartwrapper.googlechartwrapper

jeudi 18 août 2011

GWT : Erreur de compilation avec une Map



Problème :

Dans votre code, vous déclarez Map&lt;Integer, Integer&gt; map = new HashMap&lt;Integer, Integer&gt;
et lors de la compilation vous avez l'erreur suivante :

         [ERROR] Line 23: No source code is available for type com.google.gwt.dev.util.collect.HashMap&lt;K,V&gt;; did you forget to inherit a required module?


Solution :

Les collections du tpe Map fonctionne avec des Objects.Or la class Object n'est pas serializable.
Il faut donc créer une classe qui va contenir votre map en lui passant @gwt.typeArgs &lt;java.lang.Integer,java.lang.Integer&gt;
dans les commentaires pour définir ce que va contenir votre map :


public class ChartData implements IsSerializable {


 /**
  * This field is a Map that must always contain Strings as its keys and
  * values.
  * 
  * @gwt.typeArgs &lt;java.lang.Integer,java.lang.Integer&gt;
  */
 public Map data;
 
 public ChartData() {
 }
}


Ensuite vous pouvez utiliser votre map comme ceci :

CharData charData = new CharData();
charData.data.put(12,13);

Référence :
http://www.gwtapps.com/doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.SerializableTypes.html

mardi 16 août 2011

[WARN] Candidate class for JDOQL single-string query (Class) could not be resolved Class



Problème :

[WARN] Candidate class for JDOQL single-string query (User) could not be resolved User

Solution :

Je n'avais pas encore instancié ma classe User.En fait, J'appelais ma méthode avec une fonction statique comme ceci :
User.myMethod();

Et dans my Method, je faisais ma requête :


PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(User.class);


Pour résoudre le problème, j'ai fait ceci :


User myUser = new User();
myUser.myMethod(); // myMethod n'est plus statique

vendredi 12 août 2011

Comment logger avec GWT ?


Dans votre fichier test.gwt.xml file, il faut ajouter :

 &lt;inherits name="com.google.gwt.logging.Logging"/&gt;
  &lt;set-property name="gwt.logging.logLevel" value="INFO"/&gt;          # To change the default logLevel
  &lt;set-property name="gwt.logging.enabled" value="TRUE"/&gt; 

Dans votre fichier java :

  • Import du logger :

import java.util.logging.Logger;

  • Déclaration de la variable logger :

private static final Logger logger = Logger.getLogger(WeightManager.class.getName());

  • Appel des méthodes de logs :

logger.info("========&gt;TEST !!!!");




Remarque : Cela fonctionne uniquement dans la partie client.Je ne sais pas encore comment faire des logs dans la partie server.

dimanche 7 août 2011

JBOSS 7 et JEE 6 un bon moyen de mettre à jour ses connaissances


Si vous souhaitez tester les nouveautés de JEE6 de manière simple et rapide, je vous conseil de télécharger JBOSS 7 et les exemples de la documentation (appli hello world, login ...).La documentation est bien faite et en plus vous utiliserez Maven 3.

vendredi 5 août 2011

Java 7 disponible pour le plugin compiler de Maven




Ce matin j'ai essayé de compiler mon projet avec Maven et le jdk7 et cela marche !



mercredi 3 août 2011

Bug sur Java 7


En ce moment, on parle beaucoup d'un bug sur Java 7 et la communauté s'enflamme un peu.Je suis tombé sur un commentaire qui résume tout  :

- oui java 7 est buggé sur l’optimisation des boucles
- oui cela pose problème avec lucene et surement quelques autres projets
- non il ne faut pas évité java 7 a tout prix
- oui il faut être prudent et attendre avant une migration en prod et cela vaut pour toutes nouvelles versions d’un produit
- oui il est possible de désactiver les optimisation pour retrouver un java 7 non buggé.
http://www.infoq.com/news/2011/08/java7-hotspot

ref : http://www.silicon.fr/victime-de-bugs-handicapants-java-7-est-rejete-par-la-communaute-apache-57691.html