2010-07-26 6 views
0

Quelqu'un peut-il me donner un exemple de GWT + JPA + Gilead, je n'arrive pas à trouver quoi que ce soit sur Google avec ce sujet.GWT avec JPA et Gilead exemple

Merci


Merci Maksim,

Je ne suis pas en utilisant cela dans un serveur EJB mais Tomcat. Je comprends l'étape que vous avez indiquée ci-dessus, mais je ne suis pas sûr de savoir comment faire l'étape suivante qui consiste à configurer PersistentBeanManager et envoyer mon objet sur le fil.

Voici ce que j'ai jusqu'ici, mais je n'ai pas eu la chance de tester si cela fonctionne encore. Si vous voyez un problème avec cela, faites le moi savoir, merci.

private HibernateJpaUtil gileadUtil = new HibernateJpaUtil(); Private static final EntityManagerFactory factory = Persistence.createEntityManagerFactory ("MyPersistentUnit");

public MyServlet() { 

    gileadUtil.setEntityManagerFactory(factory); 

    PersistentBeanManager pbm = new PersistentBeanManager(); 
    pbm.setPersistenceUtil(gileadUtil); 
    pbm.setProxyStore(new StatelessProxyStore()); 

    setBeanManager(pbm); 

    Book book = new Book(); 
    Book cloned = (Book) pbm.clone(book);    

      //send the cloned book over the wire 

} 
+0

S'il vous plaît voir ce post, j'ai le même problème, peut-être qu'il vous aide: http://stackoverflow.com/questions/5567444/gwt-gilead-jpa-configuration/5571487#5571487 –

Répondre

0

Entité:

//imports 
@Entity 
public class Book extends LightEntity implements Serializable { 

    private static final long serialVersionUID = 21L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String title; 

    @Lob 
    private String description; 

    @ManyToMany(cascade = CascadeType.ALL) 
    private List<Author> author; 

    // Getters and setters 
    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (getId() != null ? getId().hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Book)) { 
      return false; 
     } 
     Course other = (Book) object; 
     if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 
} 

L'objet du livre semble même. Ensuite, utilisez-le comme EJB standard sur votre serveur et comme DTO standard sur votre client. N'oubliez pas d'ajouter les bibliothèques de Gilead à votre projet.

1

J'ai essayé de configurer mon projet de façon très similaire et j'ai également rencontré l'exception d'hibernation. J'ai compris que lorsque vous utilisez JPA, j'ai besoin d'initialiser le HibernateJPAUtil avec le EntityManagerFactory. Quand j'ai fait ça, ça a marché. Cela change vos deux premières lignes de code:

public class MyServiceImpl extends PersistentRemoteService implements MyService { 

    public MyServiceImpl() { 
    final EntityManagerFactory emf = Persistence.createEntityManagerFactory("MA");  
    final PersistentBeanManager persistentBeanManager = new PersistentBeanManager(); 
    persistentBeanManager.setPersistenceUtil(new HibernateJpaUtil(emf)); // <- needs EMF here 
    persistentBeanManager.setProxyStore(new StatelessProxyStore()); 
    setBeanManager(persistentBeanManager); 
    } 

    @Override // from MyService 
    public Stuff getStuff() { 
    // no need for clone/merge here, as Gilead's GWT PersistentRemoteService does this for us 
    ... 
    return stuff; 
    } 
} 

Aussi j'utilisé net.sf.gilead.pojo.java5.legacy.LightEntity comme classe de base pour toutes mes entités (noter que le paquet java5.legacy).

+0

Merci, je vais lui donner un coup. – duvo

0

J'espère que ce blog vous aidera.
http://zawoad.blogspot.com/2010/06/google-app-engine-jdo-and-gxtext-gwt.html




Ceci n'est pas un exemple direct de ce que vous voulez mais l'approche devrait être comme ceci. Nous avons suivi la même approche dans notre projet avec GWT + JPA + EJB. pour envoyer votre objet sur le fil, vous avez besoin d'un objet de transfert de données (DTO). Convertissez cet objet DTO en objet Entity et faites ce que vous voulez faire.

+0

Une autre approche en plus du protocole DTO consiste à utiliser un sérialiseur de champ personnalisé pour gérer la sérialisation de vos objets lors du passage du fil. Je l'ai écrit sur http://dirtbagprogrammer.wordpress.com/2011/09/27/gwt-custom-field-serializers-versus-hibernates-lazyinitializationexception/ – Jason