Le blog d'Olivier

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 6 février 2008

Patch GWT 1.5 / Hibernate4GWT

Pour utiliser Hibernate4GWT et GWT 1.5, il faut patcher Hibernate4GWT la partie "emul" sinon vous pouvez avoir ce genre de message à la compilation

[java] [ERROR] Line 22: The interface Comparable cannot be implemented more than once with different arguments: Comparable and Comparable<Date> 
[java] [ERROR] Line 86: Name clash: The method compareTo(Object) of type Date has the same erasure as compareTo(T) of type Comparable<T> 
but does not override it 

En fait, l'émulation JRE de Date et Timestamp ne compile plus avec un JDK 1.5. Voici les patches à passer sur Hibernate4GWT 1.3 :

Index: src/net/sf/hibernate4gwt/emul/java/sql/Timestamp.java
===================================================================
--- src/net/sf/hibernate4gwt/emul/java/sql/Timestamp.java       (revision 133)
+++ src/net/sf/hibernate4gwt/emul/java/sql/Timestamp.java       (working copy)
@@ -22,7 +22,7 @@
  * Emulation of the java.sql.TimeStamp class
  * Based on the source of java.util.Date emulation from GWT
  */
-public class Timestamp extends java.util.Date implements Cloneable, Comparable{
+public class Timestamp extends java.util.Date implements Cloneable {
   /**
    * Used only by toString().
    */
@@ -90,22 +90,6 @@
     return clone;
   }
 
-  public int compareTo(Timestamp other) {
-    long thisTime = getTime();
-    long otherTime = other.getTime();
-    if (thisTime < otherTime) {
-      return -1;
-    } else if (thisTime > otherTime) {
-      return 1;
-    } else {
-      return getNanos() - other.getNanos();
-    }
-  }
-
-  public int compareTo(Object other) {
-    return compareTo((Timestamp) other);
-  }
-
   /**
    *  Return the names for the days of the week as specified by the Date
    *  specification.
@@ -269,4 +253,4 @@
     this.jsdate = new Date(date);
     this.nanos = 0;
   }-*/;
-}
\ No newline at end of file
+}
Index: src/net/sf/hibernate4gwt/emul/java/sql/Date.java
===================================================================
--- src/net/sf/hibernate4gwt/emul/java/sql/Date.java    (revision 133)
+++ src/net/sf/hibernate4gwt/emul/java/sql/Date.java    (working copy)
@@ -19,7 +19,7 @@
  * Emulation of the java.sql.Date
  * Based on the source of java.util.Date emulation from GWT
  */
-public class Date extends java.util.Date implements Cloneable, Comparable {
+public class Date extends java.util.Date implements Cloneable {
   /**
    * Used only by toString().
    */
@@ -71,22 +71,6 @@
     return new Date(getTime());
   }
 
-  public int compareTo(Date other) {
-    long thisTime = getTime();
-    long otherTime = other.getTime();
-    if (thisTime < otherTime) {
-      return -1;
-    } else if (thisTime > otherTime) {
-      return 1;
-    } else {
-      return 0;
-    }
-  }
-
-  public int compareTo(Object other) {
-    return compareTo((Date) other);
-  }
-
   /**
    *  Return the names for the days of the week as specified by the Date
    *  specification.
Index: build.xml
===================================================================
--- build.xml   (revision 133)
+++ build.xml   (working copy)
@@ -3,7 +3,7 @@
 
        <!-- Properties -->
     <property environment="env"/>
-    <property name="version" value="1.0.3"/>
+    <property name="version" value="1.0.3-r133-patch"/>
        <property name="project" value="hibernate4gwt" />
        <property name="output.jar" value="${project}-${version}.jar" />

mardi 5 février 2008

GWT + Stripes + Hibernate4GWT

L'intégration entre GWT / Stripes / Hibernate4gwt se fait en refactorisant l'article précédent et en injectant HibernateBeanManager vi l'annotation @SpringBean.

public abstract class GWTActionBean extends HibernateRemoteService implements ActionBean {
    private ActionBeanContext context;

    public GWTActionBean() {
        super();
    }

    public ActionBeanContext getContext() {
        return context;
    }

    public void setContext(ActionBeanContext context) {
        this.context = context;
    }

    @Override
    public ServletContext getServletContext() {
        return getContext().getServletContext();
    }

    @DefaultHandler
    public Resolution defaultHandler() throws ServletException {
        return new Resolution() {
            public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
                doPost(request, response);
            }
        };
    }

    /**
     * @see net.sf.hibernate4gwt.gwt.HibernateRemoteService#setBeanManager(net.sf.hibernate4gwt.core.HibernateBeanManager)
     */
    @Override
    @SpringBean("hibernateBeanManager")
    public void setBeanManager(HibernateBeanManager manager) {
        super.setBeanManager(manager);
    }

vendredi 22 juin 2007

Mapper un arbre III

Arbre générique

Nous allons voir la partie générique de l'arbre.

Lire la suite...

mercredi 23 mai 2007

Mapper un arbre II

Préparation

Avec Maven, nous allons générer le projet et tous les éléments nécessaires pour Eclipse.

Lire la suite...

dimanche 13 mai 2007

Mapper un arbre I

Je tente une série d'article sur le mapping d'un arbre avec Hibernate. Elle me permettra d'aborder Hibernate Annotations, le JDK 1.5, Spring, DBUnit, ...

Problèmatique

Le mapping objet relationnel permet de mapper des objects vers des tables du base de données relationnelles. Hibernate propose un framework pour mettre en oeuvre cette technique. Mais tous les mappings ne sont pas simples. Par exemple mapper un arbre n'est pas le mapping le plus facile et le plus courant.

Lire la suite...